module Hercules.Formats.NixCache where import Data.Aeson import Data.Text (Text) import Hercules.Formats.Common ( noVersion, withKind, withVersions, ) import Prelude -- | Credentials and keys for a cache. data NixCache = NixCache { storeURI :: Text, signingKeys :: [Text], publicKeys :: [Text] } instance ToJSON NixCache where toJSON a = object $ [ "kind" .= String "NixCache", "storeURI" .= storeURI a, "signingKeys" .= signingKeys a, "publicKeys" .= publicKeys a ] toEncoding a = pairs ( "kind" .= String "NixCache" <> "storeURI" .= storeURI a <> "signingKeys" .= signingKeys a <> "publicKeys" .= publicKeys a ) instance FromJSON NixCache where parseJSON = withKind "NixCache" $ withVersions [ noVersion $ \o -> NixCache <$> o .: "storeURI" <*> o .: "signingKeys" <*> o .: "publicKeys" ]