use std::collections::HashMap;
use bytes::Bytes;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MooVerb {
Request,
Continue,
Complete,
}
impl MooVerb {
pub fn as_str(&self) -> &'static str {
match self {
MooVerb::Request => "REQUEST",
MooVerb::Continue => "CONTINUE",
MooVerb::Complete => "COMPLETE",
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum MooBody {
Json(serde_json::Value),
Binary(Bytes),
}
#[derive(Debug, Clone)]
pub struct MooMessage {
pub verb: MooVerb,
pub name: String,
pub request_id: u32,
pub headers: HashMap<String, String>,
pub body: Option<MooBody>,
}
impl MooMessage {
pub fn service(&self) -> Option<&str> {
if self.verb != MooVerb::Request {
return None;
}
self.name.rfind('/').map(|i| &self.name[..i])
}
pub fn method(&self) -> Option<&str> {
if self.verb != MooVerb::Request {
return None;
}
self.name.rfind('/').map(|i| &self.name[i + 1..])
}
pub fn json_body(&self) -> Option<&serde_json::Value> {
match &self.body {
Some(MooBody::Json(v)) => Some(v),
_ => None,
}
}
}