Explorar el Código

Use the 'serde' feature for Data

Data can now optionally have Serialize and Deserialize when 'serde'
feature is enabled.
david hace 10 meses
padre
commit
9d0f4df6a1
Se han modificado 3 ficheros con 46 adiciones y 0 borrados
  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