packages feed

tigerbeetle-hs-0.1.0.0: src/Database/TigerBeetle/Transfer.hs

module Database.TigerBeetle.Transfer where

import Data.Set (Set)
import Data.WideWord
import Data.Word
import Database.TigerBeetle.Account
import Database.TigerBeetle.Amount
import Database.TigerBeetle.Code
import Database.TigerBeetle.Ledger
import Database.TigerBeetle.Timestamp

newtype TransferId = TransferId {getTransferId :: Word128}
  deriving (Eq, Show)

newtype TransferCode = TransferCode {getTransferCode :: Word16}
  deriving (Eq, Show)

data TransferFlag
  = Linked
  | Pending
  | PostPending
  | VoidPending
  | BalancingDebit
  | BalancingCredit
  | ClosingDebit
  | ClosingCredit
  | Imported
  deriving (Bounded, Enum, Eq, Ord, Show)

data Transfer = Transfer
  { transferId :: TransferId
  , transferDebitAccountId :: AccountId
  , transferCreditAccountId :: AccountId
  , transferAmount :: Integer
  , transferPendingId :: TransferId
  , transferTimeout :: Int
  , transferLedger :: LedgerId
  , transferCode :: Code
  , transferFlags :: Set TransferFlag
  , transferTimestamp :: Timestamp
  }
  deriving (Eq, Show)

data CreateTransfer = CreateTransfer
  { createTransferId :: TransferId
  , createTransferDebitAccountId :: AccountId
  , createTransferCreditAccountId :: AccountId
  , createTransferAmount :: Amount
  , createTransferLedger :: LedgerId
  , createTransferCode :: TransferCode
  , createTransferFlags :: Set TransferFlag
  }
  deriving (Eq, Show)

data TransferQueryFlag = Reversed
  deriving (Bounded, Enum, Eq, Ord, Show)

data TransferQuery = TransferQuery
  { queryTransferLedger :: Int
  , queryTransferCode :: Int
  , queryTransferTimestampMin :: Timestamp
  , queryTransferTimestampMax :: Timestamp
  , queryTransferLimit :: Int
  , queryTransferFlags :: Set TransferQueryFlag
  }
  deriving (Eq, Show)