{-# LANGUAGE RankNTypes #-}
module Cardano.Rpc.Server.Internal.UtxoRpc.Type.BigInt
( utxoRpcBigIntToInteger
)
where
import Cardano.Api.Error
import Cardano.Api.HasTypeProxy
import Cardano.Api.Serialise.Raw
import Cardano.Rpc.Proto.Api.UtxoRpc.Query qualified as U5c
import Cardano.Rpc.Proto.Api.UtxoRpc.Query qualified as UtxoRpc
import RIO
import Network.GRPC.Spec
utxoRpcBigIntToInteger
:: forall m
. HasCallStack
=> MonadThrow m
=> Proto UtxoRpc.BigInt
-> m Integer
utxoRpcBigIntToInteger :: forall (m :: * -> *).
(HasCallStack, MonadThrow m) =>
Proto BigInt -> m Integer
utxoRpcBigIntToInteger Proto BigInt
bigInt
| Just Int64
int <- Proto BigInt
bigInt Proto BigInt
-> Getting (Maybe Int64) (Proto BigInt) (Maybe Int64)
-> Maybe Int64
forall s a. s -> Getting a s a -> a
^. Getting (Maybe Int64) (Proto BigInt) (Maybe Int64)
forall (f :: * -> *) s a.
(Functor f, HasField s "maybe'int" a) =>
LensLike' f s a
U5c.maybe'int = Integer -> m Integer
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Integer -> m Integer) -> Integer -> m Integer
forall a b. (a -> b) -> a -> b
$ Int64 -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
int
| Just ByteString
bytes <- Proto BigInt
bigInt Proto BigInt
-> Getting (Maybe ByteString) (Proto BigInt) (Maybe ByteString)
-> Maybe ByteString
forall s a. s -> Getting a s a -> a
^. Getting (Maybe ByteString) (Proto BigInt) (Maybe ByteString)
forall (f :: * -> *) s a.
(Functor f, HasField s "maybe'bigNInt" a) =>
LensLike' f s a
U5c.maybe'bigNInt = do
n <- (Natural -> Integer) -> m Natural -> m Integer
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Natural -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (m Natural -> m Integer)
-> (Either SerialiseAsRawBytesError Natural -> m Natural)
-> Either SerialiseAsRawBytesError Natural
-> m Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Either SerialiseAsRawBytesError Natural -> m Natural
forall (m :: * -> *) e a.
(HasCallStack, MonadThrow m, Typeable e, Error e) =>
Either e a -> m a
liftEitherError (Either SerialiseAsRawBytesError Natural -> m Integer)
-> Either SerialiseAsRawBytesError Natural -> m Integer
forall a b. (a -> b) -> a -> b
$ AsType Natural
-> ByteString -> Either SerialiseAsRawBytesError Natural
forall a.
SerialiseAsRawBytes a =>
AsType a -> ByteString -> Either SerialiseAsRawBytesError a
deserialiseFromRawBytes AsType Natural
AsNatural ByteString
bytes
pure $ -n - 1
| Just ByteString
bytes <- Proto BigInt
bigInt Proto BigInt
-> Getting (Maybe ByteString) (Proto BigInt) (Maybe ByteString)
-> Maybe ByteString
forall s a. s -> Getting a s a -> a
^. Getting (Maybe ByteString) (Proto BigInt) (Maybe ByteString)
forall (f :: * -> *) s a.
(Functor f, HasField s "maybe'bigUInt" a) =>
LensLike' f s a
U5c.maybe'bigUInt =
(Natural -> Integer) -> m Natural -> m Integer
forall a b. (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Natural -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (m Natural -> m Integer)
-> (Either SerialiseAsRawBytesError Natural -> m Natural)
-> Either SerialiseAsRawBytesError Natural
-> m Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Either SerialiseAsRawBytesError Natural -> m Natural
forall (m :: * -> *) e a.
(HasCallStack, MonadThrow m, Typeable e, Error e) =>
Either e a -> m a
liftEitherError (Either SerialiseAsRawBytesError Natural -> m Integer)
-> Either SerialiseAsRawBytesError Natural -> m Integer
forall a b. (a -> b) -> a -> b
$ AsType Natural
-> ByteString -> Either SerialiseAsRawBytesError Natural
forall a.
SerialiseAsRawBytes a =>
AsType a -> ByteString -> Either SerialiseAsRawBytesError a
deserialiseFromRawBytes AsType Natural
AsNatural ByteString
bytes
| Bool
otherwise = Integer -> m Integer
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Integer
0