packages feed

clickhouse-migrate-0.1.0.0: src/ClickHouseMigrate/Internal/AdoptionTypes.hs

-- | Private representations. Adoption input cannot bypass validated construction.
module ClickHouseMigrate.Internal.AdoptionTypes where

import ClickHouseMigrate.Internal.LedgerTypes qualified as L
import ClickHouseMigrate.Prelude
import ClickHouseMigrate.Target (TargetKey)

data AdoptionError
  = InvalidSourceEvidence
  | UnsupportedSourceChecksum
  | InvalidSourceChecksum
  | DuplicateSourceRow
  | DuplicateMapping
  | IncompleteMapping
  | UnknownSourceRow
  | MappingOrderMismatch
  | MappingDefinitionMismatch
  | HistoricalChecksumMismatch
  | HistoricalChecksumRequired
  | AdoptionTargetMismatch
  | AdoptionInitializationRequired
  | AdoptionExpectedStateMismatch
  | AdoptionNativeConflict
  | AdoptionBatchConflict
  | AdoptionResumeRequired
  | AdoptionBatchTooLarge
  deriving stock (Eq, Show)

data SourceChecksum = SourceChecksum !Text !Text deriving stock (Eq, Show)

data LegacyRow = LegacyRow !Text !Text !(Maybe SourceChecksum) deriving stock (Eq, Show)

-- Historical source bytes deliberately have no Show instance and never enter
-- default reports. They are used only to verify an actual predecessor checksum.
data MappingEvidence = Attested ![Text] | Verified !ByteString ![Text]

data AdoptionMapping = AdoptionMapping !Text !Text !Text !Text !MappingEvidence

data AdoptionRequest
  = AdoptionRequest
      !TargetKey
      !L.ExpectedLedgerState
      !(Maybe L.InitializationAuthorization)
      !L.QuiescenceEvidence
      !L.AuditContext
      !Text
      !Text
      ![LegacyRow]
      ![AdoptionMapping]

data AdoptionPlan = AdoptionPlan !AdoptionRequest !L.AdoptionBatch ![(L.Definition, L.Evidence)]