packages feed

ribosome-0.4.0.0: lib/Ribosome/Data/Mapping.hs

module Ribosome.Data.Mapping where

import Data.MessagePack (Object)
import Ribosome.Data.ErrorReport (ErrorReport(ErrorReport))
import Ribosome.Error.Report.Class (ReportError(..))
import System.Log (Priority(NOTICE, ERROR))

newtype MappingIdent =
  MappingIdent Text
  deriving (Eq, Show)

data Mapping =
  Mapping {
    mappingIdent :: MappingIdent,
    mappingLhs :: Text,
    mappingMode :: Text,
    mappingRemap :: Bool,
    mappingBuffer :: Bool
  }
  deriving (Eq, Show)

data MappingError =
  NoSuchMapping MappingIdent
  |
  InvalidArgs [Object]
  deriving (Eq, Show)

deepPrisms ''MappingError

instance ReportError MappingError where
  errorReport (NoSuchMapping (MappingIdent ident)) =
    ErrorReport ("no mapping defined for `" <> ident <>"`") ["no such mapping: " <> ident] NOTICE
  errorReport (InvalidArgs args) =
    ErrorReport "internal error while executing mapping" ["invalid mapping args:", show args] ERROR