vue_sfc/
error.rs

1use std::fmt::Display;
2
3use crate::ast::{InvalidAttributeName, InvalidAttributeValue, InvalidBlockName, InvalidRaw};
4use crate::parser::ParseError;
5
6#[derive(Debug)]
7enum ErrorKind {
8    Parse(ParseError),
9    InvalidBlockName(InvalidBlockName),
10    InvalidAttributeName(InvalidAttributeName),
11    InvalidAttributeValue(InvalidAttributeValue),
12    InvalidRaw(InvalidRaw),
13}
14
15/// A generic error.
16///
17/// This error is less specific than others in the crate, but they can all be converted to this
18/// error.
19#[derive(Debug)]
20pub struct Error(ErrorKind);
21
22impl Error {
23    fn get_ref(&self) -> &(dyn std::error::Error + 'static) {
24        let Self(inner) = self;
25
26        match inner {
27            ErrorKind::Parse(err) => err,
28            ErrorKind::InvalidBlockName(err) => err,
29            ErrorKind::InvalidAttributeName(err) => err,
30            ErrorKind::InvalidAttributeValue(err) => err,
31            ErrorKind::InvalidRaw(err) => err,
32        }
33    }
34}
35
36impl Display for Error {
37    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
38        Display::fmt(&self.get_ref(), f)
39    }
40}
41
42impl std::error::Error for Error {
43    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
44        self.get_ref().source()
45    }
46}
47
48impl From<ParseError> for Error {
49    fn from(err: ParseError) -> Self {
50        Self(ErrorKind::Parse(err))
51    }
52}
53
54impl From<InvalidBlockName> for Error {
55    fn from(err: InvalidBlockName) -> Self {
56        Self(ErrorKind::InvalidBlockName(err))
57    }
58}
59
60impl From<InvalidAttributeName> for Error {
61    fn from(err: InvalidAttributeName) -> Self {
62        Self(ErrorKind::InvalidAttributeName(err))
63    }
64}
65
66impl From<InvalidAttributeValue> for Error {
67    fn from(err: InvalidAttributeValue) -> Self {
68        Self(ErrorKind::InvalidAttributeValue(err))
69    }
70}
71
72impl From<InvalidRaw> for Error {
73    fn from(err: InvalidRaw) -> Self {
74        Self(ErrorKind::InvalidRaw(err))
75    }
76}