aboutsummaryrefslogtreecommitdiff
path: root/src/types/serde_json.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/types/serde_json.rs')
-rw-r--r--src/types/serde_json.rs39
1 files changed, 16 insertions, 23 deletions
diff --git a/src/types/serde_json.rs b/src/types/serde_json.rs
index abaecda..a9761bd 100644
--- a/src/types/serde_json.rs
+++ b/src/types/serde_json.rs
@@ -1,4 +1,4 @@
-//! `ToSql` and `FromSql` implementation for JSON `Value`.
+//! [`ToSql`] and [`FromSql`] implementation for JSON `Value`.
use serde_json::Value;
@@ -7,6 +7,7 @@ use crate::Result;
/// Serialize JSON `Value` to text.
impl ToSql for Value {
+ #[inline]
fn to_sql(&self) -> Result<ToSqlOutput<'_>> {
Ok(ToSqlOutput::from(serde_json::to_string(self).unwrap()))
}
@@ -14,47 +15,39 @@ impl ToSql for Value {
/// Deserialize text/blob to JSON `Value`.
impl FromSql for Value {
+ #[inline]
fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self> {
- match value {
- ValueRef::Text(s) => serde_json::from_slice(s),
- ValueRef::Blob(b) => serde_json::from_slice(b),
- _ => return Err(FromSqlError::InvalidType),
- }
- .map_err(|err| FromSqlError::Other(Box::new(err)))
+ let bytes = value.as_bytes()?;
+ serde_json::from_slice(bytes).map_err(|err| FromSqlError::Other(Box::new(err)))
}
}
#[cfg(test)]
mod test {
use crate::types::ToSql;
- use crate::{Connection, NO_PARAMS};
+ use crate::{Connection, Result};
- fn checked_memory_handle() -> Connection {
- let db = Connection::open_in_memory().unwrap();
- db.execute_batch("CREATE TABLE foo (t TEXT, b BLOB)")
- .unwrap();
- db
+ fn checked_memory_handle() -> Result<Connection> {
+ let db = Connection::open_in_memory()?;
+ db.execute_batch("CREATE TABLE foo (t TEXT, b BLOB)")?;
+ Ok(db)
}
#[test]
- fn test_json_value() {
- let db = checked_memory_handle();
+ fn test_json_value() -> Result<()> {
+ let db = checked_memory_handle()?;
let json = r#"{"foo": 13, "bar": "baz"}"#;
let data: serde_json::Value = serde_json::from_str(json).unwrap();
db.execute(
"INSERT INTO foo (t, b) VALUES (?, ?)",
&[&data as &dyn ToSql, &json.as_bytes()],
- )
- .unwrap();
+ )?;
- let t: serde_json::Value = db
- .query_row("SELECT t FROM foo", NO_PARAMS, |r| r.get(0))
- .unwrap();
+ let t: serde_json::Value = db.query_row("SELECT t FROM foo", [], |r| r.get(0))?;
assert_eq!(data, t);
- let b: serde_json::Value = db
- .query_row("SELECT b FROM foo", NO_PARAMS, |r| r.get(0))
- .unwrap();
+ let b: serde_json::Value = db.query_row("SELECT b FROM foo", [], |r| r.get(0))?;
assert_eq!(data, b);
+ Ok(())
}
}