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
{ signingKeys :: [Text],
authToken :: Maybe Text,
publicKeys :: [Text]
}
instance ToJSON CachixCache where
toJSON a =
object $
["kind" .= String "CachixCache", "signingKeys" .= signingKeys a]
<> foldMap (pure . ("authToken" .=)) (toList $ authToken a)
<> ["publicKeys" .= publicKeys a]
toEncoding a =
pairs
( "kind"
.= String "CachixCache"
<> "signingKeys"
.= signingKeys a
<> foldMap ("authToken" .=) (authToken a)
<> "publicKeys"
.= publicKeys a
)
instance FromJSON CachixCache where
parseJSON =
withKind "CachixCache" $
withVersions
[ noVersion $ \o ->
CachixCache
<$> o
.: "signingKeys"
<*> o
.:? "authToken"
<*> o
.: "publicKeys"
]