use crate::data::{ConfigurationReg, LuoshuSyncDataEnum};
use crate::error::LuoshuResult;
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter};
use super::LuoshuDataEnum;
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq, Hash)]
pub struct Subscribe {
pub(crate) namespace: String,
pub(crate) name: String,
}
impl Subscribe {
pub fn new(namespace: String, name: String) -> Self {
Self { namespace, name }
}
}
impl From<&ConfigurationReg> for Subscribe {
fn from(config: &ConfigurationReg) -> Self {
Self {
namespace: config.get_namespace(),
name: config.name.clone(),
}
}
}
impl Display for Subscribe {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}|{}", self.namespace, self.name)
}
}
#[derive(Clone, Serialize, Deserialize, Debug)]
pub enum ActionEnum {
Up(LuoshuDataEnum),
Down(LuoshuDataEnum),
Sync(LuoshuSyncDataEnum),
Subscribe(Subscribe),
Ping,
Pong,
}
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct Frame {
pub data: ActionEnum,
}
impl From<ActionEnum> for Frame {
fn from(data: ActionEnum) -> Self {
Self { data }
}
}
#[allow(dead_code)]
impl Frame {
pub fn parse(src: &[u8]) -> LuoshuResult<Frame> {
serde_json::from_slice(src).map_err(|e| e.into())
}
}