Initial commit
This commit is contained in:
commit
c101616e62
309 changed files with 53937 additions and 0 deletions
42
bundled/Network/ONCRPC/XDR/Opaque.hs
Normal file
42
bundled/Network/ONCRPC/XDR/Opaque.hs
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
-- |Marshalling values into and out of 'Network.ONCRPC.XDR.Types.Opaque' byte strings.
|
||||
-- Not really part of XDR, but convenient way to avoid many conversion functions.
|
||||
|
||||
{-# LANGUAGE DefaultSignatures #-}
|
||||
module Network.ONCRPC.XDR.Opaque
|
||||
( Opaqued(..)
|
||||
, unopacify'
|
||||
, toOpaque
|
||||
, toOpaque'
|
||||
, fromOpaque
|
||||
, fromOpaque'
|
||||
) where
|
||||
|
||||
import Data.ByteString (ByteString)
|
||||
|
||||
import Network.ONCRPC.XDR.Array
|
||||
import Network.ONCRPC.XDR.Serial
|
||||
|
||||
-- |Values that can be stored in an 'Network.ONCRPC.XDR.Types.Opaque' 'ByteString'.
|
||||
-- The default implementation allows (re-)embedding of XDR-encoded data, such as with 'RPC.Opaque_auth'.
|
||||
class Opaqued a where
|
||||
opacify :: a -> ByteString
|
||||
default opacify :: XDR a => a -> ByteString
|
||||
opacify = xdrSerialize
|
||||
unopacify :: MonadFail m => ByteString -> m a
|
||||
default unopacify :: (XDR a, MonadFail m) => ByteString -> m a
|
||||
unopacify = either fail return . xdrDeserialize
|
||||
|
||||
unopacify' :: Opaqued a => ByteString -> a
|
||||
unopacify' = either error id . 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, MonadFail m) => LengthArray o n ByteString -> m a
|
||||
fromOpaque = unopacify . unLengthArray
|
||||
|
||||
fromOpaque' :: Opaqued a => LengthArray o n ByteString -> a
|
||||
fromOpaque' = unopacify' . unLengthArray
|
||||
Loading…
Add table
Add a link
Reference in a new issue