1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use crate::traits::{SEResource, Validate};
use sep2_common_derive::SEResource;
use sepserde::{YaDeserialize, YaSerialize};
use super::{
primitives::Uint32,
types::{TimeOffsetType, TimeType},
};
#[derive(Default, PartialEq, Eq, Debug, Clone, YaSerialize, YaDeserialize, SEResource)]
#[yaserde(rename = "Time")]
#[yaserde(namespace = "urn:ieee:std:2030.5:ns")]
pub struct Time {
/// The current time, in the format defined by TimeType.
#[yaserde(rename = "currentTime")]
pub current_time: TimeType,
/// Time at which daylight savings ends (dstOffset no longer applied). Result
/// of dstEndRule calculation.
#[yaserde(rename = "dstEndTime")]
pub dst_end_time: TimeType,
/// Daylight savings time offset from local standard time. A typical practice
/// is advancing clocks one hour when daylight savings time is in effect,
/// which would result in a positive dstOffset.
#[yaserde(rename = "dstOffset")]
pub dst_offset: TimeOffsetType,
/// Time at which daylight savings begins (apply dstOffset). Result of
/// dstStartRule calculation.
#[yaserde(rename = "dstStartTime")]
pub dst_start_time: TimeType,
/// Local time: localTime = currentTime + tzOffset (+ dstOffset when in
/// effect).
#[yaserde(rename = "localTime")]
pub local_time: Option<TimeType>,
/// Metric indicating the quality of the time source from which the service
/// acquired time. Lower (smaller) quality enumeration values are assumed to
/// be more accurate.
/// 3 - time obtained from external authoritative source such as NTP
/// 4 - time obtained from level 3 source
/// 5 - time manually set or obtained from level 4 source
/// 6 - time obtained from level 5 source
/// 7 - time intentionally uncoordinated
/// All other values are reserved for future use.
#[yaserde(rename = "quality")]
pub quality: TimeQuality,
/// Local time zone offset from currentTime. Does not include any daylight
/// savings time offsets. For American time zones, a negative tzOffset SHALL
/// be used (eg, EST = GMT-5 which is -18000).
#[yaserde(rename = "tzOffset")]
pub tz_offset: TimeOffsetType,
/// The default polling rate for this function set (this resource and all
/// resources below), in seconds. If not specified, a default of 900 seconds
/// (15 minutes) is used. It is RECOMMENDED a client poll the resources of
/// this function set every pollRate seconds.
#[yaserde(attribute, rename = "pollRate")]
pub poll_rate: Option<Uint32>,
/// A reference to the resource address (URI). Required in a response to a
/// GET, ignored otherwise.
#[yaserde(attribute, rename = "href")]
pub href: Option<String>,
}
impl Validate for Time {}
#[derive(Default, PartialEq, Eq, Debug, Clone, Copy, YaSerialize, YaDeserialize)]
#[yaserde(namespace = "urn:ieee:std:2030.5:ns")]
#[repr(u8)]
pub enum TimeQuality {
#[default]
ExternalAuth = 3,
LevelThree = 4,
ManualOrLevelFour = 5,
LevelFive = 6,
IntentUncoordinated = 7,
}