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 {}