packages feed

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

{-# LANGUAGE FlexibleContexts #-}

module LndClient.Data.SendCoins
  ( SendCoinsRequest (..),
    SendCoinsResponse (..),
  )
where

import Data.ProtoLens.Message
import LndClient.Import
import qualified Proto.Lightning as LnGRPC
import qualified Proto.Lightning_Fields as LnGRPC

data SendCoinsRequest = SendCoinsRequest
  { addr :: Text,
    amount :: MSat,
    sendAll :: Bool
  }
  deriving stock (Eq, Show, Generic)

instance Out SendCoinsRequest

newtype SendCoinsResponse = SendCoinsResponse
  { txid :: Text
  }
  deriving newtype (Eq, Show)
  deriving stock (Generic)

instance Out SendCoinsResponse

instance ToGrpc SendCoinsRequest LnGRPC.SendCoinsRequest where
  toGrpc x =
    msg
      <$> toGrpcSat (amount x)
      <*> toGrpc (addr x)
      <*> toGrpc (sendAll x)
    where
      msg gAmt gAddr gSendAll=
        defMessage
          & LnGRPC.amount .~ gAmt
          & LnGRPC.addr .~ gAddr
          & LnGRPC.sendAll .~ gSendAll

instance FromGrpc SendCoinsResponse LnGRPC.SendCoinsResponse where
  fromGrpc x = SendCoinsResponse <$> fromGrpc (x ^. LnGRPC.txid)