mfmts-1.1.0.0: cid/MultiFormats/CID/Extractor.hs
-- | Module : MultiFormats.CID.Extractor
-- Description : Provides extracting 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 `Extractor` for extracting CID data from a
-- ByteString. It also provides the type-alias `Extraction` for the function
-- signature of extracting valid data from the top of a ByteString.
module MultiFormats.CID.Extractor
( Extractor (extractor),
Extraction,
)
where
import Data.BaseSystem.BinaryTranscoder (BinaryTranscoder)
import Data.Bifunctor (Bifunctor (first))
import MultiFormats.CID.Errors
import MultiFormats.VarInt (VarInt, extractVarInt)
-- | Alias for `extractor` method. Extracts `a` from ByteString.
type Extraction a t = t -> Okay (a, t)
-- | Generic function signature for extracting CID components.
class (BinaryTranscoder t) => Extractor a t where
extractor :: t -> Okay (a, t)
-- | Extractor for VarInts in CID data. Converts VarInt.Error to CID.Error.
instance (BinaryTranscoder t) => Extractor VarInt t where
extractor = first InvalidVarInt . extractVarInt