use crate::format::{CharFormat, CharValue};
use crate::generated::{CharacteristicType, ServiceType};
use crate::perms::Perms;
use serde::Deserialize;
#[derive(Debug, Clone, PartialEq)]
pub struct Accessory {
pub aid: u64,
pub services: Vec<Service>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Service {
pub iid: u64,
pub service_type: ServiceType,
pub characteristics: Vec<Characteristic>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Characteristic {
pub iid: u64,
pub char_type: CharacteristicType,
pub format: CharFormat,
pub perms: Perms,
pub value: Option<CharValue>,
pub unit: Option<String>,
pub min_value: Option<f64>,
pub max_value: Option<f64>,
pub min_step: Option<f64>,
pub max_len: Option<u64>,
}
#[derive(Debug, Deserialize)]
pub(crate) struct WireAccessories {
pub accessories: Vec<WireAccessory>,
}
#[derive(Debug, Deserialize)]
pub(crate) struct WireAccessory {
pub aid: u64,
pub services: Vec<WireService>,
}
#[derive(Debug, Deserialize)]
pub(crate) struct WireService {
pub iid: u64,
#[serde(rename = "type")]
pub type_: crate::uuid::Uuid,
pub characteristics: Vec<WireCharacteristic>,
}
#[derive(Debug, Deserialize)]
pub(crate) struct WireCharacteristic {
pub iid: u64,
#[serde(rename = "type")]
pub type_: crate::uuid::Uuid,
pub format: CharFormat,
pub perms: Perms,
#[serde(default)]
pub value: Option<serde_json::Value>,
#[serde(default)]
pub unit: Option<String>,
#[serde(default, rename = "minValue")]
pub min_value: Option<f64>,
#[serde(default, rename = "maxValue")]
pub max_value: Option<f64>,
#[serde(default, rename = "minStep")]
pub min_step: Option<f64>,
#[serde(default, rename = "maxLen")]
pub max_len: Option<u64>,
}