-- | Conversions from ouroboros-consensus types to the Byron spec types
--
-- Intended for unqualified import.
module Ouroboros.Consensus.ByronSpec.Ledger.Conversions (
    -- * Spec to consensus
    fromByronSpecPrevHash
  , fromByronSpecSlotNo
    -- * Consensus to spec
  , toByronSpecSlotNo
  ) where

import qualified Byron.Spec.Chain.STS.Block as Spec
import qualified Byron.Spec.Ledger.Core as Spec
import           Ouroboros.Consensus.Block

{-------------------------------------------------------------------------------
  Spec to consensus
-------------------------------------------------------------------------------}

fromByronSpecPrevHash :: (Spec.Hash -> HeaderHash b)
                      -> Spec.Hash -> ChainHash b
fromByronSpecPrevHash :: forall b. (Hash -> HeaderHash b) -> Hash -> ChainHash b
fromByronSpecPrevHash Hash -> HeaderHash b
f Hash
h
  | Hash
h Hash -> Hash -> Bool
forall a. Eq a => a -> a -> Bool
== Hash
Spec.genesisHash = ChainHash b
forall {k} (b :: k). ChainHash b
GenesisHash
  | Bool
otherwise             = HeaderHash b -> ChainHash b
forall {k} (b :: k). HeaderHash b -> ChainHash b
BlockHash (Hash -> HeaderHash b
f Hash
h)

fromByronSpecSlotNo :: Spec.Slot -> SlotNo
fromByronSpecSlotNo :: Slot -> SlotNo
fromByronSpecSlotNo (Spec.Slot Word64
slot) = Word64 -> SlotNo
SlotNo Word64
slot

{-------------------------------------------------------------------------------
  Consensus to spec
-------------------------------------------------------------------------------}

toByronSpecSlotNo :: SlotNo -> Spec.Slot
toByronSpecSlotNo :: SlotNo -> Slot
toByronSpecSlotNo (SlotNo Word64
slot) = Word64 -> Slot
Spec.Slot Word64
slot