offset icon indicating copy to clipboard operation
offset copied to clipboard

capnp_conv review + cleanup

Open realcr opened this issue 5 years ago • 1 comments

Help required

capnp-conv was written very hastily, and some help is required with improving the code:

  • [ ] Code review + refactoring suggestions
  • [ ] A more extensive test suite, possibly using Quickcheck or proptest. I'm not sure which one to pick.
  • [ ] Better error messages
    • [ ] Marking the correct span when an error occurs.
    • [ ] Providing extra information in unimplemented!() calls.
  • [ ] Extra documentation

What is capnp_conv

capnp_conv is a procedural macro mechanism allowing to automatically derive capnproto serialization and deserialization glue code between Rust structs and capnp structs.

Example for usage (From offst-proto):

#[capnp_conv(crate::funder_capnp::request_send_funds_op)]
#[derive(Eq, PartialEq, Debug, Clone, Serialize, Deserialize)]
pub struct RequestSendFundsOp {
    pub request_id: Uid,
    pub src_hashed_lock: HashedLock,
    pub route: FriendsRoute,
    #[capnp_conv(with = Wrapper<u128>)]
    pub dest_payment: u128,
    #[capnp_conv(with = Wrapper<u128>)]
    pub total_dest_payment: u128,
    pub invoice_id: InvoiceId,
    #[capnp_conv(with = Wrapper<u128>)]
    pub left_fees: u128,
}

The user can then invoke: request_send_funds.to_capnp_bytes() or RequestSendFunds::from_capnp_bytes(...)

The design of capnp_conv is inspired by proto_conv.

capnp_conv is currently being used through the whole Offst codebase, mostly in offst-proto.

realcr avatar Jul 16 '19 13:07 realcr

@pzmarzly : Do you want to take this issue? (Requires some familiarity with procedural macros)

realcr avatar Jul 16 '19 13:07 realcr