1use crate::data::deserialize::deserialize_macaddr;
2use crate::data::serialize::serialize_macaddr;
3use crate::data::serialize::serialize_power;
4use crate::data::serialize::serialize_temperature;
5use std::{net::IpAddr, time::Duration};
6
7use super::{
8 board::BoardData, device::DeviceInfo, fan::FanData, hashrate::HashRate, message::MinerMessage,
9 pool::PoolData,
10};
11use macaddr::MacAddr;
12use measurements::{Power, Temperature};
13use serde::{Deserialize, Serialize};
14
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
16pub struct MinerData {
17 pub schema_version: String,
19 pub timestamp: u64,
21 pub ip: IpAddr,
23 #[serde(
25 serialize_with = "serialize_macaddr",
26 deserialize_with = "deserialize_macaddr"
27 )]
28 pub mac: Option<MacAddr>,
29 pub device_info: DeviceInfo,
31 pub serial_number: Option<String>,
33 pub hostname: Option<String>,
35 pub api_version: Option<String>,
37 pub firmware_version: Option<String>,
39 pub control_board_version: Option<String>,
41 pub expected_hashboards: Option<u8>,
43 pub hashboards: Vec<BoardData>,
45 pub hashrate: Option<HashRate>,
47 pub expected_hashrate: Option<HashRate>,
49 pub expected_chips: Option<u16>,
51 pub total_chips: Option<u16>,
53 pub expected_fans: Option<u8>,
55 pub fans: Vec<FanData>,
57 pub psu_fans: Vec<FanData>,
59 #[serde(serialize_with = "serialize_temperature")]
61 pub average_temperature: Option<Temperature>,
62 #[serde(serialize_with = "serialize_temperature")]
64 pub fluid_temperature: Option<Temperature>,
65 #[serde(serialize_with = "serialize_power")]
67 pub wattage: Option<Power>,
68 #[serde(serialize_with = "serialize_power")]
70 pub wattage_limit: Option<Power>,
71 pub efficiency: Option<f64>,
73 pub light_flashing: Option<bool>,
75 pub messages: Vec<MinerMessage>,
77 pub uptime: Option<Duration>,
79 pub is_mining: bool,
81 pub pools: Vec<PoolData>,
83}