use stateset_core::{
CreateUnitClass, CreateUnitConversionRule, CreateUnitOfMeasure, Result, UnitClass, UnitClassId,
UnitConversionRule, UnitConversionRuleId, UnitOfMeasure, UnitOfMeasureId,
};
use stateset_db::{Database, DatabaseCapability};
use std::sync::Arc;
pub struct UnitsOfMeasure {
db: Arc<dyn Database>,
}
impl std::fmt::Debug for UnitsOfMeasure {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("UnitsOfMeasure").finish_non_exhaustive()
}
}
impl UnitsOfMeasure {
pub(crate) fn new(db: Arc<dyn Database>) -> Self {
Self { db }
}
#[must_use]
pub fn is_supported(&self) -> bool {
self.db.supports_capability(DatabaseCapability::UnitsOfMeasure)
}
fn ensure(&self) -> Result<()> {
self.db.ensure_capability(DatabaseCapability::UnitsOfMeasure)
}
pub fn create_class(&self, input: CreateUnitClass) -> Result<UnitClass> {
self.ensure()?;
self.db.units_of_measure().create_class(input)
}
pub fn list_classes(&self) -> Result<Vec<UnitClass>> {
self.ensure()?;
self.db.units_of_measure().list_classes()
}
pub fn delete_class(&self, id: UnitClassId) -> Result<()> {
self.ensure()?;
self.db.units_of_measure().delete_class(id)
}
pub fn create_uom(&self, input: CreateUnitOfMeasure) -> Result<UnitOfMeasure> {
self.ensure()?;
self.db.units_of_measure().create_uom(input)
}
pub fn list_uoms(
&self,
filter: stateset_core::UnitOfMeasureFilter,
) -> Result<Vec<UnitOfMeasure>> {
self.ensure()?;
self.db.units_of_measure().list_uoms(filter)
}
pub fn set_base_uom(&self, id: UnitOfMeasureId) -> Result<UnitOfMeasure> {
self.ensure()?;
self.db.units_of_measure().set_base_uom(id)
}
pub fn delete_uom(&self, id: UnitOfMeasureId) -> Result<()> {
self.ensure()?;
self.db.units_of_measure().delete_uom(id)
}
pub fn create_rule(&self, input: CreateUnitConversionRule) -> Result<UnitConversionRule> {
self.ensure()?;
self.db.units_of_measure().create_rule(input)
}
pub fn list_rules(&self) -> Result<Vec<UnitConversionRule>> {
self.ensure()?;
self.db.units_of_measure().list_rules()
}
pub fn delete_rule(&self, id: UnitConversionRuleId) -> Result<()> {
self.ensure()?;
self.db.units_of_measure().delete_rule(id)
}
}