diff --git a/src/bin.rs b/src/bin.rs index 0f279c7..c70a52c 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -316,7 +316,24 @@ impl Loopable for serde_json::Value { impl Sizable for serde_json::Value { fn get_size<'a>(&'a self) -> Option> { - todo!() + match self { + serde_json::Value::Null => { + Some(IceResult::from_owned(OwnedLiteral::LPositiveInteger(0))) + } + serde_json::Value::Bool(_boolean) => { + Some(IceResult::from_owned(OwnedLiteral::LPositiveInteger(0))) + } + serde_json::Value::Number(_num) => Some(IceResult::from_borrowed(self)), + serde_json::Value::String(text) => Some(IceResult::from_owned( + OwnedLiteral::LPositiveInteger(text.len().try_into().unwrap()), + )), + serde_json::Value::Array(arr) => Some(IceResult::from_owned( + OwnedLiteral::LPositiveInteger(arr.len().try_into().unwrap()), + )), + serde_json::Value::Object(obj) => Some(IceResult::from_owned( + OwnedLiteral::LPositiveInteger(obj.len().try_into().unwrap()), + )), + } } } diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index 0d45fbc..ad2585c 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -21,6 +21,7 @@ use crate::renderer::Walkable; use std::borrow::Borrow; use std::cmp::Ordering; use std::collections::HashMap; +use std::convert::TryInto; #[derive(Debug)] pub struct ParametersContext<'a> { @@ -192,7 +193,14 @@ impl Walkable for OwnedLiteral { impl Sizable for OwnedLiteral { fn get_size<'a>(&'a self) -> Option> { - todo!() + match self { + OwnedLiteral::LFloat(_) => Some(IceResult::from_borrowed(self)), + OwnedLiteral::LPositiveInteger(_) => Some(IceResult::from_borrowed(self)), + OwnedLiteral::LNegativeInteger(_) => Some(IceResult::from_borrowed(self)), + OwnedLiteral::LString(text) => Some(IceResult::from_owned( + OwnedLiteral::LPositiveInteger(text.len().try_into().unwrap()), + )), + } } }