rdf_store_rs/
error.rs

1// Copyright (c) 2018-2023, agnos.ai UK Ltd, all rights reserved.
2//---------------------------------------------------------------
3
4extern crate alloc;
5
6use iref::InvalidIri;
7use {crate::DataType, thiserror::Error};
8
9#[derive(Error, Debug)]
10pub enum RDFStoreError {
11    #[allow(dead_code)]
12    #[error("Unknown Error")]
13    Unknown,
14    #[error("While {action}: {message}")]
15    Exception { action: String, message: String },
16    #[error("Unknown data type {data_type_id}")]
17    UnknownDataType { data_type_id: u8 },
18    #[error("Unknown value [{value}] for data type {data_type:?}")]
19    UnknownValueForDataType { data_type: DataType, value: String },
20    #[error("Unknown XSD data type {data_type_iri}")]
21    UnknownXsdDataType { data_type_iri: String },
22    #[error("Unknown literal value in N-Triples format: {value}")]
23    UnknownNTriplesValue { value: String },
24    #[error(
25        "The multiplicity ({multiplicity}) of a cursor row exceeded the maximum number of rows \
26         ({maxrow}) for query:\n{query}"
27    )]
28    MultiplicityExceededMaximumNumberOfRows {
29        maxrow:       usize,
30        multiplicity: usize,
31        query:        String,
32    },
33    #[error("Cannot get any argument indexes from the cursor of:\n{query}")]
34    CannotGetAnyArgumentIndexes { query: String },
35    #[error("Maximum number of rows ({maxrow}) has been exceeded for query:\n{query}")]
36    ExceededMaximumNumberOfRows { maxrow: usize, query: String },
37    #[error("Could not find a license key")]
38    RDFoxLicenseFileNotFound,
39    #[allow(dead_code)]
40    #[error("Unknown resource")]
41    UnknownResourceException,
42    #[error("Could not create RDFox server")]
43    CouldNotCreateRDFoxServer,
44    #[error("Could not connect to RDFox server")]
45    CouldNotConnectToServer,
46    #[error("Could not import RDF File")]
47    CouldNotImportRDFFile,
48    #[error("Invalid prefix name")]
49    InvalidPrefixName,
50    #[error("Invalid literal value")]
51    InvalidLiteral,
52    /// Represents all other cases of `std::io::Error`.
53    #[error(transparent)]
54    IOError(#[from] std::io::Error),
55    /// Represents all other cases of `ignore::Error`
56    /// (see <https://docs.rs/ignore/latest/ignore/enum.Error.html>)
57    #[error(transparent)]
58    WalkError(#[from] ignore::Error),
59    #[error(transparent)]
60    InvalidIri(#[from] iref::iri::InvalidIri<String>),
61    #[error("Could not parse IRI: {0:?}")]
62    IriParseError(String),
63    #[error(transparent)]
64    IriStringParseError(#[from] iri_string::validate::Error),
65    #[error(transparent)]
66    ParseIntError(#[from] std::num::ParseIntError),
67
68    #[cfg(feature = "serde")]
69    #[error(transparent)]
70    SerdeJsonError(#[from] serde_json::Error),
71
72    #[error(transparent)]
73    DateParseError(#[from] chrono::ParseError),
74
75    #[error(transparent)]
76    CApiError(#[from] std::ffi::NulError),
77
78    #[error(transparent)]
79    R2D2Error(#[from] r2d2::Error),
80}
81
82#[cfg(feature = "nom-support")]
83impl<I: From<&'static str>> From<RDFStoreError> for nom::Err<nom::error::Error<I>> {
84    fn from(_: RDFStoreError) -> Self {
85        nom::Err::Error(nom::error::Error::new(
86            "unknown rdfox error".into(),
87            nom::error::ErrorKind::Fail,
88        ))
89    }
90}
91
92impl<T: core::fmt::Debug> From<iref::IriError<T>> for RDFStoreError {
93    fn from(error: iref::IriError<T>) -> Self {
94        RDFStoreError::IriParseError(format!("{:?}", error))
95    }
96}
97
98impl From<InvalidIri<&str>> for RDFStoreError {
99    fn from(error: InvalidIri<&str>) -> Self {
100        RDFStoreError::IriParseError(format!("{:?}", error))
101    }
102}
103
104// impl<T> From<iref::IriError<T>> for RDFStoreError {
105//     fn from(error: iref::IriError<T>) -> Self {
106//         RDFStoreError::IriParseError {
107//             msg: format!("{:?}", error)
108//         }
109//     }
110// }