mfmts-1.0.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.Bifunctor (Bifunctor (first))
import Data.ByteString (ByteString)
import MultiFormats.CID.Errors
import MultiFormats.VarInt (VarInt, extractVarInt)
-- | Extracts `a` from ByteString.
type Extraction a = ByteString -> Okay (a, ByteString)
-- | Generic function signature for extracting CID components.
class Extractor a where
extractor :: Extraction a
-- | Extractor for VarInts in CID data. Converts VarInt.Error to CID.Error.
instance Extractor VarInt where
extractor = first InvalidVarInt . extractVarInt