openleadr_wire/
interval.rs1use crate::{values_map::ValuesMap, Duration};
4use chrono::{DateTime, Utc};
5use serde::{Deserialize, Serialize};
6use serde_with::skip_serializing_none;
7
8#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct Interval {
13 pub id: i32,
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub interval_period: Option<IntervalPeriod>,
18 pub payloads: Vec<ValuesMap>,
20}
21
22impl Interval {
23 pub fn new(id: i32, payloads: Vec<ValuesMap>) -> Self {
24 Self {
25 id,
26 interval_period: None,
27 payloads,
28 }
29 }
30}
31
32#[skip_serializing_none]
35#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
36#[serde(rename_all = "camelCase")]
37pub struct IntervalPeriod {
38 #[serde(with = "crate::serde_rfc3339")]
40 pub start: DateTime<Utc>,
41 pub duration: Option<Duration>,
43 pub randomize_start: Option<Duration>,
45}
46
47impl IntervalPeriod {
48 pub fn new(start: DateTime<Utc>) -> Self {
49 Self {
50 start,
51 duration: None,
52 randomize_start: None,
53 }
54 }
55}