use alloc::{borrow::Cow, string::ToString};
use serde_json::Value;
pub(crate) fn number(text: &str) -> Value {
if let Ok(whole) = text.parse::<i64>() {
return Value::Number(whole.into());
}
text.parse::<f64>()
.ok()
.and_then(serde_json::Number::from_f64)
.map(Value::Number)
.unwrap_or_else(|| Value::String(text.to_string()))
}
pub(crate) fn strings(values: &[Cow<'_, str>]) -> Value {
match values {
[one] => Value::String(one.to_string()),
many => Value::Array(many.iter().map(|v| Value::String(v.to_string())).collect()),
}
}
pub(crate) fn scalar_text(value: &Value) -> Cow<'_, str> {
match value {
Value::String(text) => Cow::Borrowed(text),
Value::Null => Cow::Borrowed(""),
other => Cow::Owned(other.to_string()),
}
}