use crate::span::Span;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SchemaErrorKind {
UnknownType {
name: String,
suggestion: Option<String>,
},
UnresolvedEnum {
name: String,
},
DuplicateEnum {
name: String,
},
DuplicateVariant {
enum_name: String,
variant: String,
},
DuplicateField {
field_name: String,
},
DuplicateAlias {
name: String,
},
RecursiveAlias {
name: String,
},
UnresolvedType {
name: String,
},
InvalidMapKeyType {
found: String,
},
InvalidDefault {
field_name: String,
expected: String,
found: String,
},
UnexpectedToken {
expected: String,
found: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RonErrorKind {
UnexpectedToken {
expected: String,
found: String,
},
UnterminatedString,
DuplicateField {
field_name: String,
},
InvalidNumber {
text: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ErrorKind {
MissingField {
field_name: String,
},
UnknownField {
field_name: String,
},
TypeMismatch {
expected: String,
found: String,
},
InvalidEnumVariant {
enum_name: String,
variant: String,
valid: Vec<String>,
},
InvalidOptionValue {
expected: String,
found: String,
},
InvalidListElement {
index: usize,
expected: String,
found: String,
},
ExpectedStruct {
found: String,
},
ExpectedList {
found: String,
},
ExpectedOption {
found: String,
},
ExpectedMap {
found: String,
},
InvalidMapKey {
key: String,
expected: String,
found: String,
},
InvalidMapValue {
key: String,
expected: String,
found: String,
},
InvalidVariantData {
enum_name: String,
variant: String,
expected: String,
found: String,
},
ExpectedTuple {
found: String,
},
TupleLengthMismatch {
expected: usize,
found: usize,
},
InvalidTupleElement {
index: usize,
expected: String,
found: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SchemaParseError {
pub span: Span,
pub kind: SchemaErrorKind,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RonParseError {
pub span: Span,
pub kind: RonErrorKind,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ValidationError {
pub path: String,
pub span: Span,
pub kind: ErrorKind,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum WarningKind {
FieldOrderMismatch {
field_name: String,
expected_after: String,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Warning {
pub path: String,
pub span: Span,
pub kind: WarningKind,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ValidationResult {
pub errors: Vec<ValidationError>,
pub warnings: Vec<Warning>,
}