use crate::value::Value;
pub trait AsString {
fn as_string(&self) -> String;
}
impl AsString for Value {
fn as_string(&self) -> String {
match self {
Value::None {
..
} => "none".to_string(),
Value::Boolean(b) => b.to_string(),
Value::Float4(f) => f.to_string(),
Value::Float8(f) => f.to_string(),
Value::Int1(i) => i.to_string(),
Value::Int2(i) => i.to_string(),
Value::Int4(i) => i.to_string(),
Value::Int8(i) => i.to_string(),
Value::Int16(i) => i.to_string(),
Value::Utf8(s) => s.clone(),
Value::Uint1(u) => u.to_string(),
Value::Uint2(u) => u.to_string(),
Value::Uint4(u) => u.to_string(),
Value::Uint8(u) => u.to_string(),
Value::Uint16(u) => u.to_string(),
Value::Date(d) => d.to_string(),
Value::DateTime(dt) => dt.to_string(),
Value::Time(t) => t.to_string(),
Value::Duration(i) => i.to_string(),
Value::IdentityId(id) => id.to_string(),
Value::Uuid4(u) => u.to_string(),
Value::Uuid7(u) => u.to_string(),
Value::Blob(b) => b.to_string(),
Value::Int(bi) => bi.to_string(),
Value::Uint(bu) => bu.to_string(),
Value::Decimal(bd) => bd.to_string(),
Value::DictionaryId(id) => id.to_string(),
Value::Type(t) => t.to_string(),
Value::Any(v) => v.as_string(),
Value::List(items) => {
let inner: Vec<String> = items.iter().map(|v| v.as_string()).collect();
format!("[{}]", inner.join(", "))
}
Value::Tuple(items) => {
let inner: Vec<String> = items.iter().map(|v| v.as_string()).collect();
format!("({})", inner.join(", "))
}
Value::Record(fields) => {
let inner: Vec<String> =
fields.iter().map(|(k, v)| format!("{}: {}", k, v.as_string())).collect();
format!("{{{}}}", inner.join(", "))
}
}
}
}
impl Value {
pub fn as_string(&self) -> String {
AsString::as_string(self)
}
}