use crate::entity::{TypeHash, TypeInfo};
pub trait MessageTypeInfo {
fn type_name() -> &'static str;
fn type_hash() -> TypeHash;
fn type_info() -> TypeInfo {
TypeInfo::new(Self::type_name(), Self::type_hash())
}
fn package_name() -> &'static str {
Self::type_name().split("::").next().unwrap_or("unknown")
}
fn is_fixed_size() -> bool {
false
}
fn message_schema() -> Option<std::sync::Arc<crate::dynamic::MessageSchema>> {
None
}
fn type_name_dyn(&self) -> String {
Self::type_name().to_string()
}
fn type_hash_dyn(&self) -> TypeHash {
Self::type_hash()
}
fn type_info_dyn(&self) -> TypeInfo {
TypeInfo::new(&self.type_name_dyn(), self.type_hash_dyn())
}
fn package_name_dyn(&self) -> String {
self.type_name_dyn()
.split("::")
.next()
.unwrap_or("unknown")
.to_string()
}
}
pub trait WithTypeInfo: MessageTypeInfo {}
pub trait ServiceTypeInfo {
fn service_type_info() -> TypeInfo;
fn service_type_info_dyn(&self) -> TypeInfo {
Self::service_type_info()
}
}
pub trait ActionTypeInfo {
fn action_type_info() -> TypeInfo;
fn action_type_info_dyn(&self) -> TypeInfo {
Self::action_type_info()
}
}
pub mod srv {
use crate::msg::{ZMessage, ZService};
#[allow(non_snake_case)]
pub mod AddTwoInts {
use serde::{Deserialize, Serialize};
pub type Service = (Request, Response);
#[derive(Debug, Serialize, Deserialize, Default, Clone)]
pub struct Request {
pub a: i64,
pub b: i64,
}
#[derive(Debug, Serialize, Deserialize, Default, Clone)]
pub struct Response {
pub sum: i64,
}
}
pub enum ZSrv<L, R> {
L(L),
R(R),
}
impl<RQ: ZMessage, RP: ZMessage> ZService for ZSrv<RQ, RP> {
type Request = RQ;
type Response = RP;
}
impl<RQ: ZMessage, RP: ZMessage> ZService for (RQ, RP) {
type Request = RQ;
type Response = RP;
}
}