ftml_extraction/
errors.rs

1use 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}