module Ecluse.Composition.Types (
BootRole (..),
everyBootRole,
bootInvocation,
registryRoleOf,
pipelineRoleOf,
MirrorRole (..),
roleInvocation,
RegistryRole (..),
) where
import Prelude hiding (universe)
import Data.List (partition)
import Data.Universe.Class (Universe (..))
import Data.Universe.Generic (universeGeneric)
data BootRole
=
BootMirrorPipeline MirrorRole
|
BootStorePruner
|
BootStorePreview
|
BootWithoutPipeline
deriving stock (BootRole -> BootRole -> Bool
(BootRole -> BootRole -> Bool)
-> (BootRole -> BootRole -> Bool) -> Eq BootRole
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BootRole -> BootRole -> Bool
== :: BootRole -> BootRole -> Bool
$c/= :: BootRole -> BootRole -> Bool
/= :: BootRole -> BootRole -> Bool
Eq, (forall x. BootRole -> Rep BootRole x)
-> (forall x. Rep BootRole x -> BootRole) -> Generic BootRole
forall x. Rep BootRole x -> BootRole
forall x. BootRole -> Rep BootRole x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. BootRole -> Rep BootRole x
from :: forall x. BootRole -> Rep BootRole x
$cto :: forall x. Rep BootRole x -> BootRole
to :: forall x. Rep BootRole x -> BootRole
Generic, Int -> BootRole -> ShowS
[BootRole] -> ShowS
BootRole -> String
(Int -> BootRole -> ShowS)
-> (BootRole -> String) -> ([BootRole] -> ShowS) -> Show BootRole
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BootRole -> ShowS
showsPrec :: Int -> BootRole -> ShowS
$cshow :: BootRole -> String
show :: BootRole -> String
$cshowList :: [BootRole] -> ShowS
showList :: [BootRole] -> ShowS
Show)
instance Universe BootRole where universe :: [BootRole]
universe = [BootRole]
forall a. (Generic a, GUniverse (Rep a)) => [a]
universeGeneric
everyBootRole :: [BootRole]
everyBootRole :: [BootRole]
everyBootRole = [BootRole]
pipelineRoles [BootRole] -> [BootRole] -> [BootRole]
forall a. Semigroup a => a -> a -> a
<> [BootRole]
rest
where
([BootRole]
pipelineRoles, [BootRole]
rest) = (BootRole -> Bool) -> [BootRole] -> ([BootRole], [BootRole])
forall a. (a -> Bool) -> [a] -> ([a], [a])
partition (Maybe MirrorRole -> Bool
forall a. Maybe a -> Bool
isJust (Maybe MirrorRole -> Bool)
-> (BootRole -> Maybe MirrorRole) -> BootRole -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BootRole -> Maybe MirrorRole
pipelineRoleOf) [BootRole]
forall a. Universe a => [a]
universe
bootInvocation :: BootRole -> Text
bootInvocation :: BootRole -> Text
bootInvocation = \case
BootMirrorPipeline MirrorRole
role -> MirrorRole -> Text
roleInvocation MirrorRole
role
BootRole
BootStorePruner -> Text
"ecluse dredger"
BootRole
BootStorePreview -> Text
"ecluse dredger --dry-run"
BootRole
BootWithoutPipeline -> Text
"ecluse pilot"
registryRoleOf :: BootRole -> RegistryRole
registryRoleOf :: BootRole -> RegistryRole
registryRoleOf = \case
BootMirrorPipeline MirrorRole
_ -> RegistryRole
MirrorWriter
BootRole
BootStorePruner -> RegistryRole
MirrorPruner
BootRole
BootStorePreview -> RegistryRole
MirrorPreviewer
BootRole
BootWithoutPipeline -> RegistryRole
MirrorWriter
pipelineRoleOf :: BootRole -> Maybe MirrorRole
pipelineRoleOf :: BootRole -> Maybe MirrorRole
pipelineRoleOf = \case
BootMirrorPipeline MirrorRole
role -> MirrorRole -> Maybe MirrorRole
forall a. a -> Maybe a
Just MirrorRole
role
BootRole
BootStorePruner -> Maybe MirrorRole
forall a. Maybe a
Nothing
BootRole
BootStorePreview -> Maybe MirrorRole
forall a. Maybe a
Nothing
BootRole
BootWithoutPipeline -> Maybe MirrorRole
forall a. Maybe a
Nothing
data MirrorRole
=
ServeAndMirror
|
ServeOnly
|
MirrorOnly
deriving stock (MirrorRole -> MirrorRole -> Bool
(MirrorRole -> MirrorRole -> Bool)
-> (MirrorRole -> MirrorRole -> Bool) -> Eq MirrorRole
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MirrorRole -> MirrorRole -> Bool
== :: MirrorRole -> MirrorRole -> Bool
$c/= :: MirrorRole -> MirrorRole -> Bool
/= :: MirrorRole -> MirrorRole -> Bool
Eq, (forall x. MirrorRole -> Rep MirrorRole x)
-> (forall x. Rep MirrorRole x -> MirrorRole) -> Generic MirrorRole
forall x. Rep MirrorRole x -> MirrorRole
forall x. MirrorRole -> Rep MirrorRole x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. MirrorRole -> Rep MirrorRole x
from :: forall x. MirrorRole -> Rep MirrorRole x
$cto :: forall x. Rep MirrorRole x -> MirrorRole
to :: forall x. Rep MirrorRole x -> MirrorRole
Generic, Int -> MirrorRole -> ShowS
[MirrorRole] -> ShowS
MirrorRole -> String
(Int -> MirrorRole -> ShowS)
-> (MirrorRole -> String)
-> ([MirrorRole] -> ShowS)
-> Show MirrorRole
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MirrorRole -> ShowS
showsPrec :: Int -> MirrorRole -> ShowS
$cshow :: MirrorRole -> String
show :: MirrorRole -> String
$cshowList :: [MirrorRole] -> ShowS
showList :: [MirrorRole] -> ShowS
Show)
instance Universe MirrorRole where universe :: [MirrorRole]
universe = [MirrorRole]
forall a. (Generic a, GUniverse (Rep a)) => [a]
universeGeneric
roleInvocation :: MirrorRole -> Text
roleInvocation :: MirrorRole -> Text
roleInvocation = \case
MirrorRole
ServeAndMirror -> Text
"ecluse proxy"
MirrorRole
ServeOnly -> Text
"ecluse proxy --no-worker"
MirrorRole
MirrorOnly -> Text
"ecluse mirror"
data RegistryRole
=
MirrorWriter
|
MirrorPruner
|
MirrorPreviewer
deriving stock (RegistryRole -> RegistryRole -> Bool
(RegistryRole -> RegistryRole -> Bool)
-> (RegistryRole -> RegistryRole -> Bool) -> Eq RegistryRole
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RegistryRole -> RegistryRole -> Bool
== :: RegistryRole -> RegistryRole -> Bool
$c/= :: RegistryRole -> RegistryRole -> Bool
/= :: RegistryRole -> RegistryRole -> Bool
Eq, Int -> RegistryRole -> ShowS
[RegistryRole] -> ShowS
RegistryRole -> String
(Int -> RegistryRole -> ShowS)
-> (RegistryRole -> String)
-> ([RegistryRole] -> ShowS)
-> Show RegistryRole
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RegistryRole -> ShowS
showsPrec :: Int -> RegistryRole -> ShowS
$cshow :: RegistryRole -> String
show :: RegistryRole -> String
$cshowList :: [RegistryRole] -> ShowS
showList :: [RegistryRole] -> ShowS
Show)