ocapn-netlayer 0.1.4

OCapN transport layer interfaces and types
Documentation
use ocapn_syrup::Value;

use crate::crypto::{PublicKey, Signature};
use crate::locator::Peer;

// TODO: implement From<T> for Value, for all these; implement Serializer from that From
// TODO: is there a way to "impl Serializer for From<T>" because it's a lotta boilerplate?

pub struct StartSession {
    pub captp_version: String,
    pub session_pubkey: PublicKey,
    pub acceptable_location: Peer,
    pub acceptable_location_sig: Signature,
}

pub struct Abort {
    pub reason: String,
}

pub struct DeliverOnly<T: ObjectArgs> {
    pub to_desc: Descriptor,
    pub args: ObjectMethod<T>,
    // TODO: what goes in here?
}

pub struct Deliver<T: ObjectArgs> {
    pub to_desc: Descriptor,
    pub args: ObjectMethod<T>,
    pub answer_pos: Option<u32>,
    pub resolve_me_desc: Descriptor,
}

pub struct Listen {
    pub to_desc: Descriptor,
    pub listen_desc: Descriptor,
    pub wants_partial: bool,
}

pub enum Descriptor {
    ImportObject(u32),
    ImportPromise(u32),
    Export(u32),
}

pub struct ObjectMethod<T: ObjectArgs> {
    pub name: String,
    pub args: T,
}

pub trait ObjectArgs: Into<Vec<Value>> {}

pub struct GcExport {
    pub export_pos: u32,
    pub wire_delta: u32,
}