module Network.ONCRPC.XDR.Opaque
( Opaqued(..)
, unopacify'
, toOpaque
, toOpaque'
, fromOpaque
, fromOpaque'
) where
import Data.ByteString (ByteString)
import Data.Functor.Identity (runIdentity)
import Network.ONCRPC.XDR.Array
import Network.ONCRPC.XDR.Serial
import qualified Network.ONCRPC.Prot as RPC
class Opaqued a where
opacify :: a -> ByteString
default opacify :: XDR a => a -> ByteString
opacify = xdrSerialize
unopacify :: Monad m => ByteString -> m a
default unopacify :: (XDR a, Monad m) => ByteString -> m a
unopacify = either fail return . xdrDeserialize
unopacify' :: Opaqued a => ByteString -> a
unopacify' = runIdentity . unopacify
toOpaque :: (Opaqued a, KnownOrdering o, KnownNat n) => a -> Maybe (LengthArray o n ByteString)
toOpaque = lengthArray . opacify
toOpaque' :: (Opaqued a, KnownOrdering o, KnownNat n) => a -> LengthArray o n ByteString
toOpaque' = lengthArray' . opacify
fromOpaque :: (Opaqued a, Monad m) => LengthArray o n ByteString -> m a
fromOpaque = unopacify . unLengthArray
fromOpaque' :: Opaqued a => LengthArray o n ByteString -> a
fromOpaque' = unopacify' . unLengthArray
instance Opaqued RPC.Authsys_parms