mod amount;
mod estimate;
use serde::{Deserialize, Serialize};
pub use amount::UsdAmount;
pub use estimate::{EstimatedUsdCost, ServiceTier, estimate};
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum CostStatus {
EstimatedFromUsage,
#[default]
UsageNotReported,
#[serde(other)]
Other,
}
impl CostStatus {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::EstimatedFromUsage => "estimated_from_usage",
Self::UsageNotReported => "usage_not_reported",
Self::Other => "other",
}
}
}
#[cfg(test)]
mod tests {
use serde_json::json;
use super::CostStatus;
#[test]
fn cost_status_has_a_forward_compatible_wire_shape() {
assert_eq!(
serde_json::to_value(CostStatus::EstimatedFromUsage).unwrap(),
json!("estimated_from_usage")
);
assert_eq!(
serde_json::from_value::<CostStatus>(json!("future_status")).unwrap(),
CostStatus::Other
);
}
}