#receive #macro-derive #wrpc #transport #encode #build #wrpc-transport-derive

macro wrpc-transport-derive-macro

Inner crate of wrpc-transport-derive that contains the macro for deriving wrpc_transport::{EncodeSync, Decode}

1 unstable release

0.1.0 Mar 27, 2024

#27 in #wrpc


Used in 2 crates (via wrpc-transport-derive)

Apache-2.0

33KB
541 lines

This crate contains derive macros that enable Rust types to derive wrpc_transport::Encode and wrpc_transport::Receive traits.

This crate is intended to be used via wrpc-transport-derive, the umbrella crate which hosts dependencies required by this (internal) macro crate.

Example

use wrpc_transport_derive::{Encode, Receive};

#[derive(Trace, PartialEq, Eq, Encode, Receive, Default)]
struct TestStruct {
    one: u32,
}

let mut buffer: Vec<u8> = Vec::new();
// Encode the TestStruct
TestStruct { one: 1 }
    .encode(&mut buffer)
    .await
    .context("failed to perform encode")?;

// Attempt to receive the value
let (received, leftover): (TestStruct, _) =
    Receive::receive_sync(Bytes::from(buffer), &mut empty())
        .await
        .context("failed to receive")?;

// At this point, we expect the received bytes to be exactly the same as what we started with
assert_eq!(received, TestStruct { one: 1 }, "received matches");
assert_eq!(leftover.remaining(), 0, "payload was completely consumed");

NOTE: This macro crate uses tracing, so if you'd like to see the input & output tokens, prepend your command (ex. cargo build) with RUST_LOG=trace.

Dependencies

~7MB
~112K SLoC