{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.CanonicalState.Namespace.EntitiesCommittee.V0 (
  EntitiesCommitteeIn (..),
  EntitiesCommitteeOut (..),
  CanonicalCommitteeState (..),
  CanonicalCommitteeAuthorization (..),
  mkCanonicalCommitteeAuthorization,
  fromCanonicalCommitteeAuthorization,
) where

import Cardano.Ledger.BaseTypes (Anchor (..), EpochNo (..), StrictMaybe (..))
import Cardano.Ledger.CanonicalState.BasicTypes ()
import Cardano.Ledger.CanonicalState.Namespace (Era, NamespaceEra)
import Cardano.Ledger.Credential (Credential (..))
import Cardano.Ledger.Keys (KeyRole (ColdCommitteeRole, HotCommitteeRole))
import Cardano.Ledger.State (CommitteeAuthorization (..))
import Cardano.SCLS.CBOR.Canonical.Decoder (FromCanonicalCBOR (..), decodeListLenCanonicalOf)
import Cardano.SCLS.CBOR.Canonical.Encoder (ToCanonicalCBOR (..))
import Cardano.SCLS.Entry.IsKey (IsKey (..))
import Cardano.SCLS.NamespaceCodec (
  CanonicalCBOREntryDecoder (..),
  CanonicalCBOREntryEncoder (..),
  KnownNamespace (..),
  namespaceKeySize,
 )
import Cardano.SCLS.Versioned (Versioned (..))
import qualified Data.Map.Strict as Map
import Data.MemPack.ByteOrdered (packWord64beM, unpackBigEndianM)
import Data.Proxy (Proxy (..))
import Data.Word (Word8)
import GHC.Generics (Generic)

instance (Era era, NamespaceEra "entities/committee/v0" ~ era) => KnownNamespace "entities/committee/v0" where
  type NamespaceKey "entities/committee/v0" = EntitiesCommitteeIn
  type NamespaceEntry "entities/committee/v0" = EntitiesCommitteeOut

instance
  (Era era, NamespaceEra "entities/committee/v0" ~ era) =>
  CanonicalCBOREntryEncoder "entities/committee/v0" EntitiesCommitteeOut
  where
  encodeEntry :: EntitiesCommitteeOut -> CanonicalEncoding
encodeEntry (EntitiesCommitteeOut CanonicalCommitteeState
n) = Proxy "entities/committee/v0"
-> CanonicalCommitteeState -> CanonicalEncoding
forall (v :: Symbol) a (proxy :: Symbol -> *).
ToCanonicalCBOR v a =>
proxy v -> a -> CanonicalEncoding
forall (proxy :: Symbol -> *).
proxy "entities/committee/v0"
-> CanonicalCommitteeState -> CanonicalEncoding
toCanonicalCBOR (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
Proxy @"entities/committee/v0") CanonicalCommitteeState
n

instance
  (Era era, NamespaceEra "entities/committee/v0" ~ era) =>
  CanonicalCBOREntryDecoder "entities/committee/v0" EntitiesCommitteeOut
  where
  decodeEntry :: forall s.
CanonicalDecoder
  s (Versioned "entities/committee/v0" EntitiesCommitteeOut)
decodeEntry = (CanonicalCommitteeState -> EntitiesCommitteeOut)
-> Versioned "entities/committee/v0" CanonicalCommitteeState
-> Versioned "entities/committee/v0" EntitiesCommitteeOut
forall a b.
(a -> b)
-> Versioned "entities/committee/v0" a
-> Versioned "entities/committee/v0" b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CanonicalCommitteeState -> EntitiesCommitteeOut
EntitiesCommitteeOut (Versioned "entities/committee/v0" CanonicalCommitteeState
 -> Versioned "entities/committee/v0" EntitiesCommitteeOut)
-> CanonicalDecoder
     s (Versioned "entities/committee/v0" CanonicalCommitteeState)
-> CanonicalDecoder
     s (Versioned "entities/committee/v0" EntitiesCommitteeOut)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CanonicalDecoder
  s (Versioned "entities/committee/v0" CanonicalCommitteeState)
forall s.
CanonicalDecoder
  s (Versioned "entities/committee/v0" CanonicalCommitteeState)
forall (v :: Symbol) a s.
FromCanonicalCBOR v a =>
CanonicalDecoder s (Versioned v a)
fromCanonicalCBOR

data EntitiesCommitteeIn = EntitiesCommitteeIn EpochNo
  deriving (EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
(EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool)
-> (EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool)
-> Eq EntitiesCommitteeIn
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
== :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
$c/= :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
/= :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
Eq, Eq EntitiesCommitteeIn
Eq EntitiesCommitteeIn =>
(EntitiesCommitteeIn -> EntitiesCommitteeIn -> Ordering)
-> (EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool)
-> (EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool)
-> (EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool)
-> (EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool)
-> (EntitiesCommitteeIn
    -> EntitiesCommitteeIn -> EntitiesCommitteeIn)
-> (EntitiesCommitteeIn
    -> EntitiesCommitteeIn -> EntitiesCommitteeIn)
-> Ord EntitiesCommitteeIn
EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
EntitiesCommitteeIn -> EntitiesCommitteeIn -> Ordering
EntitiesCommitteeIn -> EntitiesCommitteeIn -> EntitiesCommitteeIn
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Ordering
compare :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Ordering
$c< :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
< :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
$c<= :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
<= :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
$c> :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
> :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
$c>= :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
>= :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> Bool
$cmax :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> EntitiesCommitteeIn
max :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> EntitiesCommitteeIn
$cmin :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> EntitiesCommitteeIn
min :: EntitiesCommitteeIn -> EntitiesCommitteeIn -> EntitiesCommitteeIn
Ord, Int -> EntitiesCommitteeIn -> ShowS
[EntitiesCommitteeIn] -> ShowS
EntitiesCommitteeIn -> String
(Int -> EntitiesCommitteeIn -> ShowS)
-> (EntitiesCommitteeIn -> String)
-> ([EntitiesCommitteeIn] -> ShowS)
-> Show EntitiesCommitteeIn
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EntitiesCommitteeIn -> ShowS
showsPrec :: Int -> EntitiesCommitteeIn -> ShowS
$cshow :: EntitiesCommitteeIn -> String
show :: EntitiesCommitteeIn -> String
$cshowList :: [EntitiesCommitteeIn] -> ShowS
showList :: [EntitiesCommitteeIn] -> ShowS
Show)

newtype EntitiesCommitteeOut = EntitiesCommitteeOut CanonicalCommitteeState
  deriving (EntitiesCommitteeOut -> EntitiesCommitteeOut -> Bool
(EntitiesCommitteeOut -> EntitiesCommitteeOut -> Bool)
-> (EntitiesCommitteeOut -> EntitiesCommitteeOut -> Bool)
-> Eq EntitiesCommitteeOut
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EntitiesCommitteeOut -> EntitiesCommitteeOut -> Bool
== :: EntitiesCommitteeOut -> EntitiesCommitteeOut -> Bool
$c/= :: EntitiesCommitteeOut -> EntitiesCommitteeOut -> Bool
/= :: EntitiesCommitteeOut -> EntitiesCommitteeOut -> Bool
Eq, Int -> EntitiesCommitteeOut -> ShowS
[EntitiesCommitteeOut] -> ShowS
EntitiesCommitteeOut -> String
(Int -> EntitiesCommitteeOut -> ShowS)
-> (EntitiesCommitteeOut -> String)
-> ([EntitiesCommitteeOut] -> ShowS)
-> Show EntitiesCommitteeOut
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EntitiesCommitteeOut -> ShowS
showsPrec :: Int -> EntitiesCommitteeOut -> ShowS
$cshow :: EntitiesCommitteeOut -> String
show :: EntitiesCommitteeOut -> String
$cshowList :: [EntitiesCommitteeOut] -> ShowS
showList :: [EntitiesCommitteeOut] -> ShowS
Show, (forall x. EntitiesCommitteeOut -> Rep EntitiesCommitteeOut x)
-> (forall x. Rep EntitiesCommitteeOut x -> EntitiesCommitteeOut)
-> Generic EntitiesCommitteeOut
forall x. Rep EntitiesCommitteeOut x -> EntitiesCommitteeOut
forall x. EntitiesCommitteeOut -> Rep EntitiesCommitteeOut x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. EntitiesCommitteeOut -> Rep EntitiesCommitteeOut x
from :: forall x. EntitiesCommitteeOut -> Rep EntitiesCommitteeOut x
$cto :: forall x. Rep EntitiesCommitteeOut x -> EntitiesCommitteeOut
to :: forall x. Rep EntitiesCommitteeOut x -> EntitiesCommitteeOut
Generic)

instance IsKey EntitiesCommitteeIn where
  keySize :: Int
keySize = forall (ns :: Symbol). KnownNat (NamespaceKeySize ns) => Int
namespaceKeySize @"entities/committee/v0"
  packKeyM :: forall b. EntitiesCommitteeIn -> Pack b ()
packKeyM (EntitiesCommitteeIn (EpochNo Word64
no)) = do
    Word64 -> Pack b ()
forall s. Word64 -> Pack s ()
packWord64beM Word64
no
  unpackKeyM :: forall b s. Buffer b => Unpack' s b EntitiesCommitteeIn
unpackKeyM = do
    no <- Unpack s b Word64
forall a b s. (Bytes a, MemPack a, Buffer b) => Unpack s b a
unpackBigEndianM
    return $ EntitiesCommitteeIn (EpochNo no)

newtype CanonicalCommitteeState = CanonicalCommitteeState
  { CanonicalCommitteeState
-> Map
     (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization
csCommitteeCreds :: Map.Map (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization
  }
  deriving (CanonicalCommitteeState -> CanonicalCommitteeState -> Bool
(CanonicalCommitteeState -> CanonicalCommitteeState -> Bool)
-> (CanonicalCommitteeState -> CanonicalCommitteeState -> Bool)
-> Eq CanonicalCommitteeState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CanonicalCommitteeState -> CanonicalCommitteeState -> Bool
== :: CanonicalCommitteeState -> CanonicalCommitteeState -> Bool
$c/= :: CanonicalCommitteeState -> CanonicalCommitteeState -> Bool
/= :: CanonicalCommitteeState -> CanonicalCommitteeState -> Bool
Eq, Int -> CanonicalCommitteeState -> ShowS
[CanonicalCommitteeState] -> ShowS
CanonicalCommitteeState -> String
(Int -> CanonicalCommitteeState -> ShowS)
-> (CanonicalCommitteeState -> String)
-> ([CanonicalCommitteeState] -> ShowS)
-> Show CanonicalCommitteeState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CanonicalCommitteeState -> ShowS
showsPrec :: Int -> CanonicalCommitteeState -> ShowS
$cshow :: CanonicalCommitteeState -> String
show :: CanonicalCommitteeState -> String
$cshowList :: [CanonicalCommitteeState] -> ShowS
showList :: [CanonicalCommitteeState] -> ShowS
Show, (forall x.
 CanonicalCommitteeState -> Rep CanonicalCommitteeState x)
-> (forall x.
    Rep CanonicalCommitteeState x -> CanonicalCommitteeState)
-> Generic CanonicalCommitteeState
forall x. Rep CanonicalCommitteeState x -> CanonicalCommitteeState
forall x. CanonicalCommitteeState -> Rep CanonicalCommitteeState x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CanonicalCommitteeState -> Rep CanonicalCommitteeState x
from :: forall x. CanonicalCommitteeState -> Rep CanonicalCommitteeState x
$cto :: forall x. Rep CanonicalCommitteeState x -> CanonicalCommitteeState
to :: forall x. Rep CanonicalCommitteeState x -> CanonicalCommitteeState
Generic)

instance (Era era, NamespaceEra v ~ era) => ToCanonicalCBOR v CanonicalCommitteeState where
  toCanonicalCBOR :: forall (proxy :: Symbol -> *).
proxy v -> CanonicalCommitteeState -> CanonicalEncoding
toCanonicalCBOR proxy v
v CanonicalCommitteeState {Map (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization
csCommitteeCreds :: CanonicalCommitteeState
-> Map
     (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization
csCommitteeCreds :: Map (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization
..} = proxy v
-> Map
     (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization
-> CanonicalEncoding
forall (v :: Symbol) a (proxy :: Symbol -> *).
ToCanonicalCBOR v a =>
proxy v -> a -> CanonicalEncoding
forall (proxy :: Symbol -> *).
proxy v
-> Map
     (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization
-> CanonicalEncoding
toCanonicalCBOR proxy v
v Map (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization
csCommitteeCreds

instance (Era era, NamespaceEra v ~ era) => FromCanonicalCBOR v CanonicalCommitteeState where
  fromCanonicalCBOR :: forall s. CanonicalDecoder s (Versioned v CanonicalCommitteeState)
fromCanonicalCBOR = do
    st_ <- CanonicalDecoder
  s
  (Versioned
     v
     (Map
        (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization))
forall s.
CanonicalDecoder
  s
  (Versioned
     v
     (Map
        (Credential ColdCommitteeRole) CanonicalCommitteeAuthorization))
forall (v :: Symbol) a s.
FromCanonicalCBOR v a =>
CanonicalDecoder s (Versioned v a)
fromCanonicalCBOR
    return $ CanonicalCommitteeState <$> st_

instance (Era era, NamespaceEra v ~ era) => ToCanonicalCBOR v CanonicalCommitteeAuthorization where
  toCanonicalCBOR :: forall (proxy :: Symbol -> *).
proxy v -> CanonicalCommitteeAuthorization -> CanonicalEncoding
toCanonicalCBOR proxy v
v (CanonicalCommitteeHotCredential Credential HotCommitteeRole
cred) =
    proxy v
-> (Word8, Credential HotCommitteeRole) -> CanonicalEncoding
forall (v :: Symbol) a (proxy :: Symbol -> *).
ToCanonicalCBOR v a =>
proxy v -> a -> CanonicalEncoding
forall (proxy :: Symbol -> *).
proxy v
-> (Word8, Credential HotCommitteeRole) -> CanonicalEncoding
toCanonicalCBOR proxy v
v (Word8
0 :: Word8, Credential HotCommitteeRole
cred)
  toCanonicalCBOR proxy v
v (CanonicalCommitteeMemberResigned StrictMaybe Anchor
ma) =
    proxy v -> (Word8, StrictMaybe Anchor) -> CanonicalEncoding
forall (v :: Symbol) a (proxy :: Symbol -> *).
ToCanonicalCBOR v a =>
proxy v -> a -> CanonicalEncoding
forall (proxy :: Symbol -> *).
proxy v -> (Word8, StrictMaybe Anchor) -> CanonicalEncoding
toCanonicalCBOR proxy v
v (Word8
1 :: Word8, StrictMaybe Anchor
ma)

instance (Era era, NamespaceEra v ~ era) => FromCanonicalCBOR v CanonicalCommitteeAuthorization where
  fromCanonicalCBOR :: forall s.
CanonicalDecoder s (Versioned v CanonicalCommitteeAuthorization)
fromCanonicalCBOR = do
    Int -> CanonicalDecoder s ()
forall s. Int -> CanonicalDecoder s ()
decodeListLenCanonicalOf Int
2
    Versioned (tag :: Word8) <- CanonicalDecoder s (Versioned (ZonkAny 0) Word8)
forall s. CanonicalDecoder s (Versioned (ZonkAny 0) Word8)
forall (v :: Symbol) a s.
FromCanonicalCBOR v a =>
CanonicalDecoder s (Versioned v a)
fromCanonicalCBOR
    case tag of
      Word8
0 -> (Credential HotCommitteeRole -> CanonicalCommitteeAuthorization)
-> Versioned v (Credential HotCommitteeRole)
-> Versioned v CanonicalCommitteeAuthorization
forall a b. (a -> b) -> Versioned v a -> Versioned v b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Credential HotCommitteeRole -> CanonicalCommitteeAuthorization
CanonicalCommitteeHotCredential (Versioned v (Credential HotCommitteeRole)
 -> Versioned v CanonicalCommitteeAuthorization)
-> CanonicalDecoder s (Versioned v (Credential HotCommitteeRole))
-> CanonicalDecoder s (Versioned v CanonicalCommitteeAuthorization)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (v :: Symbol) a s.
FromCanonicalCBOR v a =>
CanonicalDecoder s (Versioned v a)
fromCanonicalCBOR @v
      Word8
1 -> (StrictMaybe Anchor -> CanonicalCommitteeAuthorization)
-> Versioned v (StrictMaybe Anchor)
-> Versioned v CanonicalCommitteeAuthorization
forall a b. (a -> b) -> Versioned v a -> Versioned v b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap StrictMaybe Anchor -> CanonicalCommitteeAuthorization
CanonicalCommitteeMemberResigned (Versioned v (StrictMaybe Anchor)
 -> Versioned v CanonicalCommitteeAuthorization)
-> CanonicalDecoder s (Versioned v (StrictMaybe Anchor))
-> CanonicalDecoder s (Versioned v CanonicalCommitteeAuthorization)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (v :: Symbol) a s.
FromCanonicalCBOR v a =>
CanonicalDecoder s (Versioned v a)
fromCanonicalCBOR @v
      Word8
_ -> String
-> CanonicalDecoder s (Versioned v CanonicalCommitteeAuthorization)
forall a. String -> CanonicalDecoder s a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Invalid CommitteeAuthorization tag"

data CanonicalCommitteeAuthorization
  = CanonicalCommitteeHotCredential (Credential HotCommitteeRole)
  | CanonicalCommitteeMemberResigned (StrictMaybe Anchor)
  deriving (CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
(CanonicalCommitteeAuthorization
 -> CanonicalCommitteeAuthorization -> Bool)
-> (CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization -> Bool)
-> Eq CanonicalCommitteeAuthorization
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
== :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
$c/= :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
/= :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
Eq, Int -> CanonicalCommitteeAuthorization -> ShowS
[CanonicalCommitteeAuthorization] -> ShowS
CanonicalCommitteeAuthorization -> String
(Int -> CanonicalCommitteeAuthorization -> ShowS)
-> (CanonicalCommitteeAuthorization -> String)
-> ([CanonicalCommitteeAuthorization] -> ShowS)
-> Show CanonicalCommitteeAuthorization
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CanonicalCommitteeAuthorization -> ShowS
showsPrec :: Int -> CanonicalCommitteeAuthorization -> ShowS
$cshow :: CanonicalCommitteeAuthorization -> String
show :: CanonicalCommitteeAuthorization -> String
$cshowList :: [CanonicalCommitteeAuthorization] -> ShowS
showList :: [CanonicalCommitteeAuthorization] -> ShowS
Show, Eq CanonicalCommitteeAuthorization
Eq CanonicalCommitteeAuthorization =>
(CanonicalCommitteeAuthorization
 -> CanonicalCommitteeAuthorization -> Ordering)
-> (CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization -> Bool)
-> (CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization -> Bool)
-> (CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization -> Bool)
-> (CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization -> Bool)
-> (CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization)
-> (CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization
    -> CanonicalCommitteeAuthorization)
-> Ord CanonicalCommitteeAuthorization
CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Ordering
CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Ordering
compare :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Ordering
$c< :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
< :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
$c<= :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
<= :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
$c> :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
> :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
$c>= :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
>= :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization -> Bool
$cmax :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
max :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
$cmin :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
min :: CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
-> CanonicalCommitteeAuthorization
Ord, (forall x.
 CanonicalCommitteeAuthorization
 -> Rep CanonicalCommitteeAuthorization x)
-> (forall x.
    Rep CanonicalCommitteeAuthorization x
    -> CanonicalCommitteeAuthorization)
-> Generic CanonicalCommitteeAuthorization
forall x.
Rep CanonicalCommitteeAuthorization x
-> CanonicalCommitteeAuthorization
forall x.
CanonicalCommitteeAuthorization
-> Rep CanonicalCommitteeAuthorization x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
CanonicalCommitteeAuthorization
-> Rep CanonicalCommitteeAuthorization x
from :: forall x.
CanonicalCommitteeAuthorization
-> Rep CanonicalCommitteeAuthorization x
$cto :: forall x.
Rep CanonicalCommitteeAuthorization x
-> CanonicalCommitteeAuthorization
to :: forall x.
Rep CanonicalCommitteeAuthorization x
-> CanonicalCommitteeAuthorization
Generic)

mkCanonicalCommitteeAuthorization :: CommitteeAuthorization -> CanonicalCommitteeAuthorization
mkCanonicalCommitteeAuthorization :: CommitteeAuthorization -> CanonicalCommitteeAuthorization
mkCanonicalCommitteeAuthorization (CommitteeHotCredential Credential HotCommitteeRole
credential) = Credential HotCommitteeRole -> CanonicalCommitteeAuthorization
CanonicalCommitteeHotCredential Credential HotCommitteeRole
credential
mkCanonicalCommitteeAuthorization (CommitteeMemberResigned StrictMaybe Anchor
anchor) = StrictMaybe Anchor -> CanonicalCommitteeAuthorization
CanonicalCommitteeMemberResigned StrictMaybe Anchor
anchor

fromCanonicalCommitteeAuthorization :: CanonicalCommitteeAuthorization -> CommitteeAuthorization
fromCanonicalCommitteeAuthorization :: CanonicalCommitteeAuthorization -> CommitteeAuthorization
fromCanonicalCommitteeAuthorization (CanonicalCommitteeHotCredential Credential HotCommitteeRole
credential) = Credential HotCommitteeRole -> CommitteeAuthorization
CommitteeHotCredential Credential HotCommitteeRole
credential
fromCanonicalCommitteeAuthorization (CanonicalCommitteeMemberResigned StrictMaybe Anchor
anchor) = StrictMaybe Anchor -> CommitteeAuthorization
CommitteeMemberResigned StrictMaybe Anchor
anchor