structured_cms/timestamp/
policy_accuracy.rs1use super::Accuracy;
4use core::fmt;
5use structured_asn1::Oid;
6
7#[derive(Debug, Clone, Copy)]
11pub struct PolicyAccuracy<'a> {
12 policy: Oid<'a>,
13 accuracy: Accuracy,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
18pub struct InvalidPolicyAccuracy;
19
20impl fmt::Display for InvalidPolicyAccuracy {
21 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22 f.write_str("policy accuracy fractional component exceeds 999")
23 }
24}
25impl core::error::Error for InvalidPolicyAccuracy {}
26
27impl<'a> PolicyAccuracy<'a> {
28 pub const fn new(policy: Oid<'a>, accuracy: Accuracy) -> Result<Self, InvalidPolicyAccuracy> {
31 if accuracy.millis() > 999 || accuracy.micros() > 999 {
32 return Err(InvalidPolicyAccuracy);
33 }
34 Ok(Self { policy, accuracy })
35 }
36 #[must_use]
39 pub const fn policy(self) -> Oid<'a> {
40 self.policy
41 }
42 #[must_use]
44 pub const fn accuracy(self) -> Accuracy {
45 self.accuracy
46 }
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq)]
51pub enum EffectiveAccuracy {
52 Token(Accuracy),
54 CallerPolicy(Accuracy),
56}
57impl EffectiveAccuracy {
58 #[must_use]
60 pub const fn accuracy(self) -> Accuracy {
61 match self {
62 Self::Token(value) | Self::CallerPolicy(value) => value,
63 }
64 }
65}