coil_template/model/
error.rs1use super::*;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub enum TemplateModelError {
5 EmptyField {
6 field: &'static str,
7 },
8 InvalidToken {
9 field: &'static str,
10 value: String,
11 },
12 DuplicateTemplate {
13 key: TemplateKey,
14 },
15 TemplateNotFound {
16 name: TemplateName,
17 },
18 TemplateKindMismatch {
19 name: TemplateName,
20 expected: TemplateKind,
21 actual: TemplateKind,
22 },
23 MissingValue {
24 key: String,
25 },
26 MissingTranslation {
27 key: String,
28 },
29 MissingSlotFill {
30 slot: SlotName,
31 },
32 TemplateRead {
33 path: String,
34 message: String,
35 },
36 ParseError {
37 line: usize,
38 column: usize,
39 message: String,
40 },
41 FragmentCannotRenderLayout {
42 name: TemplateName,
43 },
44 LayoutCannotBeIncludedAsFragment {
45 name: TemplateName,
46 },
47 InvalidElementName {
48 tag: String,
49 },
50 InvalidAttributeName {
51 name: String,
52 },
53 ValueTypeMismatch {
54 key: String,
55 expected: &'static str,
56 },
57}
58
59impl fmt::Display for TemplateModelError {
60 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
61 match self {
62 Self::EmptyField { field } => write!(f, "`{field}` cannot be empty"),
63 Self::InvalidToken { field, value } => {
64 write!(f, "`{field}` contains an invalid token `{value}`")
65 }
66 Self::DuplicateTemplate { key } => write!(f, "template `{key}` is already registered"),
67 Self::TemplateNotFound { name } => write!(f, "template `{name}` was not found"),
68 Self::TemplateKindMismatch {
69 name,
70 expected,
71 actual,
72 } => write!(
73 f,
74 "template `{name}` resolved to kind `{actual}` but `{expected}` was required"
75 ),
76 Self::MissingValue { key } => write!(f, "render value `{key}` was not provided"),
77 Self::MissingTranslation { key } => {
78 write!(f, "translation `{key}` was not provided")
79 }
80 Self::MissingSlotFill { slot } => write!(f, "slot `{slot}` has no fill or fallback"),
81 Self::TemplateRead { path, message } => {
82 write!(f, "failed to read template `{path}`: {message}")
83 }
84 Self::ParseError {
85 line,
86 column,
87 message,
88 } => write!(f, "template parse error at {line}:{column}: {message}"),
89 Self::FragmentCannotRenderLayout { name } => {
90 write!(
91 f,
92 "layout template `{name}` cannot be rendered as a fragment"
93 )
94 }
95 Self::LayoutCannotBeIncludedAsFragment { name } => {
96 write!(
97 f,
98 "layout template `{name}` cannot be included as a fragment"
99 )
100 }
101 Self::InvalidElementName { tag } => write!(f, "invalid element name `{tag}`"),
102 Self::InvalidAttributeName { name } => write!(f, "invalid attribute name `{name}`"),
103 Self::ValueTypeMismatch { key, expected } => {
104 write!(
105 f,
106 "render value `{key}` does not match expected type `{expected}`"
107 )
108 }
109 }
110 }
111}
112
113impl Error for TemplateModelError {}