Skip to content

Commit 49c5436

Browse files
committed
Add deserialize api
1 parent ba01a2c commit 49c5436

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

README.md

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# crossdb-rs
1+
# crossdb-rust
22

33
```toml
44
[dependencies]
@@ -31,9 +31,3 @@ fn main() -> Result<()> {
3131
Ok(())
3232
}
3333
```
34-
35-
## TODO
36-
37-
- NULL value
38-
- Dynamic link crossdb
39-
- use serde to serialize/deserialize

src/lib.rs

+13
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub use value::Value;
2626

2727
use crossdb_sys::*;
2828
use lru::LruCache;
29+
use serde::de::{value::Error as DeError, DeserializeOwned};
2930
use std::ffi::{CStr, CString};
3031
use std::fmt::Display;
3132
use std::num::NonZeroUsize;
@@ -156,6 +157,18 @@ impl Query {
156157
Some(Row { columns, values })
157158
}
158159

160+
pub fn fetch_row_as<T: DeserializeOwned>(&mut self) -> Option<Result<T, DeError>> {
161+
self.fetch_row().map(|row| row.deserialize())
162+
}
163+
164+
pub fn fetch_rows_as<'a, T: DeserializeOwned>(mut self) -> Result<Vec<T>, DeError> {
165+
let mut rows = Vec::with_capacity(self.row_count());
166+
while let Some(row) = self.fetch_row() {
167+
rows.push(row.deserialize()?);
168+
}
169+
Ok(rows)
170+
}
171+
159172
fn inner_fetch_row_values(&mut self) -> Option<Vec<Value<'_>>> {
160173
unsafe {
161174
let row = xdb_fetch_row(self.ptr);

0 commit comments

Comments
 (0)