Starting a type casting trait

master
Tom Alexander 4 years ago
parent 11096d7ece
commit 9eb70f436c
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

@ -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<IceResult<'a>> {
todo!()
}
}
impl CompareContextElement for serde_json::Value {
fn equals(&self, other: &dyn ContextElement) -> bool {
// Handle other serde_json::Value

@ -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<IceResult<'a>>;
}
pub trait CastToAny {
fn to_any(&self) -> &dyn Any;
}

@ -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;

@ -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<IceResult<'a>> {
todo!()
}
}
impl CompareContextElement for OwnedLiteral {
fn equals(&self, other: &dyn ContextElement) -> bool {
// If its an OwnedLiteral then compare them directly,

@ -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,

Loading…
Cancel
Save