From 6a9e43feee462364ec6a2a127aaf7efd9b75b9ad Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Thu, 28 Dec 2023 17:39:08 -0800 Subject: [PATCH] try to decode julids as strings in case bytes fails --- src/sqlx.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/sqlx.rs b/src/sqlx.rs index 3e70ce4..f8bcb3f 100644 --- a/src/sqlx.rs +++ b/src/sqlx.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use sqlx::{ encode::IsNull, sqlite::{SqliteArgumentValue, SqliteValueRef}, - Decode, Encode, Sqlite, + Decode, Encode, Sqlite, Value, ValueRef, }; use crate::Julid; @@ -25,8 +25,17 @@ impl<'q> Encode<'q, Sqlite> for Julid { impl Decode<'_, Sqlite> for Julid { fn decode(value: SqliteValueRef<'_>) -> Result { - let bytes = <&[u8] as Decode>::decode(value)?; - let bytes: [u8; 16] = bytes.try_into().unwrap_or_default(); - Ok(bytes.into()) + let julid = match <&[u8] as Decode>::decode(value.to_owned().as_ref()) { + Ok(bytes) => { + let bytes: [u8; 16] = bytes.try_into().unwrap_or_default(); + Julid::from_bytes(bytes) + } + _ => { + let string = <&str as Decode>::decode(value)?; + Julid::from_string(string)? + } + }; + + Ok(julid) } }