{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeApplications #-}
module System.Nix.Store.Remote.Builders (
buildContentAddressableAddress
) where
import Data.Text.Lazy (Text)
import System.Nix.Hash ( Digest
, SomeNamedDigest(SomeDigest)
, BaseEncoding(Base32)
)
import System.Nix.StorePath (ContentAddressableAddress(..))
import Data.Text.Lazy.Builder (Builder)
import qualified Data.Text.Lazy.Builder
import qualified System.Nix.Hash
buildContentAddressableAddress
:: ContentAddressableAddress
-> Text
buildContentAddressableAddress :: ContentAddressableAddress -> Text
buildContentAddressableAddress =
Builder -> Text
Data.Text.Lazy.Builder.toLazyText (Builder -> Text)
-> (ContentAddressableAddress -> Builder)
-> ContentAddressableAddress
-> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContentAddressableAddress -> Builder
contentAddressableAddressBuilder
contentAddressableAddressBuilder
:: ContentAddressableAddress
-> Builder
contentAddressableAddressBuilder :: ContentAddressableAddress -> Builder
contentAddressableAddressBuilder (Text Digest 'SHA256
digest) =
Builder
"text:"
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Digest 'SHA256 -> Builder
forall (a :: HashAlgorithm). Digest a -> Builder
digestBuilder Digest 'SHA256
digest
contentAddressableAddressBuilder (Fixed NarHashMode
_narHashMode (SomeDigest (Digest a
digest :: Digest hashAlgo))) =
Builder
"fixed:"
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> (Text -> Builder
Data.Text.Lazy.Builder.fromText (Text -> Builder) -> Text -> Builder
forall a b. (a -> b) -> a -> b
$ NamedAlgo a => Text
forall (a :: HashAlgorithm). NamedAlgo a => Text
System.Nix.Hash.algoName @hashAlgo)
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Digest a -> Builder
forall (a :: HashAlgorithm). Digest a -> Builder
digestBuilder Digest a
digest
digestBuilder :: Digest a -> Builder
digestBuilder :: Digest a -> Builder
digestBuilder =
Text -> Builder
Data.Text.Lazy.Builder.fromText
(Text -> Builder) -> (Digest a -> Text) -> Digest a -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BaseEncoding -> Digest a -> Text
forall (a :: HashAlgorithm). BaseEncoding -> Digest a -> Text
System.Nix.Hash.encodeInBase BaseEncoding
Base32