@@ -148,66 +148,69 @@ impl<'a> Iterator for OverStringIter<'a> {
148
148
149
149
type HashIter < ' a > = OptIter < super :: linked_hash_map:: Iter < ' a , Yaml , Yaml > > ;
150
150
151
- pub trait GetVal {
152
- fn get_yaml ( & self , k : & str ) -> Option < & Yaml > ;
153
- fn get_bool ( & self , k : & str ) -> Result < Option < bool > > {
151
+ pub trait GetVal < K >
152
+ where
153
+ K : ?Sized + core:: fmt:: Debug ,
154
+ {
155
+ fn get_yaml ( & self , k : & K ) -> Option < & Yaml > ;
156
+ fn get_bool ( & self , k : & K ) -> Result < Option < bool > > {
154
157
match self . get_yaml ( k) {
155
158
None => Ok ( None ) ,
156
159
Some ( v) => v
157
160
. bool ( )
158
- . with_context ( || format ! ( "Under key `{k}`" ) )
161
+ . with_context ( || format ! ( "Under key `{k:? }`" ) )
159
162
. map ( Some ) ,
160
163
}
161
164
}
162
- fn get_i64 ( & self , k : & str ) -> Result < Option < i64 > > {
165
+ fn get_i64 ( & self , k : & K ) -> Result < Option < i64 > > {
163
166
match self . get_yaml ( k) {
164
167
None => Ok ( None ) ,
165
168
Some ( v) => v
166
169
. i64 ( )
167
- . with_context ( || format ! ( "Under key `{k}`" ) )
170
+ . with_context ( || format ! ( "Under key `{k:? }`" ) )
168
171
. map ( Some ) ,
169
172
}
170
173
}
171
- fn get_u64 ( & self , k : & str ) -> Result < Option < u64 > > {
174
+ fn get_u64 ( & self , k : & K ) -> Result < Option < u64 > > {
172
175
self . get_i64 ( k) . map ( |v| v. map ( |v| v as u64 ) )
173
176
}
174
- fn get_u32 ( & self , k : & str ) -> Result < Option < u32 > > {
177
+ fn get_u32 ( & self , k : & K ) -> Result < Option < u32 > > {
175
178
self . get_i64 ( k) . map ( |v| v. map ( |v| v as u32 ) )
176
179
}
177
- fn get_str ( & self , k : & str ) -> Result < Option < & str > > {
180
+ fn get_str ( & self , k : & K ) -> Result < Option < & str > > {
178
181
match self . get_yaml ( k) {
179
182
None => Ok ( None ) ,
180
183
Some ( v) => v
181
184
. str ( )
182
- . with_context ( || format ! ( "Under key `{k}`" ) )
185
+ . with_context ( || format ! ( "Under key `{k:? }`" ) )
183
186
. map ( Some ) ,
184
187
}
185
188
}
186
- fn get_string ( & self , k : & str ) -> Result < Option < String > > {
189
+ fn get_string ( & self , k : & K ) -> Result < Option < String > > {
187
190
self . get_str ( k) . map ( |v| v. map ( From :: from) )
188
191
}
189
- fn get_hash ( & self , k : & str ) -> Result < Option < & Hash > > {
192
+ fn get_hash ( & self , k : & K ) -> Result < Option < & Hash > > {
190
193
match self . get_yaml ( k) {
191
194
None => Ok ( None ) ,
192
195
Some ( v) => v
193
196
. hash ( )
194
- . with_context ( || format ! ( "Under key `{k}`" ) )
197
+ . with_context ( || format ! ( "Under key `{k:? }`" ) )
195
198
. map ( Some ) ,
196
199
}
197
200
}
198
- fn hash_iter < ' a > ( & ' a self , k : & str ) -> HashIter < ' a > {
201
+ fn hash_iter < ' a > ( & ' a self , k : & K ) -> HashIter < ' a > {
199
202
HashIter :: new ( self . get_yaml ( k) . and_then ( Yaml :: as_hash) . map ( |h| h. iter ( ) ) )
200
203
}
201
- fn get_vec ( & self , k : & str ) -> Result < Option < & Vec < Yaml > > > {
204
+ fn get_vec ( & self , k : & K ) -> Result < Option < & Vec < Yaml > > > {
202
205
match self . get_yaml ( k) {
203
206
None => Ok ( None ) ,
204
207
Some ( v) => v
205
208
. vec ( )
206
- . with_context ( || format ! ( "Under key `{k}`" ) )
209
+ . with_context ( || format ! ( "Under key `{k:? }`" ) )
207
210
. map ( Some ) ,
208
211
}
209
212
}
210
- fn str_vec_iter < ' a > ( & ' a self , k : & str ) -> Result < OptIter < OverStringIter < ' a > > > {
213
+ fn str_vec_iter < ' a > ( & ' a self , k : & K ) -> Result < OptIter < OverStringIter < ' a > > > {
211
214
let yaml = self . get_yaml ( k) ;
212
215
Ok ( OptIter :: new ( match yaml {
213
216
None => None ,
@@ -216,21 +219,28 @@ pub trait GetVal {
216
219
if y. iter ( ) . all ( |x| x. as_str ( ) . is_some ( ) ) {
217
220
Some ( OverStringIter ( yaml. unwrap ( ) , None ) )
218
221
} else {
219
- return Err ( anyhow ! ( "`{k}` requires string value or array of strings" ) ) ;
222
+ return Err ( anyhow ! ( "`{k:? }` requires string value or array of strings" ) ) ;
220
223
}
221
224
}
222
- _ => return Err ( anyhow ! ( "`{k}` requires string value or array of strings" ) ) ,
225
+ _ => return Err ( anyhow ! ( "`{k:? }` requires string value or array of strings" ) ) ,
223
226
} ) )
224
227
}
225
228
}
226
229
227
- impl GetVal for Hash {
230
+ impl GetVal < str > for Hash {
228
231
#[ inline( always) ]
229
232
fn get_yaml ( & self , k : & str ) -> Option < & Yaml > {
230
233
self . get ( & k. to_yaml ( ) )
231
234
}
232
235
}
233
236
237
+ impl GetVal < Yaml > for Hash {
238
+ #[ inline( always) ]
239
+ fn get_yaml ( & self , k : & Yaml ) -> Option < & Yaml > {
240
+ self . get ( k)
241
+ }
242
+ }
243
+
234
244
#[ cfg( test) ]
235
245
mod tests {
236
246
use crate :: patch:: yaml_ext:: GetVal ;
0 commit comments