packages feed

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

{-# LANGUAGE FlexibleContexts #-}

module LndClient.Data.PsbtShim
  ( PsbtShim (..),
  )
where

import Data.ProtoLens.Message
import LndClient.Data.Newtype
import LndClient.Import
import qualified Proto.Lnrpc.Ln0 as L
import qualified Proto.Lnrpc.Ln0_Fields as L
import Lens.Micro

data PsbtShim = PsbtShim
  { pendingChanId :: PendingChannelId,
    basePsbt :: Maybe Psbt,
    noPublish :: Bool
  }
  deriving stock (Eq, Ord, Show, Generic)

instance Out PsbtShim

toBasePsbt :: Maybe Psbt -> Either LndError ByteString
toBasePsbt = maybe (Right "") toGrpc

instance ToGrpc PsbtShim L.PsbtShim where
  toGrpc x = msg <$> toGrpc (pendingChanId x) <*> toBasePsbt (basePsbt x) <*> pure (noPublish x)
    where
      msg pchid bp np = defMessage & L.pendingChanId .~ pchid & L.basePsbt .~ bp & L.noPublish .~ np

instance ToGrpc PsbtShim L.FundingShim where
  toGrpc x = msg <$> toGrpc (pendingChanId x) <*> toBasePsbt (basePsbt x) <*> pure (noPublish x)
    where
      msg pchid bp np =
        defMessage
          & L.maybe'psbtShim ?~
            (defMessage & L.pendingChanId .~ pchid & L.basePsbt .~ bp & L.noPublish .~ np)