Add function calling

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2026-03-15 11:27:25 +01:00
parent 52a63a7066
commit 10bcd77040
5 changed files with 275 additions and 7 deletions

View file

@ -310,6 +310,18 @@ impl From<&'static str> for NomoValue {
}
}
impl From<u64> for NomoValue {
fn from(val: u64) -> Self {
NomoValue::Integer { value: val }
}
}
impl From<i64> for NomoValue {
fn from(val: i64) -> Self {
NomoValue::SignedInteger { value: val }
}
}
impl<V> From<Vec<V>> for NomoValue
where
V: Into<NomoValue>,
@ -355,11 +367,43 @@ where
}
}
#[cfg(feature = "serde_json")]
#[derive(Debug, Error, Display)]
/// Could not transform value to [`NomoValue`]
/// Could not transform value to/from [`NomoValue`]
pub struct NomoValueError;
impl TryFrom<NomoValue> for String {
type Error = NomoValueError;
fn try_from(value: NomoValue) -> Result<Self, Self::Error> {
match value {
NomoValue::String { value } => Ok(value.to_string()),
_ => Err(NomoValueError),
}
}
}
impl TryFrom<NomoValue> for i64 {
type Error = NomoValueError;
fn try_from(value: NomoValue) -> Result<Self, Self::Error> {
match value {
NomoValue::SignedInteger { value } => Ok(value),
_ => Err(NomoValueError),
}
}
}
impl TryFrom<NomoValue> for u64 {
type Error = NomoValueError;
fn try_from(value: NomoValue) -> Result<Self, Self::Error> {
match value {
NomoValue::Integer { value } => Ok(value),
_ => Err(NomoValueError),
}
}
}
#[cfg(feature = "serde_json")]
impl TryFrom<serde_json::Value> for NomoValue {
type Error = NomoValueError;