Add a Loopable trait for dust sections.
This commit is contained in:
32
src/bin.rs
32
src/bin.rs
@@ -5,6 +5,7 @@ use renderer::compile_template;
|
||||
use renderer::CompiledTemplate;
|
||||
use renderer::ContextElement;
|
||||
use renderer::DustRenderer;
|
||||
use renderer::Loopable;
|
||||
use renderer::RenderError;
|
||||
use renderer::Renderable;
|
||||
use renderer::Walkable;
|
||||
@@ -123,3 +124,34 @@ impl Walkable for serde_json::Value {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Loopable for serde_json::Value {
|
||||
fn get_loop_elements(&self) -> Result<Vec<&dyn ContextElement>, RenderError> {
|
||||
match self {
|
||||
serde_json::Value::Null => Ok(Vec::new()),
|
||||
serde_json::Value::Bool(boolean) => {
|
||||
if *boolean {
|
||||
Ok(vec![self])
|
||||
} else {
|
||||
Ok(Vec::new())
|
||||
}
|
||||
}
|
||||
serde_json::Value::Number(_num) => Ok(vec![self]),
|
||||
serde_json::Value::String(string_value) => {
|
||||
if string_value.is_empty() {
|
||||
Ok(Vec::new())
|
||||
} else {
|
||||
Ok(vec![self])
|
||||
}
|
||||
}
|
||||
serde_json::Value::Array(array_value) => {
|
||||
if array_value.is_empty() {
|
||||
Ok(Vec::new())
|
||||
} else {
|
||||
Ok(array_value.iter().map(|x| x as _).collect())
|
||||
}
|
||||
}
|
||||
serde_json::Value::Object(_obj) => Ok(vec![self]),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user