use serde::Deserialize;
use serde::Serialize;
use std::collections::HashMap;
use zbus::proxy;
use zbus::zvariant::{DeserializeDict, SerializeDict, Type, Value};
pub type ValueMap = HashMap<u32, String>;
#[derive(Debug, PartialEq, Eq, Type, Serialize, Deserialize)]
pub enum SensorMode {
ReadOnly,
ReadWrite,
WriteOnly,
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Type, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DataType {
F64,
String,
Bool,
U64,
}
#[derive(Debug, PartialEq, Eq, DeserializeDict, SerializeDict, Type)]
#[zvariant(signature = "dict")]
pub struct Metadata {
pub n: String,
pub u: Option<String>,
pub name: Option<String>,
pub description: Option<String>,
pub value_map: Option<ValueMap>,
pub mode: Option<SensorMode>,
pub value_type: Option<DataType>,
}
#[proxy(
interface = "se.modio.logger.Logger1",
default_service = "se.modio.logger",
default_path = "/se/modio/logger"
)]
pub trait Logger1 {
fn get_metadata(&self, key: &str) -> zbus::Result<Metadata>;
fn set_metadata_description(&self, key: &str, description: &str) -> zbus::Result<()>;
fn set_metadata_mode(&self, key: &str, mode: SensorMode) -> zbus::Result<()>;
fn set_metadata_name(&self, key: &str, name: &str) -> zbus::Result<()>;
fn set_metadata_unit(&self, key: &str, unit: &str) -> zbus::Result<()>;
fn set_metadata_value_map(&self, key: &str, value_map: ValueMap) -> zbus::Result<()>;
fn set_metadata_value_type(&self, key: &str, value_type: DataType) -> zbus::Result<()>;
#[zbus(signal)]
fn metadata_updated(&self, key: &str) -> zbus::Result<()>;
async fn store_batch(&self, batch: HashMap<String, Value<'_>>) -> zbus::Result<()>;
async fn store(&self, key: String, value: Value<'_>) -> zbus::Result<()>;
fn store_ts(&self, batch: Vec<(String, Value<'_>, f64)>) -> zbus::Result<()>;
fn store_rows(&self, rows: Vec<(f64, Vec<Value<'_>>)>) -> zbus::Result<()>;
#[zbus(signal)]
async fn store_signal(&self, batch: Vec<(String, Value<'_>, i64)>) -> zbus::Result<()>;
}