lnd-client-0.1.0.1: src/LndClient/Data/ChannelBackup.hs
module LndClient.Data.ChannelBackup
( ChannelBackup (..),
SingleChanBackupBlob (..),
)
where
import Data.ProtoLens
import qualified LndClient.Data.ChannelPoint as Ch
import LndClient.Import
import qualified Proto.Lnrpc.Ln1 as Ln1
import qualified Proto.Lnrpc.Ln1_Fields as Ln1
data ChannelBackup = ChannelBackup
{ chanPoint :: Ch.ChannelPoint,
chanBackup :: SingleChanBackupBlob
}
deriving stock
( Eq,
Ord,
Show,
Generic
)
instance Out ChannelBackup
newtype SingleChanBackupBlob = SingleChanBackupBlob
{ unSingleChanBackupBlob :: ByteString
}
deriving newtype
( Eq,
Ord,
Show,
PersistField,
PersistFieldSql
)
deriving stock
( Generic
)
instance Out SingleChanBackupBlob
instance FromGrpc [ChannelBackup] Ln1.ChanBackupSnapshot where
fromGrpc x =
fromGrpc $
x ^. Ln1.singleChanBackups . Ln1.chanBackups
instance FromGrpc ChannelBackup Ln1.ChannelBackup where
fromGrpc x =
ChannelBackup
<$> fromGrpc (x ^. Ln1.chanPoint)
<*> fromGrpc (x ^. Ln1.chanBackup)
instance ToGrpc ChannelBackup Ln1.ChannelBackup where
toGrpc x =
msg
<$> toGrpc (chanPoint x)
<*> toGrpc (chanBackup x)
where
msg cp bak =
defMessage
& Ln1.chanPoint .~ cp
& Ln1.chanBackup .~ bak
instance FromGrpc SingleChanBackupBlob ByteString where
fromGrpc x =
if null x
then
Left
. FromGrpcError
$ "Cannot parse SingleChanBackupBlob from " <> inspect x
else
Right $
SingleChanBackupBlob x
instance ToGrpc SingleChanBackupBlob ByteString where
toGrpc =
Right . unSingleChanBackupBlob
instance ToGrpc [ChannelBackup] Ln1.RestoreChanBackupRequest where
toGrpc xs0 = do
xs <- mapM toGrpc xs0
pure $
defMessage
& Ln1.chanBackups
.~ ( defMessage
& Ln1.chanBackups .~ xs
)