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 = Map k (Tree k) -> Tree k forall e. Map e (Tree e) -> Tree e Node (Map k (Tree k) -> Tree k) -> Get (Map k (Tree k)) -> Get (Tree k) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Get k -> Get (Tree k) -> Get (Map k (Tree k)) forall k a. Ord k => Get k -> Get a -> Get (Map k a) getMapOf Get k p (Get k -> Get (Tree k) 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 (String -> Text) -> ([Word8] -> String) -> [Word8] -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> String U8.toString (ByteString -> String) -> ([Word8] -> ByteString) -> [Word8] -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . [Word8] -> ByteString BS.pack) ([Word8] -> Text) -> Get [Word8] -> Get Text forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Get Word8 -> Get [Word8] forall a. Get a -> Get [a] getListOf Get Word8 getWord8 getDataStructure :: Get DataStructure getDataStructure :: Get DataStructure getDataStructure = Get (Tree Text) -> Get (Tree Text) -> Get DataStructure forall a b. Get a -> Get b -> Get (a, b) getTwoOf (Get Text -> Get (Tree Text) forall k. Ord k => Get k -> Get (Tree k) getTreeOf Get Text getText) (Get Text -> Get (Tree Text) 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 = Putter k -> Putter (Tree k) -> Putter (Map k (Tree k)) forall k a. Putter k -> Putter a -> Putter (Map k a) putMapOf Putter k p (Putter k -> Putter (Tree k) forall k. Ord k => Putter k -> Putter (Tree k) putTree Putter k p) Putter (Map k (Tree k)) -> (Tree k -> Map k (Tree k)) -> Putter (Tree k) forall b c a. (b -> c) -> (a -> b) -> a -> c . Tree k -> Map k (Tree k) forall e. Tree e -> Map e (Tree e) children putText :: Putter T.Text putText :: Putter Text putText = Putter Word8 -> Putter [Word8] forall a. Putter a -> Putter [a] putListOf Putter Word8 putWord8 Putter [Word8] -> (Text -> [Word8]) -> Putter Text forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> [Word8] BS.unpack (ByteString -> [Word8]) -> (Text -> ByteString) -> Text -> [Word8] forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> ByteString U8.fromString (String -> ByteString) -> (Text -> String) -> Text -> ByteString forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> String T.unpack putDataStructure :: Putter DataStructure putDataStructure :: Putter DataStructure putDataStructure = Putter (Tree Text) -> Putter (Tree Text) -> Putter DataStructure forall a b. Putter a -> Putter b -> Putter (a, b) putTwoOf (Putter Text -> Putter (Tree Text) forall k. Ord k => Putter k -> Putter (Tree k) putTree Putter Text putText) (Putter Text -> Putter (Tree Text) forall k. Ord k => Putter k -> Putter (Tree k) putTree Putter Text putText)