packages feed

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

{-# LANGUAGE FlexibleContexts #-}

module LndClient.Data.ReleaseOutput
  ( ReleaseOutputRequest (..),
    ReleaseOutputResponse (..),
  )
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 ReleaseOutputRequest = ReleaseOutputRequest
  { id' :: ByteString,
    outpoint :: Maybe OutPoint
  }
  deriving stock (Eq, Ord, Show, Generic)

instance Out ReleaseOutputRequest

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

data ReleaseOutputResponse = ReleaseOutputResponse deriving stock (Eq, Ord, Show, Generic)

instance Out ReleaseOutputResponse

instance FromGrpc ReleaseOutputResponse W.ReleaseOutputResponse where
  fromGrpc = const $ Right ReleaseOutputResponse