packages feed

lnd-client-0.1.0.1: src/LndClient/Data/Invoice.hs

module LndClient.Data.Invoice
  ( Invoice (..),
    InvoiceState (..),
  )
where

import LndClient.Import
import qualified Proto.Lnrpc.Ln1 as LnGRPC
import qualified Proto.Lnrpc.Ln1_Fields as LnGRPC

data Invoice = Invoice
  { rHash :: RHash,
    amtPaidMsat :: MSat,
    valueMsat :: MSat,
    settled :: Bool,
    settleIndex :: Maybe SettleIndex,
    memo :: Text,
    paymentRequest :: PaymentRequest,
    private :: Bool,
    addIndex :: AddIndex,
    state :: InvoiceState
  }
  deriving stock (Eq, Show, Generic)

instance Out Invoice

data InvoiceState
  = OPEN
  | SETTLED
  | CANCELED
  | ACCEPTED
  deriving stock (Eq, Show, Generic)

instance Out InvoiceState

instance FromGrpc Invoice LnGRPC.Invoice where
  fromGrpc x =
    Invoice
      <$> fromGrpc (x ^. LnGRPC.rHash)
      <*> fromGrpcMSat (x ^. LnGRPC.amtPaidMsat)
      <*> fromGrpcMSat (x ^. LnGRPC.valueMsat)
      <*> fromGrpc (x ^. LnGRPC.settled)
      <*> fromGrpc (x ^. LnGRPC.settleIndex)
      <*> fromGrpc (x ^. LnGRPC.memo)
      <*> fromGrpc (x ^. LnGRPC.paymentRequest)
      <*> fromGrpc (x ^. LnGRPC.private)
      <*> fromGrpc (x ^. LnGRPC.addIndex)
      <*> fromGrpc (x ^. LnGRPC.state)

instance FromGrpc InvoiceState LnGRPC.Invoice'InvoiceState where
  fromGrpc x =
    case x of
      LnGRPC.Invoice'OPEN -> Right OPEN
      LnGRPC.Invoice'SETTLED -> Right SETTLED
      LnGRPC.Invoice'CANCELED -> Right CANCELED
      LnGRPC.Invoice'ACCEPTED -> Right ACCEPTED
      LnGRPC.Invoice'InvoiceState'Unrecognized v ->
        Left
          . FromGrpcError
          $ "Cannot parse InvoiceState, value:" <> inspect v