ftml_extraction/
errors.rs1use crate::open::terms::{OpenTermKind, VarOrSym};
2use flams_ontology::{ftml::FTMLKey, uris::Name};
3use std::fmt::Display;
4
5#[derive(Clone, Debug)]
6pub enum FTMLError {
7 MissingArguments,
8 MissingElementsInList,
9 MissingTermForComplex(VarOrSym),
10 UnresolvedVariable(Name),
11 MissingHeadForTerm,
12 InvalidTermKind(String),
13 InvalidHeadForTermKind(OpenTermKind, VarOrSym),
14 InvalidArgSpec,
15 InvalidKeyFor(&'static str, Option<String>),
16 NotInContent,
17 NotInNarrative,
18 NotInParagraph,
19 NotInProblem(&'static str),
20 InvalidKey,
21 InvalidURI(String),
22 IncompleteArgs(u8),
23}
24
25impl std::error::Error for FTMLError {}
26const HEAD: &str = FTMLKey::Head.attr_name();
27impl Display for FTMLError {
28 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
29 match self {
30 Self::MissingArguments => f.write_str("missing arguments in OMA"),
31 Self::MissingElementsInList => f.write_str("missing elements in term list"),
32 Self::MissingTermForComplex(head) => {
33 write!(f, "missing actual term for complex term {head:?}")
34 }
35 Self::UnresolvedVariable(name) => write!(f, "unresolved variable {name}"),
36 Self::MissingHeadForTerm => write!(f, "missing {HEAD} attribute for term"),
37 Self::InvalidTermKind(s) => write!(f, "invalid term kind {s}"),
38 Self::InvalidHeadForTermKind(kind, head) => {
39 write!(f, "invalid head {head:?} for term kind {kind:?}")
40 }
41 Self::InvalidArgSpec => write!(f, "invalid or missing argument marker"),
42 Self::InvalidKeyFor(tag, Some(value)) => {
43 write!(f, "invalid key {value} for ftml tag {tag}")
44 }
45 Self::InvalidKeyFor(tag, None) => write!(f, "missing key for ftml tag {tag}"),
46 Self::NotInContent => f.write_str("content element outside of a module"),
47 Self::NotInNarrative => f.write_str("unbalanced narrative element"),
48 Self::NotInParagraph => f.write_str("unbalanced logical paragraph"),
49 Self::NotInProblem(s) => write!(f, "unbalanced problem element: {s}"),
50 Self::InvalidKey => f.write_str("invalid key in ftml element"),
51 Self::IncompleteArgs(i) => write!(f, "incomplete argument list: {i}"),
52 Self::InvalidURI(s) => write!(f, "invalid URI: {s}"),
53 }
54 }
55}