module Cachix.Types.NarFileName ( NarFileName (..), ) where import Data.Text (dropEnd, takeEnd) import Protolude import Servant.API -- | .nar.xz file data NarFileName = NarFileName { contentHash :: Text, extension :: Text } deriving (Generic) instance FromHttpApiData NarFileName where parseUrlPiece s = if takeEnd 7 s == ".nar.xz" then Right $ NarFileName (dropEnd 7 s) "xz" else Left "Wrong extension" instance ToHttpApiData NarFileName where toUrlPiece narfilename = contentHash narfilename <> ".nar." <> extension narfilename