use ocapn_syrup::Value;
use crate::crypto::{PublicKey, Signature};
use crate::locator::Peer;
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>,
}
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,
}