Skip to content

Commit a87ed82

Browse files
committed
impl with macro
1 parent 58f34ae commit a87ed82

File tree

1 file changed

+27
-33
lines changed

1 file changed

+27
-33
lines changed

crates/duckdb/src/core/value.rs

+27-33
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use crate::ffi::{duckdb_destroy_value, duckdb_get_int64, duckdb_get_varchar, duckdb_value};
22
use libduckdb_sys::{
3-
duckdb_create_bool, duckdb_create_int32, duckdb_create_int64, duckdb_create_null_value, duckdb_create_uint64,
3+
duckdb_create_bool, duckdb_create_double, duckdb_create_float, duckdb_create_int16, duckdb_create_int32,
4+
duckdb_create_int64, duckdb_create_int8, duckdb_create_null_value, duckdb_create_uint16, duckdb_create_uint32,
5+
duckdb_create_uint64, duckdb_create_uint8,
46
};
57
use std::{ffi::CString, fmt};
68

@@ -23,14 +25,6 @@ where
2325
}
2426
}
2527

26-
impl From<bool> for Value {
27-
fn from(value: bool) -> Self {
28-
Value {
29-
ptr: unsafe { duckdb_create_bool(value) },
30-
}
31-
}
32-
}
33-
3428
impl Value {
3529
pub fn null() -> Value {
3630
Value {
@@ -45,30 +39,6 @@ impl From<duckdb_value> for Value {
4539
}
4640
}
4741

48-
impl From<i32> for Value {
49-
fn from(t: i32) -> Self {
50-
Self {
51-
ptr: unsafe { duckdb_create_int32(t) },
52-
}
53-
}
54-
}
55-
56-
impl From<i64> for Value {
57-
fn from(t: i64) -> Self {
58-
Self {
59-
ptr: unsafe { duckdb_create_int64(t) },
60-
}
61-
}
62-
}
63-
64-
impl From<u64> for Value {
65-
fn from(t: u64) -> Self {
66-
Self {
67-
ptr: unsafe { duckdb_create_uint64(t) },
68-
}
69-
}
70-
}
71-
7242
impl Drop for Value {
7343
fn drop(&mut self) {
7444
if !self.ptr.is_null() {
@@ -93,3 +63,27 @@ impl fmt::Display for Value {
9363
write!(f, "{}", c_string.to_str().unwrap())
9464
}
9565
}
66+
67+
macro_rules! impl_duckdb_create_value {
68+
($ty:ty, $ddb_fn:ident) => {
69+
impl From<$ty> for Value {
70+
fn from(value: $ty) -> Self {
71+
Value {
72+
ptr: unsafe { $ddb_fn(value) },
73+
}
74+
}
75+
}
76+
};
77+
}
78+
79+
impl_duckdb_create_value!(bool, duckdb_create_bool);
80+
impl_duckdb_create_value!(i8, duckdb_create_int8);
81+
impl_duckdb_create_value!(i16, duckdb_create_int16);
82+
impl_duckdb_create_value!(i32, duckdb_create_int32);
83+
impl_duckdb_create_value!(i64, duckdb_create_int64);
84+
impl_duckdb_create_value!(u8, duckdb_create_uint8);
85+
impl_duckdb_create_value!(u16, duckdb_create_uint16);
86+
impl_duckdb_create_value!(u32, duckdb_create_uint32);
87+
impl_duckdb_create_value!(u64, duckdb_create_uint64);
88+
impl_duckdb_create_value!(f32, duckdb_create_float);
89+
impl_duckdb_create_value!(f64, duckdb_create_double);

0 commit comments

Comments
 (0)