packages feed

inferno-vc-0.1.0: src/Inferno/VersionControl/Operations/Error.hs

{-# LANGUAGE DeriveAnyClass #-}

module Inferno.VersionControl.Operations.Error where

import Data.Aeson (FromJSON, ToJSON)
import Data.Text (Text, unpack)
import GHC.Generics (Generic)
import Inferno.VersionControl.Types
  ( VCObjectHash (..),
  )

data VCStoreError
  = CouldNotDecodeObject VCObjectHash String
  | CouldNotFindObject VCObjectHash
  | CouldNotFindPath FilePath
  | CouldNotFindHead VCObjectHash
  | TryingToAppendToNonHead VCObjectHash
  | InvalidHash String
  | UnexpectedObjectType VCObjectHash Text
  | TryingToDeleteNonAutosave Text
  deriving (Show, Generic, ToJSON, FromJSON)

vcStoreErrorToString :: VCStoreError -> String
vcStoreErrorToString = \case
  CouldNotDecodeObject h s -> "Could not decode object '" <> show h <> "': " <> s
  CouldNotFindObject h ->
    "Could not find object '" <> show h <> "'"
  CouldNotFindPath fp -> "Could not find path: " <> fp
  CouldNotFindHead h -> "Could not find HEAD for object '" <> show h <> "'"
  TryingToAppendToNonHead h -> "Trying to append to non-HEAD object '" <> show h <> "'"
  InvalidHash s -> "Could not decode hash '" <> s <> "'"
  UnexpectedObjectType h s ->
    "Unexpected object type of '" <> show h <> "'. Was expecting " <> unpack s
  TryingToDeleteNonAutosave n -> "Trying to delete a non-autosaved script " <> unpack n