use facet::Facet;
#[derive(Debug, Clone, PartialEq, Eq, Facet)]
#[repr(u8)]
pub enum CloseReason {
Normal,
Error(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Facet)]
#[repr(u8)]
pub enum CancelReason {
ClientCancel,
DeadlineExceeded,
ResourceExhausted,
}
#[derive(Debug, Clone, Facet)]
#[repr(u8)]
pub enum ControlPayload {
OpenChannel {
channel_id: u32,
service_name: String,
method_name: String,
metadata: Vec<(String, Vec<u8>)>,
},
CloseChannel {
channel_id: u32,
reason: CloseReason,
},
CancelChannel {
channel_id: u32,
reason: CancelReason,
},
GrantCredits { channel_id: u32, bytes: u32 },
Ping { payload: [u8; 8] },
Pong { payload: [u8; 8] },
}
pub mod control_method {
pub const OPEN_CHANNEL: u32 = 1;
pub const CLOSE_CHANNEL: u32 = 2;
pub const CANCEL_CHANNEL: u32 = 3;
pub const GRANT_CREDITS: u32 = 4;
pub const PING: u32 = 5;
pub const PONG: u32 = 6;
}