use crate::{Result, calculate_type_hash};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MessageTypeName {
pub message_type: String,
pub package: String,
pub type_name: String,
}
impl MessageTypeName {
pub fn new(
message_type: impl Into<String>,
package: impl Into<String>,
type_name: impl Into<String>,
) -> Self {
Self {
message_type: message_type.into(),
package: package.into(),
type_name: type_name.into(),
}
}
pub fn full_name(&self) -> String {
format!("{}/{}/{}", self.package, self.message_type, self.type_name)
}
}
pub trait TypeDescription {
fn type_description() -> crate::types::TypeDescriptionMsg;
fn message_type_name() -> MessageTypeName;
fn compute_hash() -> Result<String> {
let description = Self::type_description();
calculate_type_hash(&description)
}
}
pub trait ServiceTypeDescription {
fn type_description() -> crate::types::TypeDescriptionMsg;
fn service_type_name() -> MessageTypeName;
fn compute_hash() -> Result<String> {
let description = Self::type_description();
calculate_type_hash(&description)
}
}
pub trait ActionTypeDescription {
fn type_description() -> crate::types::TypeDescriptionMsg;
fn action_type_name() -> MessageTypeName;
fn compute_hash() -> Result<String> {
let description = Self::type_description();
calculate_type_hash(&description)
}
}