MsgReader

Struct MsgReader 

Source
pub struct MsgReader<'s, T: FromPointerReader<'s>> { /* private fields */ }
Expand description

A utility type to read capnproto message types

Implementations§

Source§

impl<'s, T: FromPointerReader<'s>> MsgReader<'s, T>

Source

pub fn new(buf: Vec<u8>) -> Result<Self>

Parse a message buffer into a set of owned segments

Source

pub fn get_root(&'s self) -> Result<T>

Get the root object from this reader, if it exists

This function returns a reference to the inner reader for you. Because the way this trait is implemented, the parent can’t go out of scope.

To get access to the fields of a type, you need to type-cast it as a T::Reader, so to read a service type (such as the one provided by this sdk crate), you would cast it as service::Reader.

use qrpc_sdk::{parser::MsgReader, types::service};

let msg = MsgReader::new(buf)?;
let r: service::Reader = msg.get_root()?;
println!("DESC: {}", r.get_description()?);

Some types will be capability sets, encoded in an unnamed union. Because this is a very common pattern, here is an example usage of how to implement matching for the types defined in this crate.

use qrpc_sdk::{parser::MsgReader, error::RpcError, rpc::capabilities::{Reader, Which}};

// Get the `reader` by calling `builders::parse_rpc_msg(...)`
let r: Reader = reader.get_root().unwrap();
match r.which() {
    Ok(Which::Register(Ok(reg))) => handle_register(reg),
    Ok(Which::Unregister(Ok(unreg))) => handle_unregister(unreg),
    Ok(Which::Upgrade(Ok(upgr))) => handle_upgrade(upgr),
    _ => eprintln!("Invalid variant/ decode!"),
}

use qrpc_sdk::rpc::{register, unregister, upgrade};

fn handle_register(_: register::Reader) { /* ... */}
fn handle_unregister(_: unregister::Reader) { /* ... */}
fn handle_upgrade(_: upgrade::Reader) { /* ... */}

The above code can be found in the qrpc-broker crate. Your own service code will differ, but this should give you a good idea how to start!

Auto Trait Implementations§

§

impl<'s, T> !Freeze for MsgReader<'s, T>

§

impl<'s, T> !RefUnwindSafe for MsgReader<'s, T>

§

impl<'s, T> Send for MsgReader<'s, T>
where T: Sync,

§

impl<'s, T> !Sync for MsgReader<'s, T>

§

impl<'s, T> Unpin for MsgReader<'s, T>

§

impl<'s, T> UnwindSafe for MsgReader<'s, T>
where T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more