1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
use std::fmt::{Display, Formatter};
macro_rules! fmt {
($code:ident, $($arg:tt)*) => {
crate::error::Error::new(
crate::error::ErrorCode::$code,
format!($($arg)*))
}
}
/// Category of error.
///
/// Accessible via Error's [`code`](Error::code) method.
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum ErrorCode {
/// The host, port, or interface was incorrect.
CouldNotResolveAddr,
/// Called methods in the wrong order. E.g. `symbol` after `column`.
InvalidApiCall,
/// A network error connecting or flushing data out.
SocketError,
/// The string or symbol field is not encoded in valid UTF-8.
///
/// *This error is reserved for the
/// [C and C++ API](https://github.com/questdb/c-questdb-client/).*
InvalidUtf8,
/// The table name or column name contains bad characters.
InvalidName,
/// The supplied timestamp is invalid.
InvalidTimestamp,
/// Error during the authentication process.
AuthError,
/// Error during TLS handshake.
TlsError
}
/// An error that occurred when using QuestDB client library.
#[derive(Debug, PartialEq)]
pub struct Error {
code: ErrorCode,
msg: String
}
impl Error {
/// Create an error with the given code and message.
pub fn new<S: Into<String>>(code: ErrorCode, msg: S) -> Error {
Error {
code: code,
msg: msg.into()
}
}
/// Get the error code (category) of this error.
pub fn code(&self) -> ErrorCode {
self.code
}
/// Get the string message of this error.
pub fn msg(&self) -> &str {
&self.msg
}
}
impl Display for Error {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.msg)
}
}
impl std::error::Error for Error {}
/// A specialized `Result` type for the crate's [`Error`] type.
pub type Result<T> = std::result::Result<T, Error>;
pub(crate) use fmt;