packages feed

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

{-# LANGUAGE FlexibleContexts #-}

module LndClient.Data.LeaseOutput
  ( LeaseOutputRequest (..),
    LeaseOutputResponse (..),
  )
where

import Data.ProtoLens.Message
import LndClient.Data.OutPoint
import LndClient.Import
import qualified Proto.Lnrpc.Ln0 as LnGRPC
import qualified Proto.Walletrpc.Walletkit as W
import qualified Proto.Walletrpc.Walletkit_Fields as W

data LeaseOutputRequest = LeaseOutputRequest
  { id' :: ByteString,
    outpoint :: Maybe OutPoint,
    expirationSeconds :: Word64
  }
  deriving stock (Eq, Ord, Show, Generic)

instance Out LeaseOutputRequest

instance ToGrpc LeaseOutputRequest W.LeaseOutputRequest where
  toGrpc x = msg (id' x) (expirationSeconds x) <$> out'
    where
      out' :: Either LndError (Maybe LnGRPC.OutPoint)
      out' = case outpoint x of
        Just op -> Just <$> toGrpc op
        Nothing -> Right Nothing
      msg i e o =
        defMessage
          & (W.id .~ i)
          & (W.maybe'outpoint .~ o)
          & (W.expirationSeconds .~ e)

newtype LeaseOutputResponse = LeaseOutputResponse
  {expiration :: Word64}
  deriving newtype (Eq, Ord, Show)
  deriving stock (Generic)

instance Out LeaseOutputResponse

instance FromGrpc LeaseOutputResponse W.LeaseOutputResponse where
  fromGrpc x = LeaseOutputResponse <$> fromGrpc (x ^. W.expiration)