use serde::{Deserialize, Serialize};
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum Value {
Bool(bool),
Int(i64),
Text(String),
}
impl Value {
pub const TRUE: Value = Value::Bool(true);
pub const FALSE: Value = Value::Bool(false);
pub fn as_bool(&self) -> Option<bool> {
if let Value::Bool(inner) = self {
Some(*inner)
} else {
None
}
}
pub fn as_int(&self) -> Option<i64> {
if let Value::Int(inner) = self {
Some(*inner)
} else {
None
}
}
pub fn as_text(&self) -> Option<&str> {
if let Value::Text(inner) = self {
Some(inner.as_str())
} else {
None
}
}
}
impl From<bool> for Value {
fn from(value: bool) -> Self {
Value::Bool(value)
}
}
impl From<i64> for Value {
fn from(value: i64) -> Self {
Value::Int(value)
}
}
impl From<i32> for Value {
fn from(value: i32) -> Self {
Value::Int(value as i64)
}
}
impl From<&str> for Value {
fn from(value: &str) -> Self {
Value::Text(value.to_string())
}
}
impl From<String> for Value {
fn from(value: String) -> Self {
Value::Text(value)
}
}