Skip to main content

better_duck_sys/
error.rs

1//! Hand-written convenience layer over the raw `duckdb_state` result code.
2//!
3//! Not part of DuckDB's C header and not `bindgen`-generated — this mirrors
4//! the same small hand-written addition the external `libduckdb-sys` crate
5//! carries on top of its own raw bindings, which `better-duck-core`'s
6//! `error::Error` type builds on (`DuckDBFailure(ffi::Error, ...)`).
7
8use crate::bindings::{duckdb_state, duckdb_state_DuckDBError, duckdb_state_DuckDBSuccess};
9
10/// Friendlier alias for the raw `duckdb_state_DuckDBSuccess` constant.
11pub const DuckDBSuccess: duckdb_state = duckdb_state_DuckDBSuccess;
12/// Friendlier alias for the raw `duckdb_state_DuckDBError` constant.
13pub const DuckDBError: duckdb_state = duckdb_state_DuckDBError;
14
15/// Wraps a raw DuckDB C API result code (`duckdb_state`) as a Rust error.
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub struct Error {
18    /// The raw `duckdb_state` returned by the failing C API call.
19    pub result_code: duckdb_state,
20}
21
22impl Error {
23    /// Wraps `code`, the `duckdb_state` returned by a fallible C API call.
24    #[must_use]
25    pub fn new(code: duckdb_state) -> Self {
26        Error { result_code: code }
27    }
28}
29
30impl std::fmt::Display for Error {
31    fn fmt(
32        &self,
33        f: &mut std::fmt::Formatter<'_>,
34    ) -> std::fmt::Result {
35        write!(f, "DuckDB call failed with result code {}", self.result_code)
36    }
37}
38
39impl std::error::Error for Error {}