diff --git a/js/test_cases/not_exists/input1.json b/js/test_cases/not_exists/input1.json new file mode 100644 index 0000000..69197e0 --- /dev/null +++ b/js/test_cases/not_exists/input1.json @@ -0,0 +1 @@ +{"things": ["Alice", "Bob", "Chris"]} diff --git a/js/test_cases/not_exists/input10.json b/js/test_cases/not_exists/input10.json new file mode 100644 index 0000000..08f519d --- /dev/null +++ b/js/test_cases/not_exists/input10.json @@ -0,0 +1 @@ +{"things": {}} diff --git a/js/test_cases/not_exists/input11.json b/js/test_cases/not_exists/input11.json new file mode 100644 index 0000000..b9ee8db --- /dev/null +++ b/js/test_cases/not_exists/input11.json @@ -0,0 +1 @@ +["cat", "dog"] diff --git a/js/test_cases/not_exists/input2.json b/js/test_cases/not_exists/input2.json new file mode 100644 index 0000000..4743329 --- /dev/null +++ b/js/test_cases/not_exists/input2.json @@ -0,0 +1 @@ +{"things": {"name": "Alice", "keyboard": "K-Type"}} diff --git a/js/test_cases/not_exists/input3.json b/js/test_cases/not_exists/input3.json new file mode 100644 index 0000000..8040d63 --- /dev/null +++ b/js/test_cases/not_exists/input3.json @@ -0,0 +1 @@ +{"there_are_no_things": 4} diff --git a/js/test_cases/not_exists/input4.json b/js/test_cases/not_exists/input4.json new file mode 100644 index 0000000..03d1e8a --- /dev/null +++ b/js/test_cases/not_exists/input4.json @@ -0,0 +1 @@ +{"things": "just a string"} diff --git a/js/test_cases/not_exists/input5.json b/js/test_cases/not_exists/input5.json new file mode 100644 index 0000000..4ef7571 --- /dev/null +++ b/js/test_cases/not_exists/input5.json @@ -0,0 +1 @@ +{"things": false} diff --git a/js/test_cases/not_exists/input6.json b/js/test_cases/not_exists/input6.json new file mode 100644 index 0000000..feb65c6 --- /dev/null +++ b/js/test_cases/not_exists/input6.json @@ -0,0 +1 @@ +{"things": null} diff --git a/js/test_cases/not_exists/input7.json b/js/test_cases/not_exists/input7.json new file mode 100644 index 0000000..d9fc4f8 --- /dev/null +++ b/js/test_cases/not_exists/input7.json @@ -0,0 +1 @@ +{"things": 0} diff --git a/js/test_cases/not_exists/input8.json b/js/test_cases/not_exists/input8.json new file mode 100644 index 0000000..1486a8a --- /dev/null +++ b/js/test_cases/not_exists/input8.json @@ -0,0 +1 @@ +{"things": ""} diff --git a/js/test_cases/not_exists/input9.json b/js/test_cases/not_exists/input9.json new file mode 100644 index 0000000..93babc6 --- /dev/null +++ b/js/test_cases/not_exists/input9.json @@ -0,0 +1 @@ +{"things": []} diff --git a/js/test_cases/not_exists/main.dust b/js/test_cases/not_exists/main.dust new file mode 100644 index 0000000..bea33c4 --- /dev/null +++ b/js/test_cases/not_exists/main.dust @@ -0,0 +1,5 @@ +{^things} +Thing: {things} +{:else} +No things {.} +{/things} diff --git a/js/test_cases/render_unusual_types/input6.json b/js/test_cases/render_unusual_types/input6.json new file mode 100644 index 0000000..329afc2 --- /dev/null +++ b/js/test_cases/render_unusual_types/input6.json @@ -0,0 +1 @@ +{"name": false} diff --git a/js/test_cases/render_unusual_types/input7.json b/js/test_cases/render_unusual_types/input7.json new file mode 100644 index 0000000..0ab5773 --- /dev/null +++ b/js/test_cases/render_unusual_types/input7.json @@ -0,0 +1 @@ +{"name": true} diff --git a/js/test_cases/render_unusual_types/input8.json b/js/test_cases/render_unusual_types/input8.json new file mode 100644 index 0000000..c0b4ef3 --- /dev/null +++ b/js/test_cases/render_unusual_types/input8.json @@ -0,0 +1 @@ +{"name": [[], {}, true, false, ""]} diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index e17b037..13a8b29 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -99,7 +99,9 @@ impl<'a> DustRenderer<'a> { } DustTag::DTReference(reference) => { let val = walk_path(breadcrumbs, &reference.path.keys); - if let Err(RenderError::NotFound { .. }) = val { + let loop_elements: Vec<&dyn ContextElement> = self.get_loop_elements(val)?; + if loop_elements.is_empty() { + // if let Err(RenderError::NotFound { .. }) = val { // If reference does not exist in the context, it becomes an empty string return Ok("".to_owned()); } else { @@ -151,6 +153,21 @@ impl<'a> DustRenderer<'a> { }; } } + DustTag::DTNotExists(container) => { + let val = walk_path(breadcrumbs, &container.path.keys); + let loop_elements: Vec<&dyn ContextElement> = self.get_loop_elements(val)?; + if !loop_elements.is_empty() { + return match &container.else_contents { + Some(body) => self.render_body(&body, breadcrumbs), + None => Ok("".to_owned()), + }; + } else { + return match &container.contents { + None => Ok("".to_owned()), + Some(body) => self.render_body(&body, breadcrumbs), + }; + } + } _ => (), // TODO: Implement the rest } Ok("".to_owned())