use serde::{de::DeserializeOwned, ser::Serialize};
use crate::response::Response;
use crate::serialization::serialize;
mod code;
mod message;
pub use self::code::CommandCode;
pub(crate) use self::message::CommandMessage;
pub const MAX_MSG_SIZE: usize = 2048;
pub(crate) trait Command: Serialize + DeserializeOwned + Sized {
type ResponseType: Response;
const COMMAND_CODE: CommandCode = Self::ResponseType::COMMAND_CODE;
}
impl<C: Command> From<C> for CommandMessage {
fn from(command: C) -> CommandMessage {
Self::create(C::COMMAND_CODE, serialize(&command).unwrap()).unwrap()
}
}