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
  { NixCache -> Text
storeURI :: Text,
    NixCache -> [Text]
signingKeys :: [Text],
    NixCache -> [Text]
publicKeys :: [Text]
  }

instance ToJSON NixCache where
  toJSON :: NixCache -> Value
toJSON NixCache
a =
    [Pair] -> Value
object
      [ Key
"kind" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
String Text
"NixCache",
        Key
"storeURI" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= NixCache -> Text
storeURI NixCache
a,
        Key
"signingKeys" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= NixCache -> [Text]
signingKeys NixCache
a,
        Key
"publicKeys" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= NixCache -> [Text]
publicKeys NixCache
a
      ]

  toEncoding :: NixCache -> Encoding
toEncoding NixCache
a =
    Series -> Encoding
pairs
      ( Key
"kind"
          forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
String Text
"NixCache"
          forall a. Semigroup a => a -> a -> a
<> Key
"storeURI"
          forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= NixCache -> Text
storeURI NixCache
a
          forall a. Semigroup a => a -> a -> a
<> Key
"signingKeys"
          forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= NixCache -> [Text]
signingKeys NixCache
a
          forall a. Semigroup a => a -> a -> a
<> Key
"publicKeys"
          forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= NixCache -> [Text]
publicKeys NixCache
a
      )

instance FromJSON NixCache where
  parseJSON :: Value -> Parser NixCache
parseJSON =
    forall a. Text -> (Object -> Parser a) -> Value -> Parser a
withKind Text
"NixCache" forall a b. (a -> b) -> a -> b
$
      forall a. [VersionParser a] -> Object -> Parser a
withVersions
        [ forall a. (Object -> Parser a) -> VersionParser a
noVersion forall a b. (a -> b) -> a -> b
$ \Object
o ->
            Text -> [Text] -> [Text] -> NixCache
NixCache
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"storeURI"
              forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"signingKeys"
              forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"publicKeys"
        ]