mfmts-1.1.0.0: cid/MultiFormats/CID/Serializer.hs
-- | Module : MultiFormats.CID.Serializer
-- Description : Provides serialization types for CID
-- Copyright : Zoey McBride (c) 2026
-- License : AGPL-3.0-or-later
-- Maintainer : zoeymcbride@mailbox.org
-- Stability : experimental
--
-- This file provides a type-class `Serializer` for serializing CID data to
-- ByteString. It also provides the type-alias `Serialization` for the function
-- signature of some serialization over type a.
module MultiFormats.CID.Serializer
( Serialization,
Serializer (serializer),
)
where
import Data.Bifunctor (Bifunctor (first))
import Data.ByteString.Builder (Builder)
import MultiFormats.CID.Errors
import MultiFormats.MultiCodec (MultiCodec, multiCodecValue)
import MultiFormats.MultiHash (MultiHash, multiHashCodec)
import MultiFormats.VarInt (VarInt, serializeVarInt)
-- | Represents a function that implements serialization.
type Serialization a = a -> Okay Builder
-- | Generic function signature for serializing CID components.
class Serializer a where
serializer :: a -> Okay Builder
-- | Serializer for VarInts in CID data. Converts VarInt.Error to CID.Error.
instance Serializer VarInt where
serializer = first InvalidVarInt . serializeVarInt
-- | Composes with Serializer VarInt.
instance Serializer MultiCodec where
serializer = serializer . multiCodecValue
-- | Composes with Serializer MultiCodec.
instance Serializer MultiHash where
serializer = serializer . multiHashCodec