packages feed

hinagata-postgres-0.1.0.0: src/Hinagata/Postgres/Internal/BaselineRef.hs

-- | Shared private generation identity for lifecycle modules.
module Hinagata.Postgres.Internal.BaselineRef
  ( BaselineRef (..),
  )
where

import Hinagata.Connection (ConnectionTarget)
import Hinagata.Fixture.Bundle (FixturePlan)
import Hinagata.Postgres.Ownership (CatalogIdentity, OwnedDatabase)
import Hinagata.Prelude
import Hinagata.Types (DatabaseName)

-- | Private identity of a sealed generation; the public API exposes this
-- type abstractly and only permits observing its database name.
data BaselineRef = BaselineRef
  { baselineName :: !DatabaseName,
    generationId :: !Text,
    baselineFingerprint :: !Text,
    clusterIdentity :: !CatalogIdentity,
    ownership :: !OwnedDatabase,
    baselinePlan :: !FixturePlan,
    cloneHook :: !(Maybe (ConnectionTarget -> IO (Either Text ())))
  }

instance Eq BaselineRef where
  left == right =
    (baselineName left, generationId left, baselineFingerprint left, clusterIdentity left, ownership left, baselinePlan left)
      == (baselineName right, generationId right, baselineFingerprint right, clusterIdentity right, ownership right, baselinePlan right)

instance Show BaselineRef where
  show reference = "BaselineRef " <> show (baselineName reference, generationId reference, baselineFingerprint reference, clusterIdentity reference, ownership reference, baselinePlan reference)