packages feed

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