module Network.Memcache.Serializable(Serializable, serialize, deserialize) where
import Data.ByteString (ByteString)
import Codec.Binary.UTF8.Light (encode, decode)
class Serializable a where
serialize :: a -> ByteString
deserialize :: ByteString -> Maybe a
serializeL :: [a] -> ByteString
deserializeL :: ByteString -> [a]
serializeL = error "unimp"
deserializeL = error "unimp"
instance Serializable Char where
serialize x = encode [x]
deserialize s =
case decode s of
(c:[]) -> Just c
_ -> Nothing
serializeL = encode
deserializeL = decode
instance Serializable ByteString where
serialize = id
deserialize = Just
instance Serializable Int where
serialize = encode . show
deserialize = Just . read . decode
instance (Serializable a) => Serializable [a] where
serialize = serializeL
deserialize = Just . deserializeL