#[non_exhaustive]
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MessageType {
Ping = 0x01,
SearchQuery = 0x02,
SearchResult = 0x03,
AiToken = 0x04,
Cancel = 0x05,
AgentTaskStart = 0x10,
AgentTaskEvent = 0x11,
AgentTaskDone = 0x12,
}
bitflags::bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct FrameFlags: u8 {
const STREAM = 0b0000_0001;
const FINAL = 0b0000_0010;
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct RequestId(pub u64);
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ProtocolErrorKind {
InvalidMagic,
UnsupportedVersion,
MalformedFrame,
PayloadTooLarge,
UnknownMessageType,
InternalError,
}
impl TryFrom<u8> for MessageType {
type Error = ();
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
0x01 => Ok(MessageType::Ping),
0x02 => Ok(MessageType::SearchQuery),
0x03 => Ok(MessageType::SearchResult),
0x04 => Ok(MessageType::AiToken),
0x05 => Ok(MessageType::Cancel),
0x10 => Ok(MessageType::AgentTaskStart),
0x11 => Ok(MessageType::AgentTaskEvent),
0x12 => Ok(MessageType::AgentTaskDone),
_ => Err(()),
}
}
}