module Hercules.Formats.CachixCache where
import Data.Aeson
import Data.Foldable
import Data.Text (Text)
import Hercules.Formats.Common
( noVersion,
withKind,
withVersions,
)
import Prelude
data CachixCache = CachixCache
{ CachixCache -> [Text]
signingKeys :: [Text],
CachixCache -> Maybe Text
authToken :: Maybe Text,
CachixCache -> [Text]
publicKeys :: [Text]
}
instance ToJSON CachixCache where
toJSON :: CachixCache -> Value
toJSON CachixCache
a =
[Pair] -> Value
object forall a b. (a -> b) -> a -> b
$
[Key
"kind" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
String Text
"CachixCache", Key
"signingKeys" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= CachixCache -> [Text]
signingKeys CachixCache
a]
forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (forall (f :: * -> *) a. Applicative f => a -> f a
pure forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Key
"authToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.=)) (forall (t :: * -> *) a. Foldable t => t a -> [a]
toList forall a b. (a -> b) -> a -> b
$ CachixCache -> Maybe Text
authToken CachixCache
a)
forall a. Semigroup a => a -> a -> a
<> [Key
"publicKeys" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= CachixCache -> [Text]
publicKeys CachixCache
a]
toEncoding :: CachixCache -> Encoding
toEncoding CachixCache
a =
Series -> Encoding
pairs
( Key
"kind"
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Text -> Value
String Text
"CachixCache"
forall a. Semigroup a => a -> a -> a
<> Key
"signingKeys"
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= CachixCache -> [Text]
signingKeys CachixCache
a
forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Key
"authToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.=) (CachixCache -> Maybe Text
authToken CachixCache
a)
forall a. Semigroup a => a -> a -> a
<> Key
"publicKeys"
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= CachixCache -> [Text]
publicKeys CachixCache
a
)
instance FromJSON CachixCache where
parseJSON :: Value -> Parser CachixCache
parseJSON =
forall a. Text -> (Object -> Parser a) -> Value -> Parser a
withKind Text
"CachixCache" 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] -> Maybe Text -> [Text] -> CachixCache
CachixCache
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall (t :: * -> *) m. (Foldable t, Monoid m) => t m -> m
fold forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o forall a. FromJSON a => Object -> Key -> Parser (Maybe 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 (Maybe a)
.:? Key
"authToken"
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"
]