packages feed

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

{-# LANGUAGE FlexibleContexts #-}

module LndClient.Data.AddInvoice
  ( AddInvoiceRequest (..),
    AddInvoiceResponse (..),
  )
where

import Data.ProtoLens.Message
import LndClient.Import
import qualified Proto.Lnrpc.Ln1 as LnGRPC
import qualified Proto.Lnrpc.Ln1_Fields as LnGRPC

data AddInvoiceRequest = AddInvoiceRequest
  { valueMsat :: MSat,
    memo :: Maybe Text,
    expiry :: Maybe Seconds
  }
  deriving stock (Eq, Show, Generic)

instance Out AddInvoiceRequest

data AddInvoiceResponse = AddInvoiceResponse
  { rHash :: RHash,
    paymentRequest :: PaymentRequest,
    addIndex :: AddIndex
  }
  deriving stock (Eq, Show, Generic)

instance Out AddInvoiceResponse

instance ToGrpc AddInvoiceRequest LnGRPC.Invoice where
  toGrpc x =
    msg
      <$> toGrpc (memo x)
      <*> toGrpcMSat (valueMsat x)
      <*> toGrpc (expiry x)
    where
      msg gMemo gValue gExp =
        defMessage
          & LnGRPC.memo .~ gMemo
          & LnGRPC.valueMsat .~ gValue
          & LnGRPC.expiry .~ gExp

instance FromGrpc AddInvoiceResponse LnGRPC.AddInvoiceResponse where
  fromGrpc x =
    AddInvoiceResponse
      <$> fromGrpc (x ^. LnGRPC.rHash)
      <*> fromGrpc (x ^. LnGRPC.paymentRequest)
      <*> fromGrpc (x ^. LnGRPC.addIndex)