lnd-client-0.1.0.0: src/LndClient/Data/SubscribeChannelEvents.hs
{-# LANGUAGE FlexibleInstances #-}
module LndClient.Data.SubscribeChannelEvents
( ChannelEventUpdate (..),
UpdateChannel (..),
)
where
import Data.Either.Extra (maybeToEither)
import LndClient.Data.Channel
import LndClient.Data.ChannelPoint
import LndClient.Data.CloseChannel
import LndClient.Import
import qualified Proto.LndGrpc as LnGRPC
import qualified Proto.LndGrpc_Fields as LnGRPC
data ChannelEventUpdate
= ChannelEventUpdate
{ channelEvent :: UpdateChannel,
eventType :: UpdateType
}
deriving (Eq, Ord, Show)
data UpdateChannel
= ChannelEventUpdateChannelOpenChannel Channel
| ChannelEventUpdateChannelClosedChannel ChannelCloseSummary
| ChannelEventUpdateChannelActiveChannel ChannelPoint
| ChannelEventUpdateChannelInactiveChannel ChannelPoint
| ChannelEventUpdateChannelPendingOpenChannel (PendingUpdate 'Funding)
deriving (Eq, Ord, Show)
data UpdateType
= OPEN_CHANNEL
| CLOSED_CHANNEL
| ACTIVE_CHANNEL
| INACTIVE_CHANNEL
| PENDING_OPEN_CHANNEL
deriving (Eq, Ord, Show)
instance FromGrpc UpdateType LnGRPC.ChannelEventUpdate'UpdateType where
fromGrpc x = case x of
LnGRPC.ChannelEventUpdate'OPEN_CHANNEL -> Right OPEN_CHANNEL
LnGRPC.ChannelEventUpdate'ACTIVE_CHANNEL -> Right ACTIVE_CHANNEL
LnGRPC.ChannelEventUpdate'INACTIVE_CHANNEL -> Right INACTIVE_CHANNEL
LnGRPC.ChannelEventUpdate'PENDING_OPEN_CHANNEL -> Right PENDING_OPEN_CHANNEL
LnGRPC.ChannelEventUpdate'CLOSED_CHANNEL -> Right CLOSED_CHANNEL
LnGRPC.ChannelEventUpdate'UpdateType'Unrecognized v -> Left $ FromGrpcError ("Cannot parse ChannelUpdateType, value:" <> show v)
instance FromGrpc UpdateChannel LnGRPC.ChannelEventUpdate'Channel where
fromGrpc x = case x of
LnGRPC.ChannelEventUpdate'OpenChannel c -> ChannelEventUpdateChannelOpenChannel <$> fromGrpc c
LnGRPC.ChannelEventUpdate'ActiveChannel cp -> ChannelEventUpdateChannelActiveChannel <$> fromGrpc cp
LnGRPC.ChannelEventUpdate'InactiveChannel cp -> ChannelEventUpdateChannelActiveChannel <$> fromGrpc cp
LnGRPC.ChannelEventUpdate'PendingOpenChannel pa -> ChannelEventUpdateChannelPendingOpenChannel <$> fromGrpc pa
LnGRPC.ChannelEventUpdate'ClosedChannel cc -> ChannelEventUpdateChannelClosedChannel <$> fromGrpc cc
instance FromGrpc ChannelEventUpdate LnGRPC.ChannelEventUpdate where
fromGrpc x =
ChannelEventUpdate
<$> join
( fromGrpc
<$> maybeToEither
(FromGrpcError "Empty channelUpdate")
(x ^. LnGRPC.maybe'channel)
)
<*> fromGrpc (x ^. LnGRPC.type')