Skip to content

Commit da31083

Browse files
committed
chore: serialize parent view id into empty string if none
1 parent c786055 commit da31083

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

collab-folder/src/view.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,8 @@ impl<'a, 'b, 'c> ViewUpdate<'a, 'b, 'c> {
795795
pub struct View {
796796
/// The id of the view
797797
pub id: ViewId,
798-
/// The id for given parent view
798+
/// The id for given parent view
799+
#[serde(with = "collab::preclude::serde_option_uuid")]
799800
pub parent_view_id: Option<ViewId>,
800801
/// The name that display on the left sidebar
801802
pub name: String,

collab/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,5 @@ pub mod preclude {
3939
pub use crate::util::MapExt;
4040
pub use crate::util::deserialize_i32_from_numeric;
4141
pub use crate::util::deserialize_i64_from_numeric;
42+
pub use crate::util::serde_option_uuid;
4243
}

collab/src/util.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,30 @@ pub fn any_to_json_value(any: Any) -> Result<JsonValue> {
276276
create_deserialize_numeric!(i32, I32Visitor, deserialize_i32_from_numeric);
277277
create_deserialize_numeric!(i64, I64Visitor, deserialize_i64_from_numeric);
278278

279+
pub mod serde_option_uuid {
280+
use serde::{self, Deserialize, Deserializer, Serializer};
281+
use uuid::Uuid;
282+
283+
pub fn serialize<S>(value: &Option<Uuid>, serializer: S) -> Result<S::Ok, S::Error>
284+
where
285+
S: Serializer,
286+
{
287+
let str = value.map(|uuid| uuid.to_string()).unwrap_or_default();
288+
serializer.serialize_str(&str)
289+
}
290+
291+
pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Uuid>, D::Error>
292+
where
293+
D: Deserializer<'de>,
294+
{
295+
let opt = Option::<String>::deserialize(deserializer)?;
296+
match opt {
297+
Some(s) => Ok(Uuid::parse_str(&s).ok()),
298+
None => Ok(None),
299+
}
300+
}
301+
}
302+
279303
pub trait ArrayExt: Array {
280304
fn clear(&self, txn: &mut TransactionMut) {
281305
let len = self.len(txn);

0 commit comments

Comments
 (0)