securitydept_token_set_context/access_token_substrate/config/
validator.rs1use super::AccessTokenSubstrateConfig;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub struct AccessTokenSubstrateConfigValidationError {
5 pub mode: &'static str,
6 pub field_path: String,
7 pub code: String,
8 pub message: String,
9}
10
11impl AccessTokenSubstrateConfigValidationError {
12 pub fn new(
13 field_path: impl Into<String>,
14 code: impl Into<String>,
15 message: impl Into<String>,
16 ) -> Self {
17 Self {
18 mode: "access_token_substrate",
19 field_path: field_path.into(),
20 code: code.into(),
21 message: message.into(),
22 }
23 }
24}
25
26impl std::fmt::Display for AccessTokenSubstrateConfigValidationError {
27 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28 write!(
29 f,
30 "{} config validation failed for {} ({}): {}",
31 self.mode, self.field_path, self.code, self.message
32 )
33 }
34}
35
36impl std::error::Error for AccessTokenSubstrateConfigValidationError {}
37
38pub trait AccessTokenSubstrateConfigValidator {
39 fn validate_raw_access_token_substrate_config(
40 &self,
41 config: &AccessTokenSubstrateConfig,
42 ) -> Result<(), AccessTokenSubstrateConfigValidationError>;
43}
44
45#[derive(Debug, Clone, Copy, Default)]
46pub struct NoopAccessTokenSubstrateConfigValidator;
47
48impl AccessTokenSubstrateConfigValidator for NoopAccessTokenSubstrateConfigValidator {
49 fn validate_raw_access_token_substrate_config(
50 &self,
51 _config: &AccessTokenSubstrateConfig,
52 ) -> Result<(), AccessTokenSubstrateConfigValidationError> {
53 Ok(())
54 }
55}
56
57impl<V> AccessTokenSubstrateConfigValidator for &V
58where
59 V: AccessTokenSubstrateConfigValidator + ?Sized,
60{
61 fn validate_raw_access_token_substrate_config(
62 &self,
63 config: &AccessTokenSubstrateConfig,
64 ) -> Result<(), AccessTokenSubstrateConfigValidationError> {
65 (*self).validate_raw_access_token_substrate_config(config)
66 }
67}
68
69impl<V> AccessTokenSubstrateConfigValidator for [V]
70where
71 V: AccessTokenSubstrateConfigValidator,
72{
73 fn validate_raw_access_token_substrate_config(
74 &self,
75 config: &AccessTokenSubstrateConfig,
76 ) -> Result<(), AccessTokenSubstrateConfigValidationError> {
77 for validator in self {
78 validator.validate_raw_access_token_substrate_config(config)?;
79 }
80
81 Ok(())
82 }
83}
84
85impl<V, const N: usize> AccessTokenSubstrateConfigValidator for [V; N]
86where
87 V: AccessTokenSubstrateConfigValidator,
88{
89 fn validate_raw_access_token_substrate_config(
90 &self,
91 config: &AccessTokenSubstrateConfig,
92 ) -> Result<(), AccessTokenSubstrateConfigValidationError> {
93 self.as_slice()
94 .validate_raw_access_token_substrate_config(config)
95 }
96}
97
98impl<V> AccessTokenSubstrateConfigValidator for Vec<V>
99where
100 V: AccessTokenSubstrateConfigValidator,
101{
102 fn validate_raw_access_token_substrate_config(
103 &self,
104 config: &AccessTokenSubstrateConfig,
105 ) -> Result<(), AccessTokenSubstrateConfigValidationError> {
106 self.as_slice()
107 .validate_raw_access_token_substrate_config(config)
108 }
109}
110
111impl<A, B> AccessTokenSubstrateConfigValidator for (A, B)
112where
113 A: AccessTokenSubstrateConfigValidator,
114 B: AccessTokenSubstrateConfigValidator,
115{
116 fn validate_raw_access_token_substrate_config(
117 &self,
118 config: &AccessTokenSubstrateConfig,
119 ) -> Result<(), AccessTokenSubstrateConfigValidationError> {
120 self.0.validate_raw_access_token_substrate_config(config)?;
121 self.1.validate_raw_access_token_substrate_config(config)
122 }
123}
124
125impl<A, B, C> AccessTokenSubstrateConfigValidator for (A, B, C)
126where
127 A: AccessTokenSubstrateConfigValidator,
128 B: AccessTokenSubstrateConfigValidator,
129 C: AccessTokenSubstrateConfigValidator,
130{
131 fn validate_raw_access_token_substrate_config(
132 &self,
133 config: &AccessTokenSubstrateConfig,
134 ) -> Result<(), AccessTokenSubstrateConfigValidationError> {
135 self.0.validate_raw_access_token_substrate_config(config)?;
136 self.1.validate_raw_access_token_substrate_config(config)?;
137 self.2.validate_raw_access_token_substrate_config(config)
138 }
139}