| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Capnp.New
Description
Synopsis
- data LimitT m a
- class Monad m => MonadLimit m where
- runLimitT :: MonadThrow m => WordCount -> LimitT m a -> m (a, WordCount)
- evalLimitT :: MonadThrow m => WordCount -> LimitT m a -> m a
- execLimitT :: MonadThrow m => WordCount -> LimitT m a -> m WordCount
- defaultLimit :: WordCount
- hPutMsg :: Handle -> Message 'Const -> IO ()
- putMsg :: Message 'Const -> IO ()
- hGetMsg :: Handle -> WordCount -> IO (Message 'Const)
- getMsg :: WordCount -> IO (Message 'Const)
- class IsWord a where
- class (Parse a ap, Allocate (List a)) => EstimateListAlloc a ap where
- estimateListAlloc :: Vector ap -> AllocHint (List a)
- type MarshalElement a ap = (Parse a ap, EstimateListAlloc a ap, Element (ReprFor a), MarshalElementByRepr (ListReprFor (ReprFor a)), MarshalElementReprConstraints (ListReprFor (ReprFor a)) a ap)
- class (IsStruct a, Allocate a, AllocHint a ~ ()) => TypedStruct a where
- class Parse t p => Marshal t p where
- marshalInto :: RWCtx m s => Raw ('Mut s) t -> p -> m ()
- class AllocateList a where
- type ListAllocHint a
- newList :: RWCtx m s => ListAllocHint a -> Message ('Mut s) -> m (Raw ('Mut s) (List a))
- class Allocate a where
- class (Parse t p, Allocate t) => EstimateAlloc t p where
- estimateAlloc :: p -> AllocHint t
- class Parse t p | t -> p, p -> t where
- newFromRepr :: forall a r m s. (Allocate r, 'Ptr ('Just r) ~ ReprFor a, RWCtx m s) => AllocHint r -> Message ('Mut s) -> m (Raw ('Mut s) a)
- newTypedStruct :: forall a m s. (TypedStruct a, RWCtx m s) => Message ('Mut s) -> m (Raw ('Mut s) a)
- newTypedStructList :: forall a m s. (TypedStruct a, RWCtx m s) => Int -> Message ('Mut s) -> m (Raw ('Mut s) (List a))
- structSizes :: forall a. TypedStruct a => (Word16, Word16)
- newRoot :: forall a m s. (RWCtx m s, IsStruct a, Allocate a) => AllocHint a -> Message ('Mut s) -> m (Raw ('Mut s) a)
- readField :: forall k a b mut m. (IsStruct a, ReadCtx m mut) => Field k a b -> Raw mut a -> m (Raw mut b)
- hasField :: (ReadCtx m mut, IsStruct a, IsPtr b) => Field 'Slot a b -> Raw mut a -> m Bool
- getField :: (IsStruct a, ReprFor b ~ 'Data sz, Parse b bp) => Field 'Slot a b -> Raw 'Const a -> bp
- setField :: forall a b m s. (IsStruct a, RWCtx m s) => Field 'Slot a b -> Raw ('Mut s) b -> Raw ('Mut s) a -> m ()
- newField :: forall a b m s. (IsStruct a, Allocate b, RWCtx m s) => Field 'Slot a b -> AllocHint b -> Raw ('Mut s) a -> m (Raw ('Mut s) b)
- encodeField :: forall a b m s bp. (IsStruct a, Parse b bp, RWCtx m s) => Field 'Slot a b -> bp -> Raw ('Mut s) a -> m ()
- parseField :: (IsStruct a, Parse b bp, ReadCtx m 'Const) => Field k a b -> Raw 'Const a -> m bp
- setVariant :: forall a b m s. (HasUnion a, RWCtx m s) => Variant 'Slot a b -> Raw ('Mut s) a -> Raw ('Mut s) b -> m ()
- encodeVariant :: forall a b m s bp. (HasUnion a, Parse b bp, RWCtx m s) => Variant 'Slot a b -> bp -> Raw ('Mut s) a -> m ()
- initVariant :: forall a b m s. (HasUnion a, RWCtx m s) => Variant 'Group a b -> Raw ('Mut s) a -> m (Raw ('Mut s) b)
- structUnion :: HasUnion a => Raw mut a -> Raw mut (Which a)
- unionStruct :: HasUnion a => Raw mut (Which a) -> Raw mut a
- structWhich :: forall a mut m. (ReadCtx m mut, HasUnion a) => Raw mut a -> m (RawWhich mut a)
- unionWhich :: forall a mut m. (ReadCtx m mut, HasUnion a) => Raw mut (Which a) -> m (RawWhich mut a)
- msgToBuilder :: Message 'Const -> Builder
- msgToLBS :: Message 'Const -> ByteString
- msgToBS :: Message 'Const -> ByteString
- msgToValue :: (MonadThrow m, MonadReadMessage mut (LimitT m), MonadReadMessage mut m, FromStruct mut a) => Message mut -> m a
- bsToMsg :: MonadThrow m => ByteString -> m (Message 'Const)
- bsToValue :: (MonadThrow m, FromStruct 'Const a) => ByteString -> m a
- lbsToMsg :: MonadThrow m => ByteString -> m (Message 'Const)
- lbsToValue :: (MonadThrow m, FromStruct 'Const a) => ByteString -> m a
- valueToBuilder :: (MonadLimit m, WriteCtx m s, Cerialize s a, ToStruct ('Mut s) (Cerial ('Mut s) a)) => a -> m Builder
- valueToBS :: (MonadLimit m, WriteCtx m s, Cerialize s a, ToStruct ('Mut s) (Cerial ('Mut s) a)) => a -> m ByteString
- valueToLBS :: (MonadLimit m, WriteCtx m s, Cerialize s a, ToStruct ('Mut s) (Cerial ('Mut s) a)) => a -> m ByteString
- valueToMsg :: (MonadLimit m, WriteCtx m s, Cerialize s a, ToStruct ('Mut s) (Cerial ('Mut s) a)) => a -> m (Message ('Mut s))
- msgToRaw :: forall a m mut. (ReadCtx m mut, IsStruct a) => Message mut -> m (Raw mut a)
- msgToParsed :: forall a m pa. (ReadCtx m 'Const, IsStruct a, Parse a pa) => Message 'Const -> m pa
- parsedToRaw :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m (Raw ('Mut s) a)
- parsedToMsg :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m (Message ('Mut s))
- parsedToBuilder :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m Builder
- parsedToLBS :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m ByteString
- parsedToBS :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m ByteString
- hGetValue :: FromStruct 'Const a => Handle -> WordCount -> IO a
- getValue :: FromStruct 'Const a => WordCount -> IO a
- sGetValue :: FromStruct 'Const a => Socket -> WordCount -> IO a
- sGetMsg :: Socket -> WordCount -> IO (Message 'Const)
- hPutValue :: (Cerialize RealWorld a, ToStruct ('Mut RealWorld) (Cerial ('Mut RealWorld) a)) => Handle -> a -> IO ()
- putValue :: (Cerialize RealWorld a, ToStruct ('Mut RealWorld) (Cerial ('Mut RealWorld) a)) => a -> IO ()
- sPutMsg :: Socket -> Message 'Const -> IO ()
- sPutValue :: (Cerialize RealWorld a, ToStruct ('Mut RealWorld) (Cerial ('Mut RealWorld) a)) => Socket -> a -> IO ()
- hGetParsed :: forall a pa. (IsStruct a, Parse a pa) => Handle -> WordCount -> IO pa
- sGetParsed :: forall a pa. (IsStruct a, Parse a pa) => Socket -> WordCount -> IO pa
- getParsed :: (IsStruct a, Parse a pa) => WordCount -> IO pa
- hPutParsed :: (IsStruct a, Parse a pa) => Handle -> pa -> IO ()
- putParsed :: (IsStruct a, Parse a pa) => pa -> IO ()
- sPutParsed :: (IsStruct a, Parse a pa) => Socket -> pa -> IO ()
- hGetRaw :: IsStruct a => Handle -> WordCount -> IO (Raw 'Const a)
- getRaw :: IsStruct a => WordCount -> IO (Raw 'Const a)
- sGetRaw :: IsStruct a => Socket -> WordCount -> IO (Raw 'Const a)
- class AsClient f where
- newtype Client a = Client Client
- newtype Pipeline a = Pipeline Pipeline
- class (IsCap c, IsStruct p, IsStruct r) => HasMethod (name :: Symbol) c p r | name c -> p r where
- methodByLabel :: Method c p r
- data Method c p r = Method {
- interfaceId :: !Word64
- methodId :: !Word16
- callB :: (AsClient f, IsCap c, IsStruct p, MonadSTM m) => Method c p r -> (forall s. PureBuilder s (Raw ('Mut s) p)) -> f c -> m (Pipeline r)
- callR :: (AsClient f, IsCap c, IsStruct p, MonadSTM m) => Method c p r -> Raw 'Const p -> f c -> m (Pipeline r)
- callP :: forall c p r f m pp. (AsClient f, IsCap c, IsStruct p, Parse p pp, MonadSTM m, MonadThrow m) => Method c p r -> pp -> f c -> m (Pipeline r)
- pipe :: (IsStruct a, ReprFor b ~ 'Ptr pr) => Field k a b -> Pipeline a -> Pipeline b
- pipelineClient :: (IsCap a, MonadSTM m) => Pipeline a -> m (Client a)
- waitPipeline :: forall a m pr. ('Ptr pr ~ ReprFor a, IsPtrRepr pr, MonadSTM m) => Pipeline a -> m (Raw 'Const a)
- type TypeParam a = (IsPtr a, Parse a (Parsed a))
- type Parsed a = ParsedByRepr (ReprFor a) a
- data Raw (mut :: Mutability) (a :: Type)
- data List a
- index :: forall a m mut. (ReadCtx m mut, Element (ReprFor a)) => Int -> Raw mut (List a) -> m (Raw mut a)
- setIndex :: forall a m s. (RWCtx m s, Element (ReprFor a)) => Raw ('Mut s) a -> Int -> Raw ('Mut s) (List a) -> m ()
- length :: Raw mut (List a) -> Int
- data Field (k :: FieldKind) a b
- data FieldKind
- class IsStruct a => HasField (name :: Symbol) k a b | a name -> k b where
- fieldByLabel :: Field k a b
- class IsStruct a => HasUnion a where
- data Which a
- data RawWhich (mut :: Mutability) a
- unionField :: Field 'Slot a Word16
- internalWhich :: ReadCtx m mut => Word16 -> Raw mut a -> m (RawWhich mut a)
- class HasUnion a => HasVariant (name :: Symbol) k a b | a name -> k b where
- variantByLabel :: Variant k a b
- data Message (mut :: Mutability)
- data Segment (mut :: Mutability)
- data Mutability
- class Monad m => MonadReadMessage mut m where
- numSegs :: Message mut -> m Int
- numWords :: Segment mut -> m WordCount
- numCaps :: Message mut -> m Int
- internalGetSeg :: Message mut -> Int -> m (Segment mut)
- internalGetCap :: Message mut -> Int -> m Client
- slice :: WordCount -> WordCount -> Segment mut -> m (Segment mut)
- read :: Segment mut -> WordCount -> m Word64
- newMessage :: WriteCtx m s => Maybe WordCount -> m (Message ('Mut s))
- fromByteString :: ByteString -> Segment 'Const
- toByteString :: Segment 'Const -> ByteString
- data PureBuilder s a
- createPure :: (MonadThrow m, Thaw a) => WordCount -> (forall s. PureBuilder s (Mutable s a)) -> m a
- def :: Default a => a
Documentation
Monad transformer implementing MonadLimit. The underlying monad
must implement MonadThrow. invoice calls
when the limit is exhausted.throwM TraversalLimitError
Instances
| MonadTrans LimitT Source # | |
Defined in Capnp.TraversalLimit | |
| MonadState s m => MonadState s (LimitT m) Source # | |
| Monad m => Monad (LimitT m) Source # | |
| Functor m => Functor (LimitT m) Source # | |
| MonadFail m => MonadFail (LimitT m) Source # | |
Defined in Capnp.TraversalLimit | |
| Monad m => Applicative (LimitT m) Source # | |
| MonadIO m => MonadIO (LimitT m) Source # | |
Defined in Capnp.TraversalLimit | |
| MonadThrow m => MonadThrow (LimitT m) Source # | |
Defined in Capnp.TraversalLimit | |
| MonadCatch m => MonadCatch (LimitT m) Source # | |
| (PrimMonad m, s ~ PrimState m) => PrimMonad (LimitT m) Source # | |
| MonadThrow m => MonadLimit (LimitT m) Source # | |
| type PrimState (LimitT m) Source # | |
Defined in Capnp.TraversalLimit | |
class Monad m => MonadLimit m where Source #
mtl-style type class to track the traversal limit. This is used by other parts of the library which actually do the reading.
Methods
invoice :: WordCount -> m () Source #
deducts invoice nn from the traversal limit, signaling
an error if the limit is exhausted.
Instances
| MonadThrow m => MonadLimit (LimitT m) Source # | |
| MonadLimit (PureBuilder s) Source # | |
Defined in Internal.BuildPure Methods invoice :: WordCount -> PureBuilder s () Source # | |
| MonadLimit m => MonadLimit (ReaderT r m) Source # | |
| (Monoid w, MonadLimit m) => MonadLimit (WriterT w m) Source # | |
| MonadLimit m => MonadLimit (StateT s m) Source # | |
| MonadLimit m => MonadLimit (StateT s m) Source # | |
| (Monoid w, MonadLimit m) => MonadLimit (RWST r w s m) Source # | |
runLimitT :: MonadThrow m => WordCount -> LimitT m a -> m (a, WordCount) Source #
Run a LimitT, returning the value from the computation and the remaining
traversal limit.
evalLimitT :: MonadThrow m => WordCount -> LimitT m a -> m a Source #
Run a LimitT, returning the value from the computation.
execLimitT :: MonadThrow m => WordCount -> LimitT m a -> m WordCount Source #
Run a LimitT, returning the remaining traversal limit.
defaultLimit :: WordCount Source #
A sensible default traversal limit. Currently 64 MiB.
hGetMsg :: Handle -> WordCount -> IO (Message 'Const) Source #
reads a message from hGetMsg handle limithandle that is at most
limit 64-bit words in length.
Types that can be converted to and from a 64-bit word.
Anything that goes in the data section of a struct will have an instance of this.
Methods
fromWord :: Word64 -> a Source #
Convert from a 64-bit words Truncates the word if the type has less than 64 bits.
toWord :: a -> Word64 Source #
Convert to a 64-bit word.
Instances
| IsWord Bool Source # | |
| IsWord Double Source # | |
| IsWord Float Source # | |
| IsWord Int8 Source # | |
| IsWord Int16 Source # | |
| IsWord Int32 Source # | |
| IsWord Int64 Source # | |
| IsWord Word8 Source # | |
| IsWord Word16 Source # | |
| IsWord Word32 Source # | |
| IsWord Word64 Source # | |
| IsWord Word1 Source # | |
| IsWord ElementSize Source # | |
Defined in Capnp.Gen.Capnp.Schema | |
| IsWord Side Source # | |
| IsWord Exception'Type Source # | |
Defined in Capnp.Gen.Capnp.Rpc | |
| IsWord ElementSize Source # | |
Defined in Capnp.Gen.Capnp.Schema.New | |
| IsWord Side Source # | |
| IsWord Exception'Type Source # | |
Defined in Capnp.Gen.Capnp.Rpc.New | |
class (Parse a ap, Allocate (List a)) => EstimateListAlloc a ap where Source #
Minimal complete definition
Nothing
Instances
type MarshalElement a ap = (Parse a ap, EstimateListAlloc a ap, Element (ReprFor a), MarshalElementByRepr (ListReprFor (ReprFor a)), MarshalElementReprConstraints (ListReprFor (ReprFor a)) a ap) Source #
Type alias capturing the constraints on a type needed by
marshalElement
class (IsStruct a, Allocate a, AllocHint a ~ ()) => TypedStruct a where Source #
Operations on typed structs.
Instances
class Parse t p => Marshal t p where Source #
An instance of marshal allows a parsed value to be inserted into pre-allocated space in a message.
Methods
marshalInto :: RWCtx m s => Raw ('Mut s) t -> p -> m () Source #
Marshal a value into the pre-allocated object inside the message.
Note that caller must arrange for the object to be of the correct size. This is is not necessarily guaranteed; for example, list types must coordinate the length of the list.
Instances
class AllocateList a where Source #
Like Allocate, but for allocating *lists* of a.
Minimal complete definition
Nothing
Methods
newList :: RWCtx m s => ListAllocHint a -> Message ('Mut s) -> m (Raw ('Mut s) (List a)) Source #
Instances
class Allocate a where Source #
Types which may be allocated directly inside a message.
Minimal complete definition
Nothing
Associated Types
Extra information needed to allocate a value of this type, e.g. the length for a list. May be () if no extra info is needed.
Methods
new :: RWCtx m s => AllocHint a -> Message ('Mut s) -> m (Raw ('Mut s) a) Source #
allocates a new value of type new hint msga inside msg.
Instances
class (Parse t p, Allocate t) => EstimateAlloc t p where Source #
Types where the necessary allocation is inferrable from the parsed form.
...this is most types.
Minimal complete definition
Nothing
Methods
estimateAlloc :: p -> AllocHint t Source #
Determine the appropriate hint needed to allocate space for the serialied form of the value.
default estimateAlloc :: AllocHint t ~ () => p -> AllocHint t Source #
Instances
class Parse t p | t -> p, p -> t where Source #
Capnp types that can be parsed into a more "natural" Haskell form.
tis the capnproto type.pis the type of the parsed value.
Minimal complete definition
Methods
parse :: ReadCtx m 'Const => Raw 'Const t -> m p Source #
Parse a value from a constant message
encode :: RWCtx m s => Message ('Mut s) -> p -> m (Raw ('Mut s) t) Source #
Encode a value into Raw form, using the message as storage.
Instances
newFromRepr :: forall a r m s. (Allocate r, 'Ptr ('Just r) ~ ReprFor a, RWCtx m s) => AllocHint r -> Message ('Mut s) -> m (Raw ('Mut s) a) Source #
newTypedStruct :: forall a m s. (TypedStruct a, RWCtx m s) => Message ('Mut s) -> m (Raw ('Mut s) a) Source #
newTypedStructList :: forall a m s. (TypedStruct a, RWCtx m s) => Int -> Message ('Mut s) -> m (Raw ('Mut s) (List a)) Source #
Like newTypedStruct, but for lists.
structSizes :: forall a. TypedStruct a => (Word16, Word16) Source #
Get the maximum word and pointer counts needed for a struct type's fields.
newRoot :: forall a m s. (RWCtx m s, IsStruct a, Allocate a) => AllocHint a -> Message ('Mut s) -> m (Raw ('Mut s) a) Source #
Like new, but also sets the value as the root of the message.
readField :: forall k a b mut m. (IsStruct a, ReadCtx m mut) => Field k a b -> Raw mut a -> m (Raw mut b) Source #
Read the value of a field of a struct.
hasField :: (ReadCtx m mut, IsStruct a, IsPtr b) => Field 'Slot a b -> Raw mut a -> m Bool Source #
Return whether the specified field is present. Only applicable for pointer fields.
getField :: (IsStruct a, ReprFor b ~ 'Data sz, Parse b bp) => Field 'Slot a b -> Raw 'Const a -> bp Source #
Like readField, but:
- Doesn't need the monadic context; can be used in pure code.
- Only works for immutable values.
- Only works for fields in the struct's data section.
setField :: forall a b m s. (IsStruct a, RWCtx m s) => Field 'Slot a b -> Raw ('Mut s) b -> Raw ('Mut s) a -> m () Source #
Set a struct field to a value. Not usable for group fields.
newField :: forall a b m s. (IsStruct a, Allocate b, RWCtx m s) => Field 'Slot a b -> AllocHint b -> Raw ('Mut s) a -> m (Raw ('Mut s) b) Source #
Allocate space for the value of a field, and return it.
encodeField :: forall a b m s bp. (IsStruct a, Parse b bp, RWCtx m s) => Field 'Slot a b -> bp -> Raw ('Mut s) a -> m () Source #
Marshal a parsed value into a struct's field.
parseField :: (IsStruct a, Parse b bp, ReadCtx m 'Const) => Field k a b -> Raw 'Const a -> m bp Source #
parse a struct's field and return its parsed form.
setVariant :: forall a b m s. (HasUnion a, RWCtx m s) => Variant 'Slot a b -> Raw ('Mut s) a -> Raw ('Mut s) b -> m () Source #
Set the struct's anonymous union to the given variant, with the
supplied value as its argument. Not applicable for variants whose
argument is a group; use initVariant instead.
encodeVariant :: forall a b m s bp. (HasUnion a, Parse b bp, RWCtx m s) => Variant 'Slot a b -> bp -> Raw ('Mut s) a -> m () Source #
Set the struct's anonymous union to the given variant, marshalling
the supplied value into the message to be its argument. Not applicable
for variants whose argument is a group; use initVariant instead.
initVariant :: forall a b m s. (HasUnion a, RWCtx m s) => Variant 'Group a b -> Raw ('Mut s) a -> m (Raw ('Mut s) b) Source #
Set the struct's anonymous union to the given variant, returning
the variant's argument, which must be a group (for non-group fields,
use setVariant or encodeVariant.
structUnion :: HasUnion a => Raw mut a -> Raw mut (Which a) Source #
Get the anonymous union for a struct.
unionStruct :: HasUnion a => Raw mut (Which a) -> Raw mut a Source #
Get the struct enclosing an anonymous union.
structWhich :: forall a mut m. (ReadCtx m mut, HasUnion a) => Raw mut a -> m (RawWhich mut a) Source #
Get a non-opaque view on the struct's anonymous union, which can be used to pattern match on.
unionWhich :: forall a mut m. (ReadCtx m mut, HasUnion a) => Raw mut (Which a) -> m (RawWhich mut a) Source #
Get a non-opaque view on the anonymous union, which can be used to pattern match on.
msgToLBS :: Message 'Const -> ByteString Source #
Convert an immutable message to a lazy ByteString.
To convert a mutable message, freeze it first.
msgToBS :: Message 'Const -> ByteString Source #
Convert an immutable message to a strict ByteString.
To convert a mutable message, freeze it first.
msgToValue :: (MonadThrow m, MonadReadMessage mut (LimitT m), MonadReadMessage mut m, FromStruct mut a) => Message mut -> m a Source #
Convert a message to a value.
bsToMsg :: MonadThrow m => ByteString -> m (Message 'Const) Source #
Convert a strict ByteString to a message.
bsToValue :: (MonadThrow m, FromStruct 'Const a) => ByteString -> m a Source #
Convert a strict ByteString to a value.
lbsToMsg :: MonadThrow m => ByteString -> m (Message 'Const) Source #
Convert a lazy ByteString to a message.
lbsToValue :: (MonadThrow m, FromStruct 'Const a) => ByteString -> m a Source #
Convert a lazy ByteString to a value.
valueToBuilder :: (MonadLimit m, WriteCtx m s, Cerialize s a, ToStruct ('Mut s) (Cerial ('Mut s) a)) => a -> m Builder Source #
Convert a value to a Builder.
valueToBS :: (MonadLimit m, WriteCtx m s, Cerialize s a, ToStruct ('Mut s) (Cerial ('Mut s) a)) => a -> m ByteString Source #
Convert a value to a strict ByteString.
valueToLBS :: (MonadLimit m, WriteCtx m s, Cerialize s a, ToStruct ('Mut s) (Cerial ('Mut s) a)) => a -> m ByteString Source #
Convert a value to a lazy ByteString.
valueToMsg :: (MonadLimit m, WriteCtx m s, Cerialize s a, ToStruct ('Mut s) (Cerial ('Mut s) a)) => a -> m (Message ('Mut s)) Source #
Convert a value to a message.
msgToRaw :: forall a m mut. (ReadCtx m mut, IsStruct a) => Message mut -> m (Raw mut a) Source #
Get the root pointer of a message, wrapped as a Raw.
msgToParsed :: forall a m pa. (ReadCtx m 'Const, IsStruct a, Parse a pa) => Message 'Const -> m pa Source #
Get the root pointer of a message, as a parsed ADT.
parsedToRaw :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m (Raw ('Mut s) a) Source #
Serialize the parsed form of a struct into its Raw form, and make it the root
of its message.
parsedToMsg :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m (Message ('Mut s)) Source #
Serialize the parsed form of a struct into a message with that value as its root, returning the message.
parsedToBuilder :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m Builder Source #
Serialize the parsed form of a struct and return it as a Builder
parsedToLBS :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m ByteString Source #
Serialize the parsed form of a struct and return it as a lazy ByteString
parsedToBS :: forall a m pa s. (RWCtx m s, IsStruct a, Parse a pa) => pa -> m ByteString Source #
Serialize the parsed form of a struct and return it as a strict ByteString
hGetValue :: FromStruct 'Const a => Handle -> WordCount -> IO a Source #
reads a message from hGetValue limit handlehandle, returning its root object.
limit is used as both a cap on the size of a message which may be read and, for types
in the high-level API, the traversal limit when decoding the message.
It may throw a Error if there is a problem decoding the message,
or an IOError raised by the underlying IO libraries.
sGetMsg :: Socket -> WordCount -> IO (Message 'Const) Source #
Like hGetMsg, except that it takes a socket instead of a Handle.
hPutValue :: (Cerialize RealWorld a, ToStruct ('Mut RealWorld) (Cerial ('Mut RealWorld) a)) => Handle -> a -> IO () Source #
putValue :: (Cerialize RealWorld a, ToStruct ('Mut RealWorld) (Cerial ('Mut RealWorld) a)) => a -> IO () Source #
sPutValue :: (Cerialize RealWorld a, ToStruct ('Mut RealWorld) (Cerial ('Mut RealWorld) a)) => Socket -> a -> IO () Source #
hGetParsed :: forall a pa. (IsStruct a, Parse a pa) => Handle -> WordCount -> IO pa Source #
Read a struct from the handle in its parsed form, using the supplied read limit.
sGetParsed :: forall a pa. (IsStruct a, Parse a pa) => Socket -> WordCount -> IO pa Source #
Read a struct from the socket in its parsed form, using the supplied read limit.
getParsed :: (IsStruct a, Parse a pa) => WordCount -> IO pa Source #
Read a struct from stdin in its parsed form, using the supplied read limit.
hPutParsed :: (IsStruct a, Parse a pa) => Handle -> pa -> IO () Source #
Write the parsed form of a struct to the handle
putParsed :: (IsStruct a, Parse a pa) => pa -> IO () Source #
Write the parsed form of a struct to stdout
sPutParsed :: (IsStruct a, Parse a pa) => Socket -> pa -> IO () Source #
Write the parsed form of a struct to the socket.
hGetRaw :: IsStruct a => Handle -> WordCount -> IO (Raw 'Const a) Source #
Read a struct from the handle using the supplied read limit, and return its root pointer.
getRaw :: IsStruct a => WordCount -> IO (Raw 'Const a) Source #
Read a struct from stdin using the supplied read limit, and return its root pointer.
sGetRaw :: IsStruct a => Socket -> WordCount -> IO (Raw 'Const a) Source #
Read a struct from the socket using the supplied read limit, and return its root pointer.
Instances
| AsClient Client Source # | |
| Eq (Client a) Source # | |
| Show (Client a) Source # | |
| ReprFor a ~ 'Ptr ('Just 'Cap) => IsClient (Client a) Source # | |
| (TypeParam sturdyRef, TypeParam owner) => Parse (Persistent sturdyRef owner) (Client (Persistent sturdyRef owner)) Source # | |
Defined in Capnp.Gen.Capnp.Persistent.New | |
| (TypeParam internalRef, TypeParam externalRef, TypeParam internalOwner, TypeParam externalOwner) => Parse (RealmGateway internalRef externalRef internalOwner externalOwner) (Client (RealmGateway internalRef externalRef internalOwner externalOwner)) Source # | |
Defined in Capnp.Gen.Capnp.Persistent.New Methods parse :: ReadCtx m 'Const => Raw 'Const (RealmGateway internalRef externalRef internalOwner externalOwner) -> m (Client (RealmGateway internalRef externalRef internalOwner externalOwner)) Source # encode :: RWCtx m s => Message ('Mut s) -> Client (RealmGateway internalRef externalRef internalOwner externalOwner) -> m (Raw ('Mut s) (RealmGateway internalRef externalRef internalOwner externalOwner)) Source # | |
A is a reference to possibly-not-resolved result from
a method call.Pipeline a
class (IsCap c, IsStruct p, IsStruct r) => HasMethod (name :: Symbol) c p r | name c -> p r where Source #
An instance indicates that the interface
type HasMethod name c p rc has a method named name with parameter type p and
return type r. The generated code includes instances of this
for each method in the schema.
Methods
methodByLabel :: Method c p r Source #
Instances
| (TypeParam sturdyRef, TypeParam owner) => HasMethod "save" (Persistent sturdyRef owner) (Persistent'SaveParams sturdyRef owner) (Persistent'SaveResults sturdyRef owner) Source # | |
Defined in Capnp.Gen.Capnp.Persistent.New Methods methodByLabel :: Method (Persistent sturdyRef owner) (Persistent'SaveParams sturdyRef owner) (Persistent'SaveResults sturdyRef owner) Source # | |
| (TypeParam internalRef, TypeParam externalRef, TypeParam internalOwner, TypeParam externalOwner) => HasMethod "export" (RealmGateway internalRef externalRef internalOwner externalOwner) (RealmGateway'export'params internalRef externalRef internalOwner externalOwner) (Persistent'SaveResults externalRef externalOwner) Source # | |
Defined in Capnp.Gen.Capnp.Persistent.New Methods methodByLabel :: Method (RealmGateway internalRef externalRef internalOwner externalOwner) (RealmGateway'export'params internalRef externalRef internalOwner externalOwner) (Persistent'SaveResults externalRef externalOwner) Source # | |
| (TypeParam internalRef, TypeParam externalRef, TypeParam internalOwner, TypeParam externalOwner) => HasMethod "import_" (RealmGateway internalRef externalRef internalOwner externalOwner) (RealmGateway'import'params internalRef externalRef internalOwner externalOwner) (Persistent'SaveResults internalRef internalOwner) Source # | |
Defined in Capnp.Gen.Capnp.Persistent.New Methods methodByLabel :: Method (RealmGateway internalRef externalRef internalOwner externalOwner) (RealmGateway'import'params internalRef externalRef internalOwner externalOwner) (Persistent'SaveResults internalRef internalOwner) Source # | |
Represents a method on the interface type c with parameter
type p and return type r.
Constructors
| Method | |
Fields
| |
callB :: (AsClient f, IsCap c, IsStruct p, MonadSTM m) => Method c p r -> (forall s. PureBuilder s (Raw ('Mut s) p)) -> f c -> m (Pipeline r) Source #
Call a method. Use the provided PureBuilder to construct the parameters.
callR :: (AsClient f, IsCap c, IsStruct p, MonadSTM m) => Method c p r -> Raw 'Const p -> f c -> m (Pipeline r) Source #
Call a method, supplying the parameters as a Raw struct.
callP :: forall c p r f m pp. (AsClient f, IsCap c, IsStruct p, Parse p pp, MonadSTM m, MonadThrow m) => Method c p r -> pp -> f c -> m (Pipeline r) Source #
Call a method, supplying the parmaeters in parsed form.
pipe :: (IsStruct a, ReprFor b ~ 'Ptr pr) => Field k a b -> Pipeline a -> Pipeline b Source #
Project a pipeline to a struct onto one of its pointer fields.
waitPipeline :: forall a m pr. ('Ptr pr ~ ReprFor a, IsPtrRepr pr, MonadSTM m) => Pipeline a -> m (Raw 'Const a) Source #
Wait for the result of a pipeline, and return its value.
type TypeParam a = (IsPtr a, Parse a (Parsed a)) Source #
Constraints needed for a to be a capnproto type parameter.
type Parsed a = ParsedByRepr (ReprFor a) a Source #
is the high-level/ADT representation of the capnproto
type Parsed aa. For struct types this is equivalent to , but
we special case other types, such that e.g.
Parsed a = Parsed DataByteString.
Working with raw values
data Raw (mut :: Mutability) (a :: Type) Source #
A is an Raw mut aa embedded in a capnproto message with mutability
mut.
Instances
| ReprFor a ~ 'Ptr ('Just 'Struct) => ToStruct mut (Raw mut a) Source # | |
| ReprFor a ~ 'Ptr ('Just 'Struct) => FromStruct mut (Raw mut a) Source # | |
Defined in Capnp.Repr | |
| (IsPtrRepr r, ReprFor a ~ 'Ptr r) => ToPtr s (Raw ('Mut s) a) Source # | |
| (IsPtrRepr r, ReprFor a ~ 'Ptr r) => FromPtr mut (Raw mut a) Source # | |
| Eq (Untyped mut (ReprFor a)) => Eq (Raw mut a) Source # | |
| Read (Untyped mut (ReprFor a)) => Read (Raw mut a) Source # | |
| Show (Untyped mut (ReprFor a)) => Show (Raw mut a) Source # | |
| Generic (Untyped mut (ReprFor a)) => Generic (Raw mut a) Source # | |
| MessageDefault (Raw 'Const a) 'Const => Default (Raw 'Const a) Source # | |
Defined in Capnp.Repr | |
| MessageDefault (Untyped mut (ReprFor a)) mut => MessageDefault (Raw mut a) mut Source # | |
Defined in Capnp.Repr | |
| HasMessage (Untyped mut (ReprFor a)) mut => HasMessage (Raw mut a) mut Source # | |
| type Rep (Raw mut a) Source # | |
Defined in Capnp.Repr | |
Working with raw lists
A phantom type denoting capnproto lists of type a.
Instances
index :: forall a m mut. (ReadCtx m mut, Element (ReprFor a)) => Int -> Raw mut (List a) -> m (Raw mut a) Source #
gets the index i listith element of the list.
setIndex :: forall a m s. (RWCtx m s, Element (ReprFor a)) => Raw ('Mut s) a -> Int -> Raw ('Mut s) (List a) -> m () Source #
sets the setIndex value i listith element of list to value.
Working with fields
data Field (k :: FieldKind) a b Source #
is a first-class representation of a field of type Field k a bb within
an a, where a must be a struct type.
What sort of field is this? This corresponds to the slot/group variants
in the Field type in schema.capnp. Mostly used at the type level with
the DataKinds extension.
(Note that this has nothing to do with kinds in the usual type system sense of the word).
class IsStruct a => HasField (name :: Symbol) k a b | a name -> k b where Source #
An instance indicates that the struct type HasField name k a ba
has a field named name with type b (with k being the FieldKind for
the field). The generated code includes instances of this for each field
in the schema.
Methods
fieldByLabel :: Field k a b Source #
Instances
class IsStruct a => HasUnion a where Source #
An instance of HasUnion indicates that the given type is a capnproto struct
(or group) with an anonymous union.
Associated Types
Which is the abstract capnproto type of the union itself. Like
generated struct types (in this case a), this is typically
uninhabitied, and used to define instances and/or act as a phantom type.
data RawWhich (mut :: Mutability) a Source #
Concrete view into a union embedded in a message. This will be a sum
type with other Raw values as arguments.
Methods
unionField :: Field 'Slot a Word16 Source #
unionField is a field holding the union's tag.
internalWhich :: ReadCtx m mut => Word16 -> Raw mut a -> m (RawWhich mut a) Source #
Helper used in generated code to extract a RawWhich from its
surrounding struct.
Instances
class HasUnion a => HasVariant (name :: Symbol) k a b | a name -> k b where Source #
An instance 'HasVariant name k a b indicates that the struct type a
has an anonymous union with a variant named name, whose argument is of type
b.
Methods
variantByLabel :: Variant k a b Source #
Instances
Working with messages
data Message (mut :: Mutability) Source #
A Cap'n Proto message, parametrized over its mutability.
Instances
| Eq (Message mut) Source # | |
| Thaw (Message 'Const) Source # | |
Defined in Capnp.Message Methods thaw :: (PrimMonad m, PrimState m ~ s) => Message 'Const -> m (Mutable s (Message 'Const)) Source # freeze :: (PrimMonad m, PrimState m ~ s) => Mutable s (Message 'Const) -> m (Message 'Const) Source # unsafeThaw :: (PrimMonad m, PrimState m ~ s) => Message 'Const -> m (Mutable s (Message 'Const)) Source # unsafeFreeze :: (PrimMonad m, PrimState m ~ s) => Mutable s (Message 'Const) -> m (Message 'Const) Source # | |
| type Mutable s (Message 'Const) Source # | |
data Segment (mut :: Mutability) Source #
A segment in a Cap'n Proto message.
Instances
| Eq (Segment mut) Source # | |
| Thaw (Segment 'Const) Source # | |
Defined in Capnp.Message Methods thaw :: (PrimMonad m, PrimState m ~ s) => Segment 'Const -> m (Mutable s (Segment 'Const)) Source # freeze :: (PrimMonad m, PrimState m ~ s) => Mutable s (Segment 'Const) -> m (Segment 'Const) Source # unsafeThaw :: (PrimMonad m, PrimState m ~ s) => Segment 'Const -> m (Mutable s (Segment 'Const)) Source # unsafeFreeze :: (PrimMonad m, PrimState m ~ s) => Mutable s (Segment 'Const) -> m (Segment 'Const) Source # | |
| type Mutable s (Segment 'Const) Source # | |
data Mutability Source #
Mutability is used as a type parameter (with the DataKinds extension)
to indicate the mutability of some values in this library; Const denotes
an immutable value, while denotes a value that can be mutated
in the scope of the state token Mut ss.
class Monad m => MonadReadMessage mut m where Source #
A Message is a (possibly read-only) capnproto message. It is
parameterized over a monad in which operations are performed.
Methods
numSegs :: Message mut -> m Int Source #
numSegs gets the number of segments in a message.
numWords :: Segment mut -> m WordCount Source #
numWords gets the number of words in a segment.
numCaps :: Message mut -> m Int Source #
numCaps gets the number of capabilities in a message's capability
table.
internalGetSeg :: Message mut -> Int -> m (Segment mut) Source #
gets the segment at index internalGetSeg message indexindex
in message. Most callers should use the getSegment wrapper, instead
of calling this directly.
internalGetCap :: Message mut -> Int -> m Client Source #
reads a capability from the message's
capability table, returning the client. does not check bounds. Callers
should use getCap instead.internalGetCap cap index
slice :: WordCount -> WordCount -> Segment mut -> m (Segment mut) Source #
extracts a sub-section of the segment,
starting at index slice start length segmentstart, of length length.
Instances
| Monad m => MonadReadMessage 'Const m Source # | |
Defined in Capnp.Message Methods numSegs :: Message 'Const -> m Int Source # numWords :: Segment 'Const -> m WordCount Source # numCaps :: Message 'Const -> m Int Source # internalGetSeg :: Message 'Const -> Int -> m (Segment 'Const) Source # internalGetCap :: Message 'Const -> Int -> m Client Source # slice :: WordCount -> WordCount -> Segment 'Const -> m (Segment 'Const) Source # | |
| (PrimMonad m, s ~ PrimState m) => MonadReadMessage ('Mut s) m Source # | |
Defined in Capnp.Message Methods numSegs :: Message ('Mut s) -> m Int Source # numWords :: Segment ('Mut s) -> m WordCount Source # numCaps :: Message ('Mut s) -> m Int Source # internalGetSeg :: Message ('Mut s) -> Int -> m (Segment ('Mut s)) Source # internalGetCap :: Message ('Mut s) -> Int -> m Client Source # slice :: WordCount -> WordCount -> Segment ('Mut s) -> m (Segment ('Mut s)) Source # | |
newMessage :: WriteCtx m s => Maybe WordCount -> m (Message ('Mut s)) Source #
allocates a new empty message, with a single segment
having capacity newMessage sizeHintsizeHint. If sizeHint is Nothing, defaults to a sensible
value.
fromByteString :: ByteString -> Segment 'Const Source #
Convert a ByteString to a segment. O(1)
toByteString :: Segment 'Const -> ByteString Source #
Convert a segment to a byte string. O(1)
Building messages in pure code
data PureBuilder s a Source #
PureBuilder is a monad transformer stack with the instnaces needed
manipulate mutable messages. is morally equivalent
to PureBuilder s aLimitT (CatchT (ST s)) a
Instances
createPure :: (MonadThrow m, Thaw a) => WordCount -> (forall s. PureBuilder s (Mutable s a)) -> m a Source #
creates a capnproto value in pure code according
to createPure limit mm, then freezes it without copying. If m calls throwM then
createPure rethrows the exception in the specified monad.