module Network.PublicSuffixList.Serialize (getDataStructure, putDataStructure) where import qualified Data.ByteString as BS import qualified Data.ByteString.UTF8 as U8 import Data.Functor import Data.Serialize.Get hiding (getTreeOf) import Data.Serialize.Put import qualified Data.Text as T import Network.PublicSuffixList.Types getTreeOf :: Ord k => Get k -> Get (Tree k) getTreeOf :: forall k. Ord k => Get k -> Get (Tree k) getTreeOf Get k p = forall e. Map e (Tree e) -> Tree e Node forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall k a. Ord k => Get k -> Get a -> Get (Map k a) getMapOf Get k p (forall k. Ord k => Get k -> Get (Tree k) getTreeOf Get k p) getText :: Get T.Text getText :: Get Text getText = (String -> Text T.pack forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> String U8.toString forall b c a. (b -> c) -> (a -> b) -> a -> c . [Word8] -> ByteString BS.pack) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Get a -> Get [a] getListOf Get Word8 getWord8 getDataStructure :: Get DataStructure getDataStructure :: Get DataStructure getDataStructure = forall a b. Get a -> Get b -> Get (a, b) getTwoOf (forall k. Ord k => Get k -> Get (Tree k) getTreeOf Get Text getText) (forall k. Ord k => Get k -> Get (Tree k) getTreeOf Get Text getText) putTree :: Ord k => Putter k -> Putter (Tree k) putTree :: forall k. Ord k => Putter k -> Putter (Tree k) putTree Putter k p = forall k a. Putter k -> Putter a -> Putter (Map k a) putMapOf Putter k p (forall k. Ord k => Putter k -> Putter (Tree k) putTree Putter k p) forall b c a. (b -> c) -> (a -> b) -> a -> c . forall e. Tree e -> Map e (Tree e) children putText :: Putter T.Text putText :: Putter Text putText = forall a. Putter a -> Putter [a] putListOf Putter Word8 putWord8 forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> [Word8] BS.unpack forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> ByteString U8.fromString forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> String T.unpack putDataStructure :: Putter DataStructure putDataStructure :: Putter DataStructure putDataStructure = forall a b. Putter a -> Putter b -> Putter (a, b) putTwoOf (forall k. Ord k => Putter k -> Putter (Tree k) putTree Putter Text putText) (forall k. Ord k => Putter k -> Putter (Tree k) putTree Putter Text putText)