use std::error::Error;
use std::sync::Arc;
use crate::context::IExpressionContext;
use crate::util::Utf16String;
use super::{StandardExpressionExecutionContext, TemplateValue};
pub type StandardExpressionError = Box<dyn Error + Send + Sync>;
pub type StandardExpressionResult<T> = Result<T, StandardExpressionError>;
pub trait IStandardExpression: Send + Sync {
fn get_string_representation(&self) -> StandardExpressionResult<Utf16String>;
fn execute(
&self,
context: &dyn IExpressionContext,
) -> StandardExpressionResult<Option<Arc<TemplateValue>>> {
self.execute_with_context(context, StandardExpressionExecutionContext::NORMAL)
}
fn execute_with_context(
&self,
context: &dyn IExpressionContext,
expression_context: &'static StandardExpressionExecutionContext,
) -> StandardExpressionResult<Option<Arc<TemplateValue>>>;
fn execute_raw(
&self,
context: &dyn IExpressionContext,
expression_context: &'static StandardExpressionExecutionContext,
) -> StandardExpressionResult<Option<Arc<TemplateValue>>> {
self.execute_with_context(context, expression_context)
}
fn is_complex(&self) -> bool {
false
}
fn is_token_expression(&self) -> bool {
false
}
fn is_number_token_expression(&self) -> bool {
false
}
fn is_boolean_token_expression(&self) -> bool {
false
}
fn is_generic_token_expression(&self) -> bool {
false
}
fn is_text_literal_expression(&self) -> bool {
false
}
fn is_fragment_expression(&self) -> bool {
false
}
fn as_fragment_expression(&self) -> Option<&super::FragmentExpression> {
None
}
}