use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::identifier::Gtin;
use crate::product_group::repairability_score::RepairabilityScore;
use crate::product_group::{DeviceType, EnergyEfficiencyClass};
use super::super::common::{CriticalRawMaterial, SvhcSubstance};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ElectronicsData {
pub gtin: Gtin,
pub product_category: DeviceType,
pub energy_efficiency_class: EnergyEfficiencyClass,
pub co2e_per_unit_kg: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub repairability_score: Option<RepairabilityScore>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spare_parts_available: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repair_manual_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disassembly_instructions_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub svhc_substances: Option<Vec<SvhcSubstance>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rohs_compliant: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub critical_raw_materials: Option<Vec<CriticalRawMaterial>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recycled_content_pct: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub standby_power_w: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expected_lifetime_years: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub firmware_update_until: Option<DateTime<Utc>>,
}
impl crate::product_group::payload::ProductGroupPayload for ElectronicsData {
fn gtin(&self) -> Option<&str> {
Some(self.gtin.as_str())
}
fn model_identifier(&self) -> Option<&str> {
None
}
}