Skip to main content

argumentation_schemes/
error.rs

1//! Crate error types.
2
3use thiserror::Error;
4
5/// Errors that can occur in the `argumentation-schemes` crate.
6#[derive(Debug, Error)]
7pub enum Error {
8    /// A scheme instantiation failed because a required binding was missing.
9    #[error("missing binding '{slot}' for scheme '{scheme}'")]
10    MissingBinding {
11        /// The scheme being instantiated.
12        scheme: String,
13        /// The slot that was not bound.
14        slot: String,
15    },
16
17    /// A scheme was not found in the registry.
18    #[error("scheme not found: {0}")]
19    SchemeNotFound(String),
20
21    /// An error from the underlying ASPIC+ layer.
22    #[error("aspic error: {0}")]
23    Aspic(#[from] argumentation::Error),
24
25    /// The AIF JSON document failed to parse into our data model:
26    /// missing required field, dangling node reference, unknown node
27    /// type, etc. Contains a free-text explanation.
28    #[error("AIF parse error: {0}")]
29    AifParse(String),
30
31    /// The AIF document referenced a scheme by name that is not
32    /// present in the registry supplied to the importer.
33    #[error("AIF unknown scheme: {0}")]
34    AifUnknownScheme(String),
35}
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40
41    #[test]
42    fn aif_parse_error_carries_message() {
43        let err = Error::AifParse("bad edge reference".to_string());
44        let msg = format!("{}", err);
45        assert!(msg.contains("bad edge reference"));
46    }
47
48    #[test]
49    fn aif_unknown_scheme_error_names_scheme() {
50        let err = Error::AifUnknownScheme("Argument from Flapdoodle".to_string());
51        let msg = format!("{}", err);
52        assert!(msg.contains("Flapdoodle"));
53    }
54}