packages feed

pg-migrate-cli-1.0.0.0: src/Database/PostgreSQL/Migrate/CLI/Outcome.hs

module Database.PostgreSQL.Migrate.CLI.Outcome
  ( ExitClass (..),
    CheckedMigration (..),
    CliPayload (..),
    CliError (..),
    CliOutcome (..),
  )
where

import Database.PostgreSQL.Migrate
  ( MigrationChecksum,
    MigrationError,
    MigrationReport,
    RepairDefinitionError,
    RepairError,
    RepairReport,
    StatusReport,
    VerificationReport,
  )
import Database.PostgreSQL.Migrate.Embed (AuthoringError, ManifestError)
import Database.PostgreSQL.Migrate.Internal
  ( ComponentDescription,
    MigrationDescription,
  )
import PgMigrate.CLI.Prelude

-- | Stable process-exit classification chosen by the application.
data ExitClass
  = ExitSuccess
  | ExitVerificationFailed
  | ExitUsageFailed
  | ExitExecutionFailed
  deriving stock (Generic, Eq, Ord, Show)

-- | One migration summarized by local plan checking.
data CheckedMigration = CheckedMigration
  { file :: !FilePath,
    checksum :: !MigrationChecksum
  }
  deriving stock (Generic, Eq, Show)

-- | Successful command-specific structured payload.
data CliPayload
  = PlanPayload ![ComponentDescription]
  | ListPayload ![MigrationDescription]
  | CheckPayload !(NonEmpty CheckedMigration)
  | StatusPayload !StatusReport
  | VerifyPayload !VerificationReport
  | UpPayload !MigrationReport
  | RepairPayload !RepairReport
  | NewPayload !FilePath
  deriving stock (Generic, Eq, Show)

-- | Structured CLI definition, runner, repair, authoring, or import failure.
data CliError
  = CliMigrationError !MigrationError
  | CliRepairDefinitionError !RepairDefinitionError
  | CliRepairError !RepairError
  | CliManifestError !ManifestError
  | CliAuthoringError !AuthoringError
  deriving stock (Generic, Show)

-- | Renderable command result with stable exit classification.
data CliOutcome = CliOutcome
  { command :: !Text,
    exitClass :: !ExitClass,
    payload :: !(Either CliError CliPayload)
  }
  deriving stock (Generic, Show)