Browse Source

Use the 'serde' feature for Data

Data can now optionally have Serialize and Deserialize when 'serde'
feature is enabled.
david 10 tháng trước cách đây
mục cha
commit
9d0f4df6a1
3 tập tin đã thay đổi với 46 bổ sung0 xóa
  1. 21 0
      Cargo.lock
  2. 2 0
      Cargo.toml
  3. 23 0
      src/data.rs

+ 21 - 0
Cargo.lock

@@ -113,10 +113,31 @@ version = "0.1.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
 
+[[package]]
+name = "serde"
+version = "1.0.210"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.210"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
 [[package]]
 name = "shared"
 version = "0.1.1"
 dependencies = [
+ "serde",
  "tokio",
 ]
 

+ 2 - 0
Cargo.toml

@@ -5,6 +5,8 @@ edition = "2021"
 
 [features]
 cast_into = []
+serde = ["dep:serde"]
 
 [dependencies]
 tokio = { version = "1.40.0", features = ["macros", "rt", "rt-multi-thread", "sync", "time"] }
+serde = { version = "1.0", features = ["derive"], optional = true}

+ 23 - 0
src/data.rs

@@ -2,6 +2,7 @@ use std::{collections::HashMap, fmt::Display, slice::{SliceIndex, Iter, IterMut}
 
 use crate::Shared;
 
+#[cfg(not(feature = "serde"))]
 #[derive(Debug, PartialEq, Clone)]
 pub enum Data {
     None,
@@ -23,6 +24,28 @@ pub enum Data {
     Map(HashMap<String, Data>),
 }
 
+#[cfg(feature="serde")]
+#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize)]
+pub enum Data {
+    None,
+    String(String),
+    I8(i8),
+    I16(i16),
+    I32(i32),
+    I64(i64),
+    I128(i128),
+    U8(u8),
+    U16(u16),
+    U32(u32),
+    U64(u64),
+    U128(u128),
+    F32(f32),
+    F64(f64),
+    Bool(bool),
+    Vec(Vec<Data>),
+    Map(HashMap<String, Data>),
+}
+
 impl Default for Data {
     fn default() -> Self {
         Self::None