use serde::{Deserialize, Serialize};
use std::fmt::Display;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AcsValue {
pub name: String,
pub value: serde_json::Value,
}
impl AcsValue {
pub fn new(name: String, value: serde_json::Value) -> AcsValue {
AcsValue { name, value }
}
pub fn as_f64_safe(&self) -> Result<f64, String> {
let value_str = self
.value
.as_str()
.ok_or_else(|| format!("failed to decode value as string: {}", self.value))?;
value_str
.trim()
.parse::<f64>()
.map_err(|e| format!("failed to decode value as f64: {e}"))
}
}
impl Display for AcsValue {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}: {}", self.name, self.value)
}
}