Преглед на файлове

Use the 'serde' feature for Data

Data can now optionally have Serialize and Deserialize when 'serde'
feature is enabled.
david преди 10 месеца
родител
ревизия
9d0f4df6a1
променени са 3 файла, в които са добавени 46 реда и са изтрити 0 реда
  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