{-# LANGUAGE Haskell2010 #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE BinaryLiterals #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE CPP #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveLift #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE GeneralisedNewtypeDeriving #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PackageImports #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} module Data.Multibase.Types.Internal.IsCodec.Base64Pad where import Data.Coerce import Data.Multibase.Types.Internal.IsCodec.Kit import Data.Multibase.Types.Internal.External.Base64 newtype Base64Pad = Base64Pad { getBase64Pad :: Text } deriving stock (Generic,Show) deriving newtype (Eq,NFData,Ord) instance IsCodec Base64Pad where isCodecM _ = IsCodecM { _icm_algorithm = MbBase64Pad , _icm_docs = CodecDocs { _cdocs_url = "https://www.rfc-editor.org/rfc/rfc4648" , _cdocs_summary = "(RFC 4648) Base64 standard encoding (MIME alphabet with padding)" , _cdocs_text_based = False , _cdocs_has_lazy = True , _cdocs_has_short = True , _cdocs_pipelines = [minBound..maxBound] } , _icm_mbEncode = coerce encodeBYBase64Pad , _icm_mbLazyEncode = coerce encodeBLBase64Pad , _icm_mbShortEncode = coerce encodeBSBase64Pad , _icm_mbEncode' = coerce encodeBYBase64Pad' , _icm_mbLazyEncode' = coerce encodeBLBase64Pad' , _icm_mbShortEncode' = coerce encodeBSBase64Pad' , _icm_mbTextEncode = coerce encodeTXBase64Pad , _icm_mbTextLazyEncode = coerce encodeTLBase64Pad , _icm_mbTextShortEncode = coerce encodeTSBase64Pad , _icm_mbDecode = fromRawDecoder (Proxy @Base64Pad) decodeBYBase64Pad , _icm_mbLazyDecode = fromRawDecoder (Proxy @Base64Pad) decodeBLBase64Pad , _icm_mbShortDecode = fromRawDecoder (Proxy @Base64Pad) decodeBSBase64Pad , _icm_mbDecode' = fromRawDecoder (Proxy @Base64Pad) decodeBYBase64Pad , _icm_mbLazyDecode' = fromRawDecoder (Proxy @Base64Pad) decodeBLBase64Pad , _icm_mbShortDecode' = fromRawDecoder (Proxy @Base64Pad) decodeBSBase64Pad , _icm_mbTextDecode = useTextDecoder (Proxy @Base64Pad) decodeBYBase64Pad -- NB } Text uses decodeLatin1 , _icm_mbTextLazyDecode = useTextDecoder (Proxy @Base64Pad) decodeBLBase64Pad -- NB } so decode use ByteString , _icm_mbTextShortDecode = useTextDecoder (Proxy @Base64Pad) decodeBSBase64Pad -- NB } decoder w/ sep Utf8 decoer , _icm_isValidMb = fromRawValidator (Proxy @Base64Pad) isValidBYBase64Pad , _icm_isValidMbLazy = fromRawValidator (Proxy @Base64Pad) isValidBLBase64Pad , _icm_isValidMbShort = fromRawValidator (Proxy @Base64Pad) isValidBSBase64Pad , _icm_isValidMb' = fromRawValidator (Proxy @Base64Pad) isValidBYBase64Pad , _icm_isValidMbLazy' = fromRawValidator (Proxy @Base64Pad) isValidBLBase64Pad , _icm_isValidMbShort' = fromRawValidator (Proxy @Base64Pad) isValidBSBase64Pad , _icm_testVectors = [ validDecodeTV "" "M" , validDecodeTV "f" "MZg==" , validDecodeTV "fo" "MZm8=" , validDecodeTV "foo" "MZm9v" , validDecodeTV "foob" "MZm9vYg==" , validDecodeTV "fooba" "MZm9vYmE=" , validDecodeTV "foobar" "MZm9vYmFy" , invalidInputTV "M=eAoeAo=" , invalidInputTV "Me=AoeAo=" , invalidInputTV "M=eAoeAo=" , invalidInputTV "MeAoe=Ao=" , invalidInputTV "MeAoeA=o=" , decodeFailTV "MZE==" ] } {-# INLINE isCodecM #-}