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
p
=
Node
<$>
getMapOf
p
(
getTreeOf
p
)
getText
::
Get
T.Text
getText
= (
T.pack
.
U8.toString
.
BS.pack
)
<$>
getListOf
getWord8
getDataStructure
::
Get
DataStructure
getDataStructure
=
getTwoOf
(
getTreeOf
getText
) (
getTreeOf
getText
)
putTree
::
Ord k =>
Putter
k
->
Putter
(
Tree
k
)
putTree
p
=
putMapOf
p
(
putTree
p
)
.
children
putText
::
Putter
T.Text
putText
=
putListOf
putWord8
.
BS.unpack
.
U8.fromString
.
T.unpack
putDataStructure
::
Putter
DataStructure
putDataStructure
=
putTwoOf
(
putTree
putText
) (
putTree
putText
)