btc-lsp-0.1.0.0: src/BtcLsp/Grpc/Orphan.hs
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module BtcLsp.Grpc.Orphan
( intoProto,
fromProto,
)
where
import BtcLsp.Data.Kind
import BtcLsp.Data.Orphan ()
import BtcLsp.Data.Type
import BtcLsp.Import.External
import Data.ProtoLens.Field
import Data.ProtoLens.Message
import qualified LndClient as Lnd
import qualified Proto.BtcLsp.Data.HighLevel as Proto
import qualified Proto.BtcLsp.Data.HighLevel_Fields as Proto
import qualified Proto.BtcLsp.Data.LowLevel as Proto
import qualified Proto.BtcLsp.Data.LowLevel_Fields as LowLevel
import qualified Witch
fromProto ::
forall proto through haskell.
( HasField proto "val" through,
From through haskell,
'False ~ (through == haskell)
) =>
proto ->
haskell
fromProto =
from
. (^. field @"val")
intoProto ::
forall proto through haskell.
( Message proto,
HasField proto "val" through,
From haskell through,
'False ~ (haskell == through)
) =>
haskell ->
proto
intoProto x =
defMessage
& field @"val" .~ from x
instance From Proto.Nonce Nonce where
from = fromProto
instance From Nonce Proto.Nonce where
from = intoProto
instance From Proto.LnPubKey NodePubKey where
from =
coerce . (^. Proto.val)
instance From NodePubKey Proto.LnPubKey where
from x =
defMessage
& Proto.val .~ coerce x
instance From Proto.LnInvoice (LnInvoice mrel) where
from =
via @Lnd.PaymentRequest . (^. Proto.val)
instance From (LnInvoice mrel) Proto.LnInvoice where
from x =
defMessage
& Proto.val .~ via @Lnd.PaymentRequest x
instance From Proto.FundLnInvoice (LnInvoice 'Fund) where
from = fromProto
instance From (LnInvoice 'Fund) Proto.FundLnInvoice where
from = intoProto
instance From Proto.OnChainAddress (UnsafeOnChainAddress 'Refund) where
from = fromProto
instance From Proto.RefundOnChainAddress (UnsafeOnChainAddress 'Refund) where
from = fromProto
instance From Proto.Privacy Privacy where
from = toEnum . fromEnum
instance From Privacy Proto.Privacy where
from = toEnum . fromEnum
instance From Proto.Msat MSat where
from = fromProto
instance From MSat Proto.Msat where
from = intoProto
instance From Proto.FundMoney MSat where
from = fromProto
instance From MSat Proto.FundMoney where
from = intoProto
deriving stock instance Eq CompressMode
deriving stock instance Generic CompressMode
instance FromJSON CompressMode
instance From PortNumber Word32 where
from = fromIntegral -- Word16 to Word32 is fine.
instance From PortNumber Proto.LnPort where
from = intoProto
instance From HostName Proto.LnHost where
from = intoProto
instance From (Money owner btcl mrel) Proto.Msat where
from = intoProto
instance From (Money 'Usr btcl 'Fund) Proto.LocalBalance where
from = intoProto
instance From (Money 'Lsp btcl 'Gain) Proto.FeeMoney where
from = intoProto
instance From FeeRate Proto.Urational where
from (FeeRate x) =
defMessage
& LowLevel.numerator .~ numerator x
& LowLevel.denominator .~ denominator x
instance From FeeRate Proto.FeeRate where
from = intoProto