diff --git a/src/bin.rs b/src/bin.rs index 8401cbd..5c36944 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -5,6 +5,7 @@ use parser::Filter; use parser::OwnedLiteral; use parser::Template; use renderer::compile_template; +use renderer::Castable; use renderer::CompileError; use renderer::ContextElement; use renderer::DustRenderer; @@ -312,6 +313,12 @@ impl Loopable for serde_json::Value { } } +impl Castable for serde_json::Value { + fn cast_to_type<'a>(&'a self, target: &str) -> Option> { + todo!() + } +} + impl CompareContextElement for serde_json::Value { fn equals(&self, other: &dyn ContextElement) -> bool { // Handle other serde_json::Value diff --git a/src/renderer/context_element.rs b/src/renderer/context_element.rs index 5ef6e3c..7edd71d 100644 --- a/src/renderer/context_element.rs +++ b/src/renderer/context_element.rs @@ -17,6 +17,7 @@ pub trait ContextElement: + CompareContextElement + FromContextElement + IntoRcIce + + Castable { } @@ -54,6 +55,10 @@ pub trait Loopable { fn get_loop_elements(&self) -> Vec<&dyn ContextElement>; } +pub trait Castable { + fn cast_to_type<'a>(&'a self, target: &str) -> Option>; +} + pub trait CastToAny { fn to_any(&self) -> &dyn Any; } diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index cf5ec08..571a02b 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -11,6 +11,7 @@ mod renderer; mod select_context; mod walking; +pub use context_element::Castable; pub use context_element::CompareContextElement; pub use context_element::ContextElement; pub use context_element::IceResult; diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index 23b720d..026cf68 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -9,6 +9,7 @@ use crate::renderer::context_element::IceResult; use crate::renderer::context_element::IntoContextElement; use crate::renderer::math::MathNumber; use crate::renderer::walking::walk_path; +use crate::renderer::Castable; use crate::renderer::DustRenderer; use crate::renderer::Loopable; use crate::renderer::RenderError; @@ -167,6 +168,12 @@ impl Walkable for OwnedLiteral { } } +impl Castable for OwnedLiteral { + fn cast_to_type<'a>(&'a self, target: &str) -> Option> { + todo!() + } +} + impl CompareContextElement for OwnedLiteral { fn equals(&self, other: &dyn ContextElement) -> bool { // If its an OwnedLiteral then compare them directly, diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index aae1fd0..e282791 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -964,6 +964,13 @@ impl<'a> DustRenderer<'a> { .map(|ice| ice.get_context_element_reference()) }); + // TODO convert string to number or render NaN + + println!( + "Doing {:?} {:?} {:?}", + left_side, method_rendered, right_side + ); + return match method_rendered.as_str() { "add" => match (left_side_ce, right_side_ce) { (None, _) | (Some(Err(_)), _) | (_, None) | (_, Some(Err(_))) => None,