pub struct NamedValidationDependency<'a> { /* private fields */ }Expand description
One dependency value identified by its signature name.
Names come from the validator declaration. Values and paths remain borrowed for the validation call and are never retained by the binding. An optional path is caller-selected and remains attached to its named slot when inputs are reordered; it is not prefixed with the current target path.
§Type Parameters
'a: Lifetime shared by the borrowed value and optional path.
§Examples
use qubit_validator::{NamedValidationDependency, ValidationValue};
let dependency = NamedValidationDependency::new("email", ValidationValue::Text("a@example.test"));
assert!(!format!("{dependency:?}").contains("a@example.test"));Implementations§
Source§impl<'a> NamedValidationDependency<'a>
impl<'a> NamedValidationDependency<'a>
Sourcepub const fn new(name: &'static str, value: ValidationValue<'a>) -> Self
pub const fn new(name: &'static str, value: ValidationValue<'a>) -> Self
Creates a named dependency value without a specific path.
§Parameters
name: Static name from the validator signature.value: Borrowed value for the dependency.
§Returns
A named borrowed dependency with no associated path.
Examples found in repository?
examples/local_registry.rs (line 129)
123fn assert_dependency_specs_come_from_signature() -> Result<(), ExecutionError> {
124 let bound = DEPENDENCY_DESCRIPTOR
125 .bind(ValidatorId::new("text.dependent"), 0, &[])
126 .expect("signature binds");
127 assert_eq!(bound.dependency_specs(), DEPENDENCIES);
128 let dependencies = [
129 NamedValidationDependency::new("maximum", ValidationValue::Text("maximum")),
130 NamedValidationDependency::new("minimum", ValidationValue::Text("minimum")),
131 ];
132 assert_eq!(
133 bound.validate_named(ValidationValue::Text("target"), &dependencies)?,
134 ValidationOutcome::Valid,
135 );
136 Ok(())
137}More examples
examples/validate_named_bench.rs (line 183)
168fn main() {
169 let b0 = V0.bind(ValidatorId::new("bench.zero"), 0, &[]).unwrap();
170 let b1 = V1.bind(ValidatorId::new("bench.one"), 0, &[]).unwrap();
171 let b4 = V4.bind(ValidatorId::new("bench.four"), 0, &[]).unwrap();
172 let b8 = V8.bind(ValidatorId::new("bench.eight"), 0, &[]).unwrap();
173 let b9 = V9.bind(ValidatorId::new("bench.nine"), 0, &[]).unwrap();
174 let number = 7_u64;
175 let value = ValidationValue::Typed(&number);
176 let path = ValidationPath::root().with_field("sample");
177 let tail_path = ValidationPath::root().with_field("tail");
178
179 let empty_named: [NamedValidationDependency<'_>; 0] = [];
180 let empty_values: [ValidationValue<'_>; 0] = [];
181 run_case("zero", &b0, &empty_named, &BoundValidationContext::new(&empty_values));
182
183 let one_named = [NamedValidationDependency::new("a", value)];
184 let one_values = [value];
185 run_case("one_plain", &b1, &one_named, &BoundValidationContext::new(&one_values));
186 let one_named_path = [NamedValidationDependency::new("a", value).with_path(&path)];
187 let one_paths = [path.clone()];
188 let one_context = BoundValidationContext::new_with_paths(&one_values, &one_paths).unwrap();
189 run_case("one_path", &b1, &one_named_path, &one_context);
190
191 let four_named = [
192 NamedValidationDependency::new("a", value),
193 NamedValidationDependency::new("b", value),
194 NamedValidationDependency::new("c", value),
195 NamedValidationDependency::new("d", value),
196 ];
197 let four_values = [value; 4];
198 run_case(
199 "four_plain",
200 &b4,
201 &four_named,
202 &BoundValidationContext::new(&four_values),
203 );
204 let four_named_path = [
205 NamedValidationDependency::new("a", value).with_path(&path),
206 NamedValidationDependency::new("b", value).with_path(&path),
207 NamedValidationDependency::new("c", value).with_path(&path),
208 NamedValidationDependency::new("d", value).with_path(&path),
209 ];
210 let four_paths = [path.clone(), path.clone(), path.clone(), path.clone()];
211 let four_context = BoundValidationContext::new_with_paths(&four_values, &four_paths).unwrap();
212 run_case("four_path", &b4, &four_named_path, &four_context);
213
214 let eight_named = [
215 NamedValidationDependency::new("h", value),
216 NamedValidationDependency::new("g", value),
217 NamedValidationDependency::new("f", value),
218 NamedValidationDependency::new("e", value),
219 NamedValidationDependency::new("d", value),
220 NamedValidationDependency::new("c", value),
221 NamedValidationDependency::new("b", value),
222 NamedValidationDependency::new("a", value),
223 ];
224 let eight_values = [value; 8];
225 let eight_context = BoundValidationContext::new(&eight_values);
226 run_case("eight_plain", &b8, &eight_named, &eight_context);
227 let eight_named_mixed = [
228 NamedValidationDependency::new("h", value).with_path(&path),
229 NamedValidationDependency::new("g", value),
230 NamedValidationDependency::new("f", value),
231 NamedValidationDependency::new("e", value),
232 NamedValidationDependency::new("d", value),
233 NamedValidationDependency::new("c", value),
234 NamedValidationDependency::new("b", value),
235 NamedValidationDependency::new("a", value).with_path(&tail_path),
236 ];
237 let eight_paths = [
238 tail_path.clone(),
239 ValidationPath::root(),
240 ValidationPath::root(),
241 ValidationPath::root(),
242 ValidationPath::root(),
243 ValidationPath::root(),
244 ValidationPath::root(),
245 path.clone(),
246 ];
247 let eight_context = BoundValidationContext::new_with_paths(&eight_values, &eight_paths).unwrap();
248 run_case("eight_mixed_path", &b8, &eight_named_mixed, &eight_context);
249
250 let nine_named = [
251 NamedValidationDependency::new("i", value),
252 NamedValidationDependency::new("h", value),
253 NamedValidationDependency::new("g", value),
254 NamedValidationDependency::new("f", value),
255 NamedValidationDependency::new("e", value),
256 NamedValidationDependency::new("d", value),
257 NamedValidationDependency::new("c", value),
258 NamedValidationDependency::new("b", value),
259 NamedValidationDependency::new("a", value),
260 ];
261 let nine_values = [value; 9];
262 let nine_context = BoundValidationContext::new(&nine_values);
263 run_case("nine_plain", &b9, &nine_named, &nine_context);
264 let nine_named_mixed = [
265 NamedValidationDependency::new("i", value).with_path(&path),
266 NamedValidationDependency::new("h", value),
267 NamedValidationDependency::new("g", value),
268 NamedValidationDependency::new("f", value),
269 NamedValidationDependency::new("e", value),
270 NamedValidationDependency::new("d", value),
271 NamedValidationDependency::new("c", value),
272 NamedValidationDependency::new("b", value),
273 NamedValidationDependency::new("a", value).with_path(&tail_path),
274 ];
275 let nine_paths = [
276 tail_path.clone(),
277 ValidationPath::root(),
278 ValidationPath::root(),
279 ValidationPath::root(),
280 ValidationPath::root(),
281 ValidationPath::root(),
282 ValidationPath::root(),
283 ValidationPath::root(),
284 path.clone(),
285 ];
286 let nine_context = BoundValidationContext::new_with_paths(&nine_values, &nine_paths).unwrap();
287 run_case("nine_mixed_path", &b9, &nine_named_mixed, &nine_context);
288}Sourcepub const fn with_path(self, path: &'a ValidationPath) -> Self
pub const fn with_path(self, path: &'a ValidationPath) -> Self
Associates a caller-supplied path with this dependency value.
The path is kept unchanged and follows this named slot if
crate::BoundValidator::validate_named reorders the inputs. This
method does not add a current-target prefix.
§Parameters
path: Borrowed path identifying the dependency in the coordinate system selected by the caller.
§Returns
The dependency associated with path.
Examples found in repository?
examples/validate_named_bench.rs (line 186)
168fn main() {
169 let b0 = V0.bind(ValidatorId::new("bench.zero"), 0, &[]).unwrap();
170 let b1 = V1.bind(ValidatorId::new("bench.one"), 0, &[]).unwrap();
171 let b4 = V4.bind(ValidatorId::new("bench.four"), 0, &[]).unwrap();
172 let b8 = V8.bind(ValidatorId::new("bench.eight"), 0, &[]).unwrap();
173 let b9 = V9.bind(ValidatorId::new("bench.nine"), 0, &[]).unwrap();
174 let number = 7_u64;
175 let value = ValidationValue::Typed(&number);
176 let path = ValidationPath::root().with_field("sample");
177 let tail_path = ValidationPath::root().with_field("tail");
178
179 let empty_named: [NamedValidationDependency<'_>; 0] = [];
180 let empty_values: [ValidationValue<'_>; 0] = [];
181 run_case("zero", &b0, &empty_named, &BoundValidationContext::new(&empty_values));
182
183 let one_named = [NamedValidationDependency::new("a", value)];
184 let one_values = [value];
185 run_case("one_plain", &b1, &one_named, &BoundValidationContext::new(&one_values));
186 let one_named_path = [NamedValidationDependency::new("a", value).with_path(&path)];
187 let one_paths = [path.clone()];
188 let one_context = BoundValidationContext::new_with_paths(&one_values, &one_paths).unwrap();
189 run_case("one_path", &b1, &one_named_path, &one_context);
190
191 let four_named = [
192 NamedValidationDependency::new("a", value),
193 NamedValidationDependency::new("b", value),
194 NamedValidationDependency::new("c", value),
195 NamedValidationDependency::new("d", value),
196 ];
197 let four_values = [value; 4];
198 run_case(
199 "four_plain",
200 &b4,
201 &four_named,
202 &BoundValidationContext::new(&four_values),
203 );
204 let four_named_path = [
205 NamedValidationDependency::new("a", value).with_path(&path),
206 NamedValidationDependency::new("b", value).with_path(&path),
207 NamedValidationDependency::new("c", value).with_path(&path),
208 NamedValidationDependency::new("d", value).with_path(&path),
209 ];
210 let four_paths = [path.clone(), path.clone(), path.clone(), path.clone()];
211 let four_context = BoundValidationContext::new_with_paths(&four_values, &four_paths).unwrap();
212 run_case("four_path", &b4, &four_named_path, &four_context);
213
214 let eight_named = [
215 NamedValidationDependency::new("h", value),
216 NamedValidationDependency::new("g", value),
217 NamedValidationDependency::new("f", value),
218 NamedValidationDependency::new("e", value),
219 NamedValidationDependency::new("d", value),
220 NamedValidationDependency::new("c", value),
221 NamedValidationDependency::new("b", value),
222 NamedValidationDependency::new("a", value),
223 ];
224 let eight_values = [value; 8];
225 let eight_context = BoundValidationContext::new(&eight_values);
226 run_case("eight_plain", &b8, &eight_named, &eight_context);
227 let eight_named_mixed = [
228 NamedValidationDependency::new("h", value).with_path(&path),
229 NamedValidationDependency::new("g", value),
230 NamedValidationDependency::new("f", value),
231 NamedValidationDependency::new("e", value),
232 NamedValidationDependency::new("d", value),
233 NamedValidationDependency::new("c", value),
234 NamedValidationDependency::new("b", value),
235 NamedValidationDependency::new("a", value).with_path(&tail_path),
236 ];
237 let eight_paths = [
238 tail_path.clone(),
239 ValidationPath::root(),
240 ValidationPath::root(),
241 ValidationPath::root(),
242 ValidationPath::root(),
243 ValidationPath::root(),
244 ValidationPath::root(),
245 path.clone(),
246 ];
247 let eight_context = BoundValidationContext::new_with_paths(&eight_values, &eight_paths).unwrap();
248 run_case("eight_mixed_path", &b8, &eight_named_mixed, &eight_context);
249
250 let nine_named = [
251 NamedValidationDependency::new("i", value),
252 NamedValidationDependency::new("h", value),
253 NamedValidationDependency::new("g", value),
254 NamedValidationDependency::new("f", value),
255 NamedValidationDependency::new("e", value),
256 NamedValidationDependency::new("d", value),
257 NamedValidationDependency::new("c", value),
258 NamedValidationDependency::new("b", value),
259 NamedValidationDependency::new("a", value),
260 ];
261 let nine_values = [value; 9];
262 let nine_context = BoundValidationContext::new(&nine_values);
263 run_case("nine_plain", &b9, &nine_named, &nine_context);
264 let nine_named_mixed = [
265 NamedValidationDependency::new("i", value).with_path(&path),
266 NamedValidationDependency::new("h", value),
267 NamedValidationDependency::new("g", value),
268 NamedValidationDependency::new("f", value),
269 NamedValidationDependency::new("e", value),
270 NamedValidationDependency::new("d", value),
271 NamedValidationDependency::new("c", value),
272 NamedValidationDependency::new("b", value),
273 NamedValidationDependency::new("a", value).with_path(&tail_path),
274 ];
275 let nine_paths = [
276 tail_path.clone(),
277 ValidationPath::root(),
278 ValidationPath::root(),
279 ValidationPath::root(),
280 ValidationPath::root(),
281 ValidationPath::root(),
282 ValidationPath::root(),
283 ValidationPath::root(),
284 path.clone(),
285 ];
286 let nine_context = BoundValidationContext::new_with_paths(&nine_values, &nine_paths).unwrap();
287 run_case("nine_mixed_path", &b9, &nine_named_mixed, &nine_context);
288}Trait Implementations§
Source§impl<'a> Clone for NamedValidationDependency<'a>
impl<'a> Clone for NamedValidationDependency<'a>
impl<'a> Copy for NamedValidationDependency<'a>
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for NamedValidationDependency<'a>
impl<'a> !Send for NamedValidationDependency<'a>
impl<'a> !Sync for NamedValidationDependency<'a>
impl<'a> !UnwindSafe for NamedValidationDependency<'a>
impl<'a> Freeze for NamedValidationDependency<'a>
impl<'a> Unpin for NamedValidationDependency<'a>
impl<'a> UnsafeUnpin for NamedValidationDependency<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more