module Cardano.Rpc.Server.Internal.UtxoRpc.Type.Rational
( utxoRpcRationalNumberToRational
)
where
import Cardano.Rpc.Proto.Api.UtxoRpc.Query qualified as U5c
import RIO
import Data.Ratio ((%))
import Network.GRPC.Spec
utxoRpcRationalNumberToRational :: Proto U5c.RationalNumber -> Maybe Rational
utxoRpcRationalNumberToRational :: Proto RationalNumber -> Maybe Rational
utxoRpcRationalNumberToRational Proto RationalNumber
r =
case Proto RationalNumber
r Proto RationalNumber
-> Getting Word32 (Proto RationalNumber) Word32 -> Word32
forall s a. s -> Getting a s a -> a
^. Getting Word32 (Proto RationalNumber) Word32
forall (f :: * -> *) s a.
(Functor f, HasField s "denominator" a) =>
LensLike' f s a
U5c.denominator of
Word32
0 -> Maybe Rational
forall a. Maybe a
Nothing
Word32
den -> Rational -> Maybe Rational
forall a. a -> Maybe a
Just (Rational -> Maybe Rational) -> Rational -> Maybe Rational
forall a b. (a -> b) -> a -> b
$ Proto RationalNumber
r Proto RationalNumber
-> Getting Integer (Proto RationalNumber) Integer -> Integer
forall s a. s -> Getting a s a -> a
^. LensLike' (Const Integer) (Proto RationalNumber) Int32
forall (f :: * -> *) s a.
(Functor f, HasField s "numerator" a) =>
LensLike' f s a
U5c.numerator LensLike' (Const Integer) (Proto RationalNumber) Int32
-> ((Integer -> Const Integer Integer)
-> Int32 -> Const Integer Int32)
-> Getting Integer (Proto RationalNumber) Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int32 -> Integer) -> SimpleGetter Int32 Integer
forall s a. (s -> a) -> SimpleGetter s a
to Int32 -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer -> Integer -> Rational
forall a. Integral a => a -> a -> Ratio a
% Word32 -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
den