module Test.Marionette.Registry where

import Data.Aeson.Types
import Data.Maybe (maybeToList)
import Data.Text (Text)
import GHC.Generics (Generic)
import Prelude

-------------------------------------------------------------------

data RegistryEntry = RegistryEntry
    { RegistryEntry -> Text
entryType :: Text
    , RegistryEntry -> Text
namespace :: Text
    , RegistryEntry -> Text
directory :: Text
    , RegistryEntry -> Maybe Text
options :: Maybe Text
    }
    deriving stock ((forall x. RegistryEntry -> Rep RegistryEntry x)
-> (forall x. Rep RegistryEntry x -> RegistryEntry)
-> Generic RegistryEntry
forall x. Rep RegistryEntry x -> RegistryEntry
forall x. RegistryEntry -> Rep RegistryEntry x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. RegistryEntry -> Rep RegistryEntry x
from :: forall x. RegistryEntry -> Rep RegistryEntry x
$cto :: forall x. Rep RegistryEntry x -> RegistryEntry
to :: forall x. Rep RegistryEntry x -> RegistryEntry
Generic, Int -> RegistryEntry -> ShowS
[RegistryEntry] -> ShowS
RegistryEntry -> String
(Int -> RegistryEntry -> ShowS)
-> (RegistryEntry -> String)
-> ([RegistryEntry] -> ShowS)
-> Show RegistryEntry
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RegistryEntry -> ShowS
showsPrec :: Int -> RegistryEntry -> ShowS
$cshow :: RegistryEntry -> String
show :: RegistryEntry -> String
$cshowList :: [RegistryEntry] -> ShowS
showList :: [RegistryEntry] -> ShowS
Show, RegistryEntry -> RegistryEntry -> Bool
(RegistryEntry -> RegistryEntry -> Bool)
-> (RegistryEntry -> RegistryEntry -> Bool) -> Eq RegistryEntry
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RegistryEntry -> RegistryEntry -> Bool
== :: RegistryEntry -> RegistryEntry -> Bool
$c/= :: RegistryEntry -> RegistryEntry -> Bool
/= :: RegistryEntry -> RegistryEntry -> Bool
Eq)

instance ToJSON RegistryEntry where
    toJSON :: RegistryEntry -> Value
toJSON RegistryEntry{Maybe Text
Text
entryType :: RegistryEntry -> Text
namespace :: RegistryEntry -> Text
directory :: RegistryEntry -> Text
options :: RegistryEntry -> Maybe Text
entryType :: Text
namespace :: Text
directory :: Text
options :: Maybe Text
..} = [Text] -> Value
forall a. ToJSON a => a -> Value
toJSON ([Text] -> Value) -> [Text] -> Value
forall a b. (a -> b) -> a -> b
$ [Text
entryType, Text
namespace, Text
directory] [Text] -> [Text] -> [Text]
forall a. Semigroup a => a -> a -> a
<> Maybe Text -> [Text]
forall a. Maybe a -> [a]
maybeToList Maybe Text
options