pub mod cursor;
pub mod db;
pub mod field;
pub mod index;
mod raw;
pub mod role_info;
pub mod txn;
pub mod types;
pub mod user_info;
use libtugraph_sys as ffi;
use std::{error, fmt, result};
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[non_exhaustive]
pub enum ErrorKind {
InvalidParameter,
OutOfRange,
InvalidGalaxy,
InvalidGraphDB,
InvalidTxn,
InvalidIterator,
InvalidFork,
TxnConflict,
WriteNotAllowed,
DBNotExist,
IOError,
Unauthorized,
Other,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Error {
message: String,
}
impl Error {
fn new(message: String) -> Error {
Error { message }
}
pub fn into_string(self) -> String {
self.msg().to_string()
}
pub fn msg(&self) -> &str {
&self.message
}
pub fn kind(&self) -> ErrorKind {
match self.message.as_str() {
"Invalid parameter." => ErrorKind::InvalidParameter,
"Invalid Galaxy." => ErrorKind::InvalidGalaxy,
"Invalid GraphDB." => ErrorKind::InvalidGraphDB,
"Invalid transaction." => ErrorKind::InvalidTxn,
"Invalid iterator." => ErrorKind::InvalidIterator,
"Write transactions cannot be forked." => ErrorKind::InvalidFork,
"Transaction conflicts with an earlier one." => ErrorKind::TxnConflict,
"Access denied." => ErrorKind::WriteNotAllowed,
"The specified TuGraph DB does not exist." => ErrorKind::DBNotExist,
"IO Error." => ErrorKind::IOError,
"Unauthorized." => ErrorKind::Unauthorized,
_ => ErrorKind::Other,
}
}
}
impl AsRef<str> for Error {
fn as_ref(&self) -> &str {
&self.message
}
}
impl error::Error for Error {}
impl fmt::Display for Error {
fn fmt(&self, formatter: &mut fmt::Formatter) -> result::Result<(), fmt::Error> {
self.message.fmt(formatter)
}
}
pub type Result<T> = result::Result<T, Error>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error() {
[
("Invalid parameter.", ErrorKind::InvalidParameter),
("Invalid Galaxy.", ErrorKind::InvalidGalaxy),
("Invalid GraphDB.", ErrorKind::InvalidGraphDB),
("Invalid transaction.", ErrorKind::InvalidTxn),
("Invalid iterator.", ErrorKind::InvalidIterator),
(
"Write transactions cannot be forked.",
ErrorKind::InvalidFork,
),
(
"Transaction conflicts with an earlier one.",
ErrorKind::TxnConflict,
),
("Access denied.", ErrorKind::WriteNotAllowed),
(
"The specified TuGraph DB does not exist.",
ErrorKind::DBNotExist,
),
("IO Error.", ErrorKind::IOError),
("Unauthorized.", ErrorKind::Unauthorized),
("Other Unkown error.", ErrorKind::Other),
]
.into_iter()
.for_each(|(msg, kind)| {
let e = Error::new(msg.into());
assert_eq!(e.as_ref(), msg);
assert_eq!(e.msg(), msg);
assert_eq!(e.kind(), kind);
})
}
}