use std::any::TypeId;
use std::sync::Arc;
use crate::context::ITemplateContext;
use crate::expression::TemplateValue;
use crate::util::Utf16String;
use super::MessageResolutionResult;
pub trait IMessageResolver: Send + Sync {
fn get_name(&self) -> Option<&Utf16String>;
fn get_order(&self) -> Option<i32>;
fn resolve_message_nullable(
&self,
context: Option<&dyn ITemplateContext>,
origin: Option<TypeId>,
key: Option<&Utf16String>,
message_parameters: Option<&[Option<Arc<TemplateValue>>]>,
) -> MessageResolutionResult<Option<Utf16String>>;
fn resolve_message(
&self,
context: &dyn ITemplateContext,
origin: Option<TypeId>,
key: &Utf16String,
message_parameters: Option<&[Option<Arc<TemplateValue>>]>,
) -> MessageResolutionResult<Option<Utf16String>> {
self.resolve_message_nullable(Some(context), origin, Some(key), message_parameters)
}
fn create_absent_message_representation_nullable(
&self,
context: Option<&dyn ITemplateContext>,
origin: Option<TypeId>,
key: Option<&Utf16String>,
message_parameters: Option<&[Option<Arc<TemplateValue>>]>,
) -> MessageResolutionResult<Option<Utf16String>>;
fn create_absent_message_representation(
&self,
context: &dyn ITemplateContext,
origin: Option<TypeId>,
key: &Utf16String,
message_parameters: Option<&[Option<Arc<TemplateValue>>]>,
) -> MessageResolutionResult<Option<Utf16String>> {
self.create_absent_message_representation_nullable(
Some(context),
origin,
Some(key),
message_parameters,
)
}
}