Skip to main content

uddf_sdk/entities/generator/
structure.rs

1use chrono::{DateTime, Utc};
2use serde::Serialize;
3
4use crate::entities::{link::structure::Link, manufacturer::structure::Manufacturer};
5
6#[derive(Debug, Serialize)]
7#[serde(rename_all = "lowercase")]
8pub enum GeneratorType {
9    Converter,
10    DiveComputer,
11    LogBook,
12}
13
14/// Represents a generator.
15///
16/// https://www.streit.cc/extern/uddf_v321/en/generator.html
17#[derive(Debug, Serialize)]
18pub struct Generator {
19    pub name: String,
20    #[serde(rename = "type")]
21    pub generator_type: GeneratorType,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub manufacturer: Option<Manufacturer>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub link: Option<Link>,
26    #[serde(rename = "datetime")]
27    pub date_time: DateTime<Utc>,
28}
29
30impl Generator {
31    pub fn validate(&self) -> Result<(), String> {
32        if self.manufacturer.is_some() && self.link.is_some() {
33            return Err("Generator cannot have both manufacturer and link".to_string());
34        }
35        Ok(())
36    }
37}