{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}

module Cardano.Ledger.Api.State.Query.CommitteeMembersState (
  CommitteeMemberState (..),
  CommitteeMembersState (..),
  HotCredAuthStatus (..),
  MemberStatus (..),
  NextEpochChange (..),
) where

import Cardano.Ledger.BaseTypes (Anchor, UnitInterval)
import Cardano.Ledger.Binary (
  DecCBOR (decCBOR),
  EncCBOR (encCBOR),
  decodeEnumBounded,
  encodeEnum,
 )
import Cardano.Ledger.Binary.Coders (Decode (..), Encode (..), decode, encode, (!>), (<!))
import Cardano.Ledger.Credential (Credential (..))
import Cardano.Ledger.Keys (
  KeyRole (..),
 )
import Cardano.Ledger.Slot (
  EpochNo (..),
 )
import Data.Aeson (KeyValue, ToJSON (..), object, pairs, (.=))
import Data.Map.Strict (Map)
import GHC.Generics (Generic)

data MemberStatus
  = -- Votes of this member will count during ratification
    Active
  | Expired
  | -- | This can happen when a hot credential for an unknown cold credential exists.
    -- Such Committee member will be either removed from the state at the next
    -- epoch boundary or enacted as a new member.
    Unrecognized
  deriving (Int -> MemberStatus -> ShowS
[MemberStatus] -> ShowS
MemberStatus -> String
(Int -> MemberStatus -> ShowS)
-> (MemberStatus -> String)
-> ([MemberStatus] -> ShowS)
-> Show MemberStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MemberStatus -> ShowS
showsPrec :: Int -> MemberStatus -> ShowS
$cshow :: MemberStatus -> String
show :: MemberStatus -> String
$cshowList :: [MemberStatus] -> ShowS
showList :: [MemberStatus] -> ShowS
Show, MemberStatus -> MemberStatus -> Bool
(MemberStatus -> MemberStatus -> Bool)
-> (MemberStatus -> MemberStatus -> Bool) -> Eq MemberStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MemberStatus -> MemberStatus -> Bool
== :: MemberStatus -> MemberStatus -> Bool
$c/= :: MemberStatus -> MemberStatus -> Bool
/= :: MemberStatus -> MemberStatus -> Bool
Eq, Int -> MemberStatus
MemberStatus -> Int
MemberStatus -> [MemberStatus]
MemberStatus -> MemberStatus
MemberStatus -> MemberStatus -> [MemberStatus]
MemberStatus -> MemberStatus -> MemberStatus -> [MemberStatus]
(MemberStatus -> MemberStatus)
-> (MemberStatus -> MemberStatus)
-> (Int -> MemberStatus)
-> (MemberStatus -> Int)
-> (MemberStatus -> [MemberStatus])
-> (MemberStatus -> MemberStatus -> [MemberStatus])
-> (MemberStatus -> MemberStatus -> [MemberStatus])
-> (MemberStatus -> MemberStatus -> MemberStatus -> [MemberStatus])
-> Enum MemberStatus
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: MemberStatus -> MemberStatus
succ :: MemberStatus -> MemberStatus
$cpred :: MemberStatus -> MemberStatus
pred :: MemberStatus -> MemberStatus
$ctoEnum :: Int -> MemberStatus
toEnum :: Int -> MemberStatus
$cfromEnum :: MemberStatus -> Int
fromEnum :: MemberStatus -> Int
$cenumFrom :: MemberStatus -> [MemberStatus]
enumFrom :: MemberStatus -> [MemberStatus]
$cenumFromThen :: MemberStatus -> MemberStatus -> [MemberStatus]
enumFromThen :: MemberStatus -> MemberStatus -> [MemberStatus]
$cenumFromTo :: MemberStatus -> MemberStatus -> [MemberStatus]
enumFromTo :: MemberStatus -> MemberStatus -> [MemberStatus]
$cenumFromThenTo :: MemberStatus -> MemberStatus -> MemberStatus -> [MemberStatus]
enumFromThenTo :: MemberStatus -> MemberStatus -> MemberStatus -> [MemberStatus]
Enum, MemberStatus
MemberStatus -> MemberStatus -> Bounded MemberStatus
forall a. a -> a -> Bounded a
$cminBound :: MemberStatus
minBound :: MemberStatus
$cmaxBound :: MemberStatus
maxBound :: MemberStatus
Bounded, (forall x. MemberStatus -> Rep MemberStatus x)
-> (forall x. Rep MemberStatus x -> MemberStatus)
-> Generic MemberStatus
forall x. Rep MemberStatus x -> MemberStatus
forall x. MemberStatus -> Rep MemberStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. MemberStatus -> Rep MemberStatus x
from :: forall x. MemberStatus -> Rep MemberStatus x
$cto :: forall x. Rep MemberStatus x -> MemberStatus
to :: forall x. Rep MemberStatus x -> MemberStatus
Generic, Eq MemberStatus
Eq MemberStatus =>
(MemberStatus -> MemberStatus -> Ordering)
-> (MemberStatus -> MemberStatus -> Bool)
-> (MemberStatus -> MemberStatus -> Bool)
-> (MemberStatus -> MemberStatus -> Bool)
-> (MemberStatus -> MemberStatus -> Bool)
-> (MemberStatus -> MemberStatus -> MemberStatus)
-> (MemberStatus -> MemberStatus -> MemberStatus)
-> Ord MemberStatus
MemberStatus -> MemberStatus -> Bool
MemberStatus -> MemberStatus -> Ordering
MemberStatus -> MemberStatus -> MemberStatus
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 :: MemberStatus -> MemberStatus -> Ordering
compare :: MemberStatus -> MemberStatus -> Ordering
$c< :: MemberStatus -> MemberStatus -> Bool
< :: MemberStatus -> MemberStatus -> Bool
$c<= :: MemberStatus -> MemberStatus -> Bool
<= :: MemberStatus -> MemberStatus -> Bool
$c> :: MemberStatus -> MemberStatus -> Bool
> :: MemberStatus -> MemberStatus -> Bool
$c>= :: MemberStatus -> MemberStatus -> Bool
>= :: MemberStatus -> MemberStatus -> Bool
$cmax :: MemberStatus -> MemberStatus -> MemberStatus
max :: MemberStatus -> MemberStatus -> MemberStatus
$cmin :: MemberStatus -> MemberStatus -> MemberStatus
min :: MemberStatus -> MemberStatus -> MemberStatus
Ord, [MemberStatus] -> Value
[MemberStatus] -> Encoding
MemberStatus -> Bool
MemberStatus -> Value
MemberStatus -> Encoding
(MemberStatus -> Value)
-> (MemberStatus -> Encoding)
-> ([MemberStatus] -> Value)
-> ([MemberStatus] -> Encoding)
-> (MemberStatus -> Bool)
-> ToJSON MemberStatus
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: MemberStatus -> Value
toJSON :: MemberStatus -> Value
$ctoEncoding :: MemberStatus -> Encoding
toEncoding :: MemberStatus -> Encoding
$ctoJSONList :: [MemberStatus] -> Value
toJSONList :: [MemberStatus] -> Value
$ctoEncodingList :: [MemberStatus] -> Encoding
toEncodingList :: [MemberStatus] -> Encoding
$comitField :: MemberStatus -> Bool
omitField :: MemberStatus -> Bool
ToJSON)

instance EncCBOR MemberStatus where
  encCBOR :: MemberStatus -> Encoding
encCBOR = MemberStatus -> Encoding
forall a. Enum a => a -> Encoding
encodeEnum

instance DecCBOR MemberStatus where
  decCBOR :: forall s. Decoder s MemberStatus
decCBOR = Decoder s MemberStatus
forall a s. (Enum a, Bounded a, Typeable a) => Decoder s a
decodeEnumBounded

data HotCredAuthStatus
  = MemberAuthorized (Credential 'HotCommitteeRole)
  | -- | Member enacted, but no hot credential for voting has been registered
    MemberNotAuthorized
  | MemberResigned (Maybe Anchor)
  deriving (Int -> HotCredAuthStatus -> ShowS
[HotCredAuthStatus] -> ShowS
HotCredAuthStatus -> String
(Int -> HotCredAuthStatus -> ShowS)
-> (HotCredAuthStatus -> String)
-> ([HotCredAuthStatus] -> ShowS)
-> Show HotCredAuthStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> HotCredAuthStatus -> ShowS
showsPrec :: Int -> HotCredAuthStatus -> ShowS
$cshow :: HotCredAuthStatus -> String
show :: HotCredAuthStatus -> String
$cshowList :: [HotCredAuthStatus] -> ShowS
showList :: [HotCredAuthStatus] -> ShowS
Show, HotCredAuthStatus -> HotCredAuthStatus -> Bool
(HotCredAuthStatus -> HotCredAuthStatus -> Bool)
-> (HotCredAuthStatus -> HotCredAuthStatus -> Bool)
-> Eq HotCredAuthStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
== :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
$c/= :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
/= :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
Eq, (forall x. HotCredAuthStatus -> Rep HotCredAuthStatus x)
-> (forall x. Rep HotCredAuthStatus x -> HotCredAuthStatus)
-> Generic HotCredAuthStatus
forall x. Rep HotCredAuthStatus x -> HotCredAuthStatus
forall x. HotCredAuthStatus -> Rep HotCredAuthStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. HotCredAuthStatus -> Rep HotCredAuthStatus x
from :: forall x. HotCredAuthStatus -> Rep HotCredAuthStatus x
$cto :: forall x. Rep HotCredAuthStatus x -> HotCredAuthStatus
to :: forall x. Rep HotCredAuthStatus x -> HotCredAuthStatus
Generic, Eq HotCredAuthStatus
Eq HotCredAuthStatus =>
(HotCredAuthStatus -> HotCredAuthStatus -> Ordering)
-> (HotCredAuthStatus -> HotCredAuthStatus -> Bool)
-> (HotCredAuthStatus -> HotCredAuthStatus -> Bool)
-> (HotCredAuthStatus -> HotCredAuthStatus -> Bool)
-> (HotCredAuthStatus -> HotCredAuthStatus -> Bool)
-> (HotCredAuthStatus -> HotCredAuthStatus -> HotCredAuthStatus)
-> (HotCredAuthStatus -> HotCredAuthStatus -> HotCredAuthStatus)
-> Ord HotCredAuthStatus
HotCredAuthStatus -> HotCredAuthStatus -> Bool
HotCredAuthStatus -> HotCredAuthStatus -> Ordering
HotCredAuthStatus -> HotCredAuthStatus -> HotCredAuthStatus
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 :: HotCredAuthStatus -> HotCredAuthStatus -> Ordering
compare :: HotCredAuthStatus -> HotCredAuthStatus -> Ordering
$c< :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
< :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
$c<= :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
<= :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
$c> :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
> :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
$c>= :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
>= :: HotCredAuthStatus -> HotCredAuthStatus -> Bool
$cmax :: HotCredAuthStatus -> HotCredAuthStatus -> HotCredAuthStatus
max :: HotCredAuthStatus -> HotCredAuthStatus -> HotCredAuthStatus
$cmin :: HotCredAuthStatus -> HotCredAuthStatus -> HotCredAuthStatus
min :: HotCredAuthStatus -> HotCredAuthStatus -> HotCredAuthStatus
Ord, [HotCredAuthStatus] -> Value
[HotCredAuthStatus] -> Encoding
HotCredAuthStatus -> Bool
HotCredAuthStatus -> Value
HotCredAuthStatus -> Encoding
(HotCredAuthStatus -> Value)
-> (HotCredAuthStatus -> Encoding)
-> ([HotCredAuthStatus] -> Value)
-> ([HotCredAuthStatus] -> Encoding)
-> (HotCredAuthStatus -> Bool)
-> ToJSON HotCredAuthStatus
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: HotCredAuthStatus -> Value
toJSON :: HotCredAuthStatus -> Value
$ctoEncoding :: HotCredAuthStatus -> Encoding
toEncoding :: HotCredAuthStatus -> Encoding
$ctoJSONList :: [HotCredAuthStatus] -> Value
toJSONList :: [HotCredAuthStatus] -> Value
$ctoEncodingList :: [HotCredAuthStatus] -> Encoding
toEncodingList :: [HotCredAuthStatus] -> Encoding
$comitField :: HotCredAuthStatus -> Bool
omitField :: HotCredAuthStatus -> Bool
ToJSON)

instance EncCBOR HotCredAuthStatus where
  encCBOR :: HotCredAuthStatus -> Encoding
encCBOR =
    Encode 'Open HotCredAuthStatus -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode 'Open HotCredAuthStatus -> Encoding)
-> (HotCredAuthStatus -> Encode 'Open HotCredAuthStatus)
-> HotCredAuthStatus
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      MemberAuthorized Credential 'HotCommitteeRole
cred -> (Credential 'HotCommitteeRole -> HotCredAuthStatus)
-> Word
-> Encode 'Open (Credential 'HotCommitteeRole -> HotCredAuthStatus)
forall t. t -> Word -> Encode 'Open t
Sum Credential 'HotCommitteeRole -> HotCredAuthStatus
MemberAuthorized Word
0 Encode 'Open (Credential 'HotCommitteeRole -> HotCredAuthStatus)
-> Encode ('Closed 'Dense) (Credential 'HotCommitteeRole)
-> Encode 'Open HotCredAuthStatus
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Credential 'HotCommitteeRole
-> Encode ('Closed 'Dense) (Credential 'HotCommitteeRole)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Credential 'HotCommitteeRole
cred
      HotCredAuthStatus
MemberNotAuthorized -> HotCredAuthStatus -> Word -> Encode 'Open HotCredAuthStatus
forall t. t -> Word -> Encode 'Open t
Sum HotCredAuthStatus
MemberNotAuthorized Word
1
      MemberResigned Maybe Anchor
anchor -> (Maybe Anchor -> HotCredAuthStatus)
-> Word -> Encode 'Open (Maybe Anchor -> HotCredAuthStatus)
forall t. t -> Word -> Encode 'Open t
Sum Maybe Anchor -> HotCredAuthStatus
MemberResigned Word
2 Encode 'Open (Maybe Anchor -> HotCredAuthStatus)
-> Encode ('Closed 'Dense) (Maybe Anchor)
-> Encode 'Open HotCredAuthStatus
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Maybe Anchor -> Encode ('Closed 'Dense) (Maybe Anchor)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Maybe Anchor
anchor

instance DecCBOR HotCredAuthStatus where
  decCBOR :: forall s. Decoder s HotCredAuthStatus
decCBOR =
    Decode ('Closed 'Dense) HotCredAuthStatus
-> Decoder s HotCredAuthStatus
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode ('Closed 'Dense) HotCredAuthStatus
 -> Decoder s HotCredAuthStatus)
-> Decode ('Closed 'Dense) HotCredAuthStatus
-> Decoder s HotCredAuthStatus
forall a b. (a -> b) -> a -> b
$ Text
-> (Word -> Decode 'Open HotCredAuthStatus)
-> Decode ('Closed 'Dense) HotCredAuthStatus
forall t.
Text -> (Word -> Decode 'Open t) -> Decode ('Closed 'Dense) t
Summands Text
"HotCredAuthStatus" ((Word -> Decode 'Open HotCredAuthStatus)
 -> Decode ('Closed 'Dense) HotCredAuthStatus)
-> (Word -> Decode 'Open HotCredAuthStatus)
-> Decode ('Closed 'Dense) HotCredAuthStatus
forall a b. (a -> b) -> a -> b
$ \case
      Word
0 -> (Credential 'HotCommitteeRole -> HotCredAuthStatus)
-> Decode 'Open (Credential 'HotCommitteeRole -> HotCredAuthStatus)
forall t. t -> Decode 'Open t
SumD Credential 'HotCommitteeRole -> HotCredAuthStatus
MemberAuthorized Decode 'Open (Credential 'HotCommitteeRole -> HotCredAuthStatus)
-> Decode ('Closed Any) (Credential 'HotCommitteeRole)
-> Decode 'Open HotCredAuthStatus
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (Credential 'HotCommitteeRole)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
      Word
1 -> HotCredAuthStatus -> Decode 'Open HotCredAuthStatus
forall t. t -> Decode 'Open t
SumD HotCredAuthStatus
MemberNotAuthorized
      Word
2 -> (Maybe Anchor -> HotCredAuthStatus)
-> Decode 'Open (Maybe Anchor -> HotCredAuthStatus)
forall t. t -> Decode 'Open t
SumD Maybe Anchor -> HotCredAuthStatus
MemberResigned Decode 'Open (Maybe Anchor -> HotCredAuthStatus)
-> Decode ('Closed Any) (Maybe Anchor)
-> Decode 'Open HotCredAuthStatus
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (Maybe Anchor)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
      Word
k -> Word -> Decode 'Open HotCredAuthStatus
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
k

data NextEpochChange
  = --- | Member not enacted yet, but will be at the next epoch
    ToBeEnacted
  | -- | Member will be removed
    ToBeRemoved
  | NoChangeExpected
  | ToBeExpired
  | TermAdjusted EpochNo
  deriving (Int -> NextEpochChange -> ShowS
[NextEpochChange] -> ShowS
NextEpochChange -> String
(Int -> NextEpochChange -> ShowS)
-> (NextEpochChange -> String)
-> ([NextEpochChange] -> ShowS)
-> Show NextEpochChange
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NextEpochChange -> ShowS
showsPrec :: Int -> NextEpochChange -> ShowS
$cshow :: NextEpochChange -> String
show :: NextEpochChange -> String
$cshowList :: [NextEpochChange] -> ShowS
showList :: [NextEpochChange] -> ShowS
Show, NextEpochChange -> NextEpochChange -> Bool
(NextEpochChange -> NextEpochChange -> Bool)
-> (NextEpochChange -> NextEpochChange -> Bool)
-> Eq NextEpochChange
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NextEpochChange -> NextEpochChange -> Bool
== :: NextEpochChange -> NextEpochChange -> Bool
$c/= :: NextEpochChange -> NextEpochChange -> Bool
/= :: NextEpochChange -> NextEpochChange -> Bool
Eq, (forall x. NextEpochChange -> Rep NextEpochChange x)
-> (forall x. Rep NextEpochChange x -> NextEpochChange)
-> Generic NextEpochChange
forall x. Rep NextEpochChange x -> NextEpochChange
forall x. NextEpochChange -> Rep NextEpochChange x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. NextEpochChange -> Rep NextEpochChange x
from :: forall x. NextEpochChange -> Rep NextEpochChange x
$cto :: forall x. Rep NextEpochChange x -> NextEpochChange
to :: forall x. Rep NextEpochChange x -> NextEpochChange
Generic, Eq NextEpochChange
Eq NextEpochChange =>
(NextEpochChange -> NextEpochChange -> Ordering)
-> (NextEpochChange -> NextEpochChange -> Bool)
-> (NextEpochChange -> NextEpochChange -> Bool)
-> (NextEpochChange -> NextEpochChange -> Bool)
-> (NextEpochChange -> NextEpochChange -> Bool)
-> (NextEpochChange -> NextEpochChange -> NextEpochChange)
-> (NextEpochChange -> NextEpochChange -> NextEpochChange)
-> Ord NextEpochChange
NextEpochChange -> NextEpochChange -> Bool
NextEpochChange -> NextEpochChange -> Ordering
NextEpochChange -> NextEpochChange -> NextEpochChange
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 :: NextEpochChange -> NextEpochChange -> Ordering
compare :: NextEpochChange -> NextEpochChange -> Ordering
$c< :: NextEpochChange -> NextEpochChange -> Bool
< :: NextEpochChange -> NextEpochChange -> Bool
$c<= :: NextEpochChange -> NextEpochChange -> Bool
<= :: NextEpochChange -> NextEpochChange -> Bool
$c> :: NextEpochChange -> NextEpochChange -> Bool
> :: NextEpochChange -> NextEpochChange -> Bool
$c>= :: NextEpochChange -> NextEpochChange -> Bool
>= :: NextEpochChange -> NextEpochChange -> Bool
$cmax :: NextEpochChange -> NextEpochChange -> NextEpochChange
max :: NextEpochChange -> NextEpochChange -> NextEpochChange
$cmin :: NextEpochChange -> NextEpochChange -> NextEpochChange
min :: NextEpochChange -> NextEpochChange -> NextEpochChange
Ord, [NextEpochChange] -> Value
[NextEpochChange] -> Encoding
NextEpochChange -> Bool
NextEpochChange -> Value
NextEpochChange -> Encoding
(NextEpochChange -> Value)
-> (NextEpochChange -> Encoding)
-> ([NextEpochChange] -> Value)
-> ([NextEpochChange] -> Encoding)
-> (NextEpochChange -> Bool)
-> ToJSON NextEpochChange
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: NextEpochChange -> Value
toJSON :: NextEpochChange -> Value
$ctoEncoding :: NextEpochChange -> Encoding
toEncoding :: NextEpochChange -> Encoding
$ctoJSONList :: [NextEpochChange] -> Value
toJSONList :: [NextEpochChange] -> Value
$ctoEncodingList :: [NextEpochChange] -> Encoding
toEncodingList :: [NextEpochChange] -> Encoding
$comitField :: NextEpochChange -> Bool
omitField :: NextEpochChange -> Bool
ToJSON)

instance EncCBOR NextEpochChange where
  encCBOR :: NextEpochChange -> Encoding
encCBOR =
    Encode 'Open NextEpochChange -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode 'Open NextEpochChange -> Encoding)
-> (NextEpochChange -> Encode 'Open NextEpochChange)
-> NextEpochChange
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
      NextEpochChange
ToBeEnacted -> NextEpochChange -> Word -> Encode 'Open NextEpochChange
forall t. t -> Word -> Encode 'Open t
Sum NextEpochChange
ToBeEnacted Word
0
      NextEpochChange
ToBeRemoved -> NextEpochChange -> Word -> Encode 'Open NextEpochChange
forall t. t -> Word -> Encode 'Open t
Sum NextEpochChange
ToBeRemoved Word
1
      NextEpochChange
NoChangeExpected -> NextEpochChange -> Word -> Encode 'Open NextEpochChange
forall t. t -> Word -> Encode 'Open t
Sum NextEpochChange
NoChangeExpected Word
2
      NextEpochChange
ToBeExpired -> NextEpochChange -> Word -> Encode 'Open NextEpochChange
forall t. t -> Word -> Encode 'Open t
Sum NextEpochChange
ToBeExpired Word
3
      TermAdjusted EpochNo
e -> (EpochNo -> NextEpochChange)
-> Word -> Encode 'Open (EpochNo -> NextEpochChange)
forall t. t -> Word -> Encode 'Open t
Sum EpochNo -> NextEpochChange
TermAdjusted Word
4 Encode 'Open (EpochNo -> NextEpochChange)
-> Encode ('Closed 'Dense) EpochNo -> Encode 'Open NextEpochChange
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> EpochNo -> Encode ('Closed 'Dense) EpochNo
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To EpochNo
e

instance DecCBOR NextEpochChange where
  decCBOR :: forall s. Decoder s NextEpochChange
decCBOR =
    Decode ('Closed 'Dense) NextEpochChange
-> Decoder s NextEpochChange
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode ('Closed 'Dense) NextEpochChange
 -> Decoder s NextEpochChange)
-> Decode ('Closed 'Dense) NextEpochChange
-> Decoder s NextEpochChange
forall a b. (a -> b) -> a -> b
$ Text
-> (Word -> Decode 'Open NextEpochChange)
-> Decode ('Closed 'Dense) NextEpochChange
forall t.
Text -> (Word -> Decode 'Open t) -> Decode ('Closed 'Dense) t
Summands Text
"NextEpochChange" ((Word -> Decode 'Open NextEpochChange)
 -> Decode ('Closed 'Dense) NextEpochChange)
-> (Word -> Decode 'Open NextEpochChange)
-> Decode ('Closed 'Dense) NextEpochChange
forall a b. (a -> b) -> a -> b
$ \case
      Word
0 -> NextEpochChange -> Decode 'Open NextEpochChange
forall t. t -> Decode 'Open t
SumD NextEpochChange
ToBeEnacted
      Word
1 -> NextEpochChange -> Decode 'Open NextEpochChange
forall t. t -> Decode 'Open t
SumD NextEpochChange
ToBeRemoved
      Word
2 -> NextEpochChange -> Decode 'Open NextEpochChange
forall t. t -> Decode 'Open t
SumD NextEpochChange
NoChangeExpected
      Word
3 -> NextEpochChange -> Decode 'Open NextEpochChange
forall t. t -> Decode 'Open t
SumD NextEpochChange
ToBeExpired
      Word
4 -> (EpochNo -> NextEpochChange)
-> Decode 'Open (EpochNo -> NextEpochChange)
forall t. t -> Decode 'Open t
SumD EpochNo -> NextEpochChange
TermAdjusted Decode 'Open (EpochNo -> NextEpochChange)
-> Decode ('Closed Any) EpochNo -> Decode 'Open NextEpochChange
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) EpochNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
      Word
k -> Word -> Decode 'Open NextEpochChange
forall (w :: Wrapped) t. Word -> Decode w t
Invalid Word
k

data CommitteeMemberState = CommitteeMemberState
  { CommitteeMemberState -> HotCredAuthStatus
cmsHotCredAuthStatus :: !HotCredAuthStatus
  , CommitteeMemberState -> MemberStatus
cmsStatus :: !MemberStatus
  , CommitteeMemberState -> Maybe EpochNo
cmsExpiration :: !(Maybe EpochNo)
  -- ^ Absolute epoch number when the member expires
  , CommitteeMemberState -> NextEpochChange
cmsNextEpochChange :: !NextEpochChange
  -- ^ Changes to the member at the next epoch
  }
  deriving (Int -> CommitteeMemberState -> ShowS
[CommitteeMemberState] -> ShowS
CommitteeMemberState -> String
(Int -> CommitteeMemberState -> ShowS)
-> (CommitteeMemberState -> String)
-> ([CommitteeMemberState] -> ShowS)
-> Show CommitteeMemberState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CommitteeMemberState -> ShowS
showsPrec :: Int -> CommitteeMemberState -> ShowS
$cshow :: CommitteeMemberState -> String
show :: CommitteeMemberState -> String
$cshowList :: [CommitteeMemberState] -> ShowS
showList :: [CommitteeMemberState] -> ShowS
Show, CommitteeMemberState -> CommitteeMemberState -> Bool
(CommitteeMemberState -> CommitteeMemberState -> Bool)
-> (CommitteeMemberState -> CommitteeMemberState -> Bool)
-> Eq CommitteeMemberState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CommitteeMemberState -> CommitteeMemberState -> Bool
== :: CommitteeMemberState -> CommitteeMemberState -> Bool
$c/= :: CommitteeMemberState -> CommitteeMemberState -> Bool
/= :: CommitteeMemberState -> CommitteeMemberState -> Bool
Eq, (forall x. CommitteeMemberState -> Rep CommitteeMemberState x)
-> (forall x. Rep CommitteeMemberState x -> CommitteeMemberState)
-> Generic CommitteeMemberState
forall x. Rep CommitteeMemberState x -> CommitteeMemberState
forall x. CommitteeMemberState -> Rep CommitteeMemberState x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CommitteeMemberState -> Rep CommitteeMemberState x
from :: forall x. CommitteeMemberState -> Rep CommitteeMemberState x
$cto :: forall x. Rep CommitteeMemberState x -> CommitteeMemberState
to :: forall x. Rep CommitteeMemberState x -> CommitteeMemberState
Generic)

deriving instance Ord CommitteeMemberState

instance EncCBOR CommitteeMemberState where
  encCBOR :: CommitteeMemberState -> Encoding
encCBOR (CommitteeMemberState HotCredAuthStatus
cStatus MemberStatus
mStatus Maybe EpochNo
ex NextEpochChange
nec) =
    Encode ('Closed 'Dense) CommitteeMemberState -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode ('Closed 'Dense) CommitteeMemberState -> Encoding)
-> Encode ('Closed 'Dense) CommitteeMemberState -> Encoding
forall a b. (a -> b) -> a -> b
$
      (HotCredAuthStatus
 -> MemberStatus
 -> Maybe EpochNo
 -> NextEpochChange
 -> CommitteeMemberState)
-> Encode
     ('Closed 'Dense)
     (HotCredAuthStatus
      -> MemberStatus
      -> Maybe EpochNo
      -> NextEpochChange
      -> CommitteeMemberState)
forall t. t -> Encode ('Closed 'Dense) t
Rec HotCredAuthStatus
-> MemberStatus
-> Maybe EpochNo
-> NextEpochChange
-> CommitteeMemberState
CommitteeMemberState
        Encode
  ('Closed 'Dense)
  (HotCredAuthStatus
   -> MemberStatus
   -> Maybe EpochNo
   -> NextEpochChange
   -> CommitteeMemberState)
-> Encode ('Closed 'Dense) HotCredAuthStatus
-> Encode
     ('Closed 'Dense)
     (MemberStatus
      -> Maybe EpochNo -> NextEpochChange -> CommitteeMemberState)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> HotCredAuthStatus -> Encode ('Closed 'Dense) HotCredAuthStatus
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To HotCredAuthStatus
cStatus
        Encode
  ('Closed 'Dense)
  (MemberStatus
   -> Maybe EpochNo -> NextEpochChange -> CommitteeMemberState)
-> Encode ('Closed 'Dense) MemberStatus
-> Encode
     ('Closed 'Dense)
     (Maybe EpochNo -> NextEpochChange -> CommitteeMemberState)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> MemberStatus -> Encode ('Closed 'Dense) MemberStatus
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To MemberStatus
mStatus
        Encode
  ('Closed 'Dense)
  (Maybe EpochNo -> NextEpochChange -> CommitteeMemberState)
-> Encode ('Closed 'Dense) (Maybe EpochNo)
-> Encode
     ('Closed 'Dense) (NextEpochChange -> CommitteeMemberState)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Maybe EpochNo -> Encode ('Closed 'Dense) (Maybe EpochNo)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Maybe EpochNo
ex
        Encode ('Closed 'Dense) (NextEpochChange -> CommitteeMemberState)
-> Encode ('Closed 'Dense) NextEpochChange
-> Encode ('Closed 'Dense) CommitteeMemberState
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> NextEpochChange -> Encode ('Closed 'Dense) NextEpochChange
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To NextEpochChange
nec

instance DecCBOR CommitteeMemberState where
  decCBOR :: forall s. Decoder s CommitteeMemberState
decCBOR =
    Decode ('Closed 'Dense) CommitteeMemberState
-> Decoder s CommitteeMemberState
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode ('Closed 'Dense) CommitteeMemberState
 -> Decoder s CommitteeMemberState)
-> Decode ('Closed 'Dense) CommitteeMemberState
-> Decoder s CommitteeMemberState
forall a b. (a -> b) -> a -> b
$
      (HotCredAuthStatus
 -> MemberStatus
 -> Maybe EpochNo
 -> NextEpochChange
 -> CommitteeMemberState)
-> Decode
     ('Closed 'Dense)
     (HotCredAuthStatus
      -> MemberStatus
      -> Maybe EpochNo
      -> NextEpochChange
      -> CommitteeMemberState)
forall t. t -> Decode ('Closed 'Dense) t
RecD HotCredAuthStatus
-> MemberStatus
-> Maybe EpochNo
-> NextEpochChange
-> CommitteeMemberState
CommitteeMemberState
        Decode
  ('Closed 'Dense)
  (HotCredAuthStatus
   -> MemberStatus
   -> Maybe EpochNo
   -> NextEpochChange
   -> CommitteeMemberState)
-> Decode ('Closed Any) HotCredAuthStatus
-> Decode
     ('Closed 'Dense)
     (MemberStatus
      -> Maybe EpochNo -> NextEpochChange -> CommitteeMemberState)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) HotCredAuthStatus
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (MemberStatus
   -> Maybe EpochNo -> NextEpochChange -> CommitteeMemberState)
-> Decode ('Closed Any) MemberStatus
-> Decode
     ('Closed 'Dense)
     (Maybe EpochNo -> NextEpochChange -> CommitteeMemberState)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) MemberStatus
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Maybe EpochNo -> NextEpochChange -> CommitteeMemberState)
-> Decode ('Closed Any) (Maybe EpochNo)
-> Decode
     ('Closed 'Dense) (NextEpochChange -> CommitteeMemberState)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (Maybe EpochNo)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode ('Closed 'Dense) (NextEpochChange -> CommitteeMemberState)
-> Decode ('Closed Any) NextEpochChange
-> Decode ('Closed 'Dense) CommitteeMemberState
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) NextEpochChange
forall t (w :: Wrapped). DecCBOR t => Decode w t
From

instance ToJSON CommitteeMemberState where
  toJSON :: CommitteeMemberState -> Value
toJSON = [Pair] -> Value
object ([Pair] -> Value)
-> (CommitteeMemberState -> [Pair])
-> CommitteeMemberState
-> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CommitteeMemberState -> [Pair]
forall e a. KeyValue e a => CommitteeMemberState -> [a]
toCommitteeMemberStatePairs
  toEncoding :: CommitteeMemberState -> Encoding
toEncoding = Series -> Encoding
pairs (Series -> Encoding)
-> (CommitteeMemberState -> Series)
-> CommitteeMemberState
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Series] -> Series
forall a. Monoid a => [a] -> a
mconcat ([Series] -> Series)
-> (CommitteeMemberState -> [Series])
-> CommitteeMemberState
-> Series
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CommitteeMemberState -> [Series]
forall e a. KeyValue e a => CommitteeMemberState -> [a]
toCommitteeMemberStatePairs

toCommitteeMemberStatePairs :: KeyValue e a => CommitteeMemberState -> [a]
toCommitteeMemberStatePairs :: forall e a. KeyValue e a => CommitteeMemberState -> [a]
toCommitteeMemberStatePairs c :: CommitteeMemberState
c@(CommitteeMemberState HotCredAuthStatus
_ MemberStatus
_ Maybe EpochNo
_ NextEpochChange
_) =
  let CommitteeMemberState {Maybe EpochNo
NextEpochChange
HotCredAuthStatus
MemberStatus
cmsHotCredAuthStatus :: CommitteeMemberState -> HotCredAuthStatus
cmsStatus :: CommitteeMemberState -> MemberStatus
cmsExpiration :: CommitteeMemberState -> Maybe EpochNo
cmsNextEpochChange :: CommitteeMemberState -> NextEpochChange
cmsHotCredAuthStatus :: HotCredAuthStatus
cmsStatus :: MemberStatus
cmsExpiration :: Maybe EpochNo
cmsNextEpochChange :: NextEpochChange
..} = CommitteeMemberState
c
   in [ Key
"hotCredsAuthStatus" Key -> HotCredAuthStatus -> a
forall v. ToJSON v => Key -> v -> a
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= HotCredAuthStatus
cmsHotCredAuthStatus
      , Key
"status" Key -> MemberStatus -> a
forall v. ToJSON v => Key -> v -> a
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= MemberStatus
cmsStatus
      , Key
"expiration" Key -> Maybe EpochNo -> a
forall v. ToJSON v => Key -> v -> a
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe EpochNo
cmsExpiration
      , Key
"nextEpochChange" Key -> NextEpochChange -> a
forall v. ToJSON v => Key -> v -> a
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= NextEpochChange
cmsNextEpochChange
      ]

data CommitteeMembersState = CommitteeMembersState
  { CommitteeMembersState
-> Map (Credential 'ColdCommitteeRole) CommitteeMemberState
csCommittee :: !(Map (Credential 'ColdCommitteeRole) CommitteeMemberState)
  , CommitteeMembersState -> Maybe UnitInterval
csThreshold :: !(Maybe UnitInterval)
  , CommitteeMembersState -> EpochNo
csEpochNo :: !EpochNo
  -- ^ Current epoch number. This is necessary to interpret committee member states
  }
  deriving (CommitteeMembersState -> CommitteeMembersState -> Bool
(CommitteeMembersState -> CommitteeMembersState -> Bool)
-> (CommitteeMembersState -> CommitteeMembersState -> Bool)
-> Eq CommitteeMembersState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CommitteeMembersState -> CommitteeMembersState -> Bool
== :: CommitteeMembersState -> CommitteeMembersState -> Bool
$c/= :: CommitteeMembersState -> CommitteeMembersState -> Bool
/= :: CommitteeMembersState -> CommitteeMembersState -> Bool
Eq, Int -> CommitteeMembersState -> ShowS
[CommitteeMembersState] -> ShowS
CommitteeMembersState -> String
(Int -> CommitteeMembersState -> ShowS)
-> (CommitteeMembersState -> String)
-> ([CommitteeMembersState] -> ShowS)
-> Show CommitteeMembersState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CommitteeMembersState -> ShowS
showsPrec :: Int -> CommitteeMembersState -> ShowS
$cshow :: CommitteeMembersState -> String
show :: CommitteeMembersState -> String
$cshowList :: [CommitteeMembersState] -> ShowS
showList :: [CommitteeMembersState] -> ShowS
Show, (forall x. CommitteeMembersState -> Rep CommitteeMembersState x)
-> (forall x. Rep CommitteeMembersState x -> CommitteeMembersState)
-> Generic CommitteeMembersState
forall x. Rep CommitteeMembersState x -> CommitteeMembersState
forall x. CommitteeMembersState -> Rep CommitteeMembersState x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. CommitteeMembersState -> Rep CommitteeMembersState x
from :: forall x. CommitteeMembersState -> Rep CommitteeMembersState x
$cto :: forall x. Rep CommitteeMembersState x -> CommitteeMembersState
to :: forall x. Rep CommitteeMembersState x -> CommitteeMembersState
Generic)

deriving instance Ord CommitteeMembersState

instance EncCBOR CommitteeMembersState where
  encCBOR :: CommitteeMembersState -> Encoding
encCBOR c :: CommitteeMembersState
c@(CommitteeMembersState Map (Credential 'ColdCommitteeRole) CommitteeMemberState
_ Maybe UnitInterval
_ EpochNo
_) =
    let CommitteeMembersState {Maybe UnitInterval
Map (Credential 'ColdCommitteeRole) CommitteeMemberState
EpochNo
csCommittee :: CommitteeMembersState
-> Map (Credential 'ColdCommitteeRole) CommitteeMemberState
csThreshold :: CommitteeMembersState -> Maybe UnitInterval
csEpochNo :: CommitteeMembersState -> EpochNo
csCommittee :: Map (Credential 'ColdCommitteeRole) CommitteeMemberState
csThreshold :: Maybe UnitInterval
csEpochNo :: EpochNo
..} = CommitteeMembersState
c
     in Encode ('Closed 'Dense) CommitteeMembersState -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode ('Closed 'Dense) CommitteeMembersState -> Encoding)
-> Encode ('Closed 'Dense) CommitteeMembersState -> Encoding
forall a b. (a -> b) -> a -> b
$
          (Map (Credential 'ColdCommitteeRole) CommitteeMemberState
 -> Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
-> Encode
     ('Closed 'Dense)
     (Map (Credential 'ColdCommitteeRole) CommitteeMemberState
      -> Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
forall t. t -> Encode ('Closed 'Dense) t
Rec Map (Credential 'ColdCommitteeRole) CommitteeMemberState
-> Maybe UnitInterval -> EpochNo -> CommitteeMembersState
CommitteeMembersState
            Encode
  ('Closed 'Dense)
  (Map (Credential 'ColdCommitteeRole) CommitteeMemberState
   -> Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
-> Encode
     ('Closed 'Dense)
     (Map (Credential 'ColdCommitteeRole) CommitteeMemberState)
-> Encode
     ('Closed 'Dense)
     (Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Map (Credential 'ColdCommitteeRole) CommitteeMemberState
-> Encode
     ('Closed 'Dense)
     (Map (Credential 'ColdCommitteeRole) CommitteeMemberState)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Map (Credential 'ColdCommitteeRole) CommitteeMemberState
csCommittee
            Encode
  ('Closed 'Dense)
  (Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
-> Encode ('Closed 'Dense) (Maybe UnitInterval)
-> Encode ('Closed 'Dense) (EpochNo -> CommitteeMembersState)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> Maybe UnitInterval -> Encode ('Closed 'Dense) (Maybe UnitInterval)
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To Maybe UnitInterval
csThreshold
            Encode ('Closed 'Dense) (EpochNo -> CommitteeMembersState)
-> Encode ('Closed 'Dense) EpochNo
-> Encode ('Closed 'Dense) CommitteeMembersState
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode ('Closed r) a -> Encode w t
!> EpochNo -> Encode ('Closed 'Dense) EpochNo
forall t. EncCBOR t => t -> Encode ('Closed 'Dense) t
To EpochNo
csEpochNo

instance DecCBOR CommitteeMembersState where
  decCBOR :: forall s. Decoder s CommitteeMembersState
decCBOR =
    Decode ('Closed 'Dense) CommitteeMembersState
-> Decoder s CommitteeMembersState
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode ('Closed 'Dense) CommitteeMembersState
 -> Decoder s CommitteeMembersState)
-> Decode ('Closed 'Dense) CommitteeMembersState
-> Decoder s CommitteeMembersState
forall a b. (a -> b) -> a -> b
$
      (Map (Credential 'ColdCommitteeRole) CommitteeMemberState
 -> Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
-> Decode
     ('Closed 'Dense)
     (Map (Credential 'ColdCommitteeRole) CommitteeMemberState
      -> Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
forall t. t -> Decode ('Closed 'Dense) t
RecD Map (Credential 'ColdCommitteeRole) CommitteeMemberState
-> Maybe UnitInterval -> EpochNo -> CommitteeMembersState
CommitteeMembersState
        Decode
  ('Closed 'Dense)
  (Map (Credential 'ColdCommitteeRole) CommitteeMemberState
   -> Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
-> Decode
     ('Closed Any)
     (Map (Credential 'ColdCommitteeRole) CommitteeMemberState)
-> Decode
     ('Closed 'Dense)
     (Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode
  ('Closed Any)
  (Map (Credential 'ColdCommitteeRole) CommitteeMemberState)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode
  ('Closed 'Dense)
  (Maybe UnitInterval -> EpochNo -> CommitteeMembersState)
-> Decode ('Closed Any) (Maybe UnitInterval)
-> Decode ('Closed 'Dense) (EpochNo -> CommitteeMembersState)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) (Maybe UnitInterval)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
        Decode ('Closed 'Dense) (EpochNo -> CommitteeMembersState)
-> Decode ('Closed Any) EpochNo
-> Decode ('Closed 'Dense) CommitteeMembersState
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode ('Closed w) a -> Decode w1 t
<! Decode ('Closed Any) EpochNo
forall t (w :: Wrapped). DecCBOR t => Decode w t
From

instance ToJSON CommitteeMembersState where
  toJSON :: CommitteeMembersState -> Value
toJSON = [Pair] -> Value
object ([Pair] -> Value)
-> (CommitteeMembersState -> [Pair])
-> CommitteeMembersState
-> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CommitteeMembersState -> [Pair]
forall e a. KeyValue e a => CommitteeMembersState -> [a]
toCommitteeMembersStatePairs
  toEncoding :: CommitteeMembersState -> Encoding
toEncoding = Series -> Encoding
pairs (Series -> Encoding)
-> (CommitteeMembersState -> Series)
-> CommitteeMembersState
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Series] -> Series
forall a. Monoid a => [a] -> a
mconcat ([Series] -> Series)
-> (CommitteeMembersState -> [Series])
-> CommitteeMembersState
-> Series
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CommitteeMembersState -> [Series]
forall e a. KeyValue e a => CommitteeMembersState -> [a]
toCommitteeMembersStatePairs

toCommitteeMembersStatePairs :: KeyValue e a => CommitteeMembersState -> [a]
toCommitteeMembersStatePairs :: forall e a. KeyValue e a => CommitteeMembersState -> [a]
toCommitteeMembersStatePairs c :: CommitteeMembersState
c@(CommitteeMembersState Map (Credential 'ColdCommitteeRole) CommitteeMemberState
_ Maybe UnitInterval
_ EpochNo
_) =
  let CommitteeMembersState {Maybe UnitInterval
Map (Credential 'ColdCommitteeRole) CommitteeMemberState
EpochNo
csCommittee :: CommitteeMembersState
-> Map (Credential 'ColdCommitteeRole) CommitteeMemberState
csThreshold :: CommitteeMembersState -> Maybe UnitInterval
csEpochNo :: CommitteeMembersState -> EpochNo
csCommittee :: Map (Credential 'ColdCommitteeRole) CommitteeMemberState
csThreshold :: Maybe UnitInterval
csEpochNo :: EpochNo
..} = CommitteeMembersState
c
   in [ Key
"committee" Key
-> Map (Credential 'ColdCommitteeRole) CommitteeMemberState -> a
forall v. ToJSON v => Key -> v -> a
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Map (Credential 'ColdCommitteeRole) CommitteeMemberState
csCommittee
      , Key
"threshold" Key -> Maybe UnitInterval -> a
forall v. ToJSON v => Key -> v -> a
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe UnitInterval
csThreshold
      , Key
"epoch" Key -> EpochNo -> a
forall v. ToJSON v => Key -> v -> a
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= EpochNo
csEpochNo
      ]