pub trait IDialect: std::any::Any + Send + Sync {
fn class_name(&self) -> &'static str {
std::any::type_name::<Self>()
}
fn dialect_type_id(&self) -> std::any::TypeId {
std::any::Any::type_id(self)
}
fn is_standard_dialect(&self) -> bool {
false
}
fn as_processor_dialect(&self) -> Option<&dyn super::IProcessorDialect> {
None
}
fn as_execution_attribute_dialect(&self) -> Option<&dyn super::IExecutionAttributeDialect> {
None
}
fn as_expression_object_dialect(&self) -> Option<&dyn super::IExpressionObjectDialect> {
None
}
fn as_pre_processor_dialect(&self) -> Option<&dyn super::IPreProcessorDialect> {
None
}
fn as_post_processor_dialect(&self) -> Option<&dyn super::IPostProcessorDialect> {
None
}
fn get_name(&self) -> Option<&str>;
}
#[cfg(test)]
mod tests {
use super::IDialect;
struct NullableNameDialect;
impl IDialect for NullableNameDialect {
fn get_name(&self) -> Option<&str> {
None
}
}
#[test]
fn custom_dialect_can_preserve_a_java_null_name() {
let dialect = NullableNameDialect;
assert_eq!(dialect.get_name(), None);
}
}