mfmts-1.2.0.0: cid/MultiFormats/CID/Component/Codec.hs
-- | Module : MultiFormats.CID.Component.Codec
-- Description : Implements extracting codecs from CIDs.
-- Copyright : Zoey McBride (c) 2026
-- License : AGPL-3.0-or-later
-- Maintainer : zoeymcbride@mailbox.org
-- Stability : experimental
module MultiFormats.CID.Component.Codec (Codec (Codec)) where
import Control.DeepSeq (NFData (..), force)
import Data.Bifunctor (first)
import Data.XCodec.BinaryTranscoder (BinaryTranscoder)
import MultiFormats.CID.Extractor (Extractor (extractor))
import MultiFormats.MultiCodec (MultiCodec (MultiCodec))
-- | Represents a MultiCodec value embedded within CID data.
newtype Codec = Codec MultiCodec deriving (Eq)
-- | Evaluates Codec into normal form.
instance NFData Codec where
rnf (Codec mc) = rnf mc
-- | Extracts the MultiCodec from VarInt in bytes and wraps in Codec.
instance (BinaryTranscoder t) => Extractor Codec t where
extractor bytes = first (force . Codec . MultiCodec) <$> extractor bytes