Skip to main content

reflectapi/
validation.rs

1use std::fmt;
2
3#[derive(Debug)]
4pub struct ValidationError {
5    pub pointer: ValidationPointer,
6    pub message: String,
7}
8
9impl ValidationError {
10    pub fn new(pointer: ValidationPointer, message: String) -> ValidationError {
11        ValidationError { pointer, message }
12    }
13}
14
15impl fmt::Display for ValidationError {
16    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17        write!(f, "{}: {}", self.pointer, self.message)
18    }
19}
20
21impl std::error::Error for ValidationError {}
22
23#[derive(Debug)]
24pub enum ValidationPointer {
25    Field {
26        type_name: String,
27        name: String,
28    },
29    Variant {
30        type_name: String,
31        name: String,
32    },
33    VariantField {
34        type_name: String,
35        variant_name: String,
36        name: String,
37    },
38    Type(String),
39    Function(String),
40}
41
42impl fmt::Display for ValidationPointer {
43    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44        match self {
45            ValidationPointer::Field { type_name, name } => write!(f, "{type_name}.{name}"),
46            ValidationPointer::Variant { type_name, name } => write!(f, "{type_name}::{name}"),
47            ValidationPointer::VariantField {
48                type_name,
49                variant_name,
50                name,
51            } => write!(f, "{type_name}.{variant_name}.{name}"),
52            ValidationPointer::Type(name) => write!(f, "{name}"),
53            ValidationPointer::Function(name) => write!(f, "{name}"),
54        }
55    }
56}