use bson::Bson;
use serde::{Deserialize, Serialize, de, ser::SerializeMap};
use super::Method;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Notification {
Start,
Stop,
Quit,
}
impl Notification {
pub fn method(&self) -> Method {
match self {
Notification::Start => Method::Start,
Notification::Stop => Method::Stop,
Notification::Quit => Method::Quit,
}
}
pub(super) fn serialize_params<M: SerializeMap>(&self, _map: &mut M) -> Result<(), M::Error> {
match self {
Notification::Start | Notification::Stop | Notification::Quit => Ok(()),
}
}
pub(super) fn from_params<E: de::Error>(method: Method, _params: Bson) -> Result<Self, E> {
match method {
Method::Start => Ok(Notification::Start),
Method::Stop => Ok(Notification::Stop),
Method::Quit => Ok(Notification::Quit),
_ => Err(E::custom(format!("{method} is a request and needs an id"))),
}
}
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Start;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Stop;
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Quit;