gioser

tawasuyu/taffy

A high performance rust-powered UI layout library

HTML 5364Rust 86Markdown 12TOML 91841 Definiciones

Add support for optional serialization/deserialization of Style with serde

3b12bc3a7ff895c424d3b6e7e815e8de8ac8e59a · por Marcin Jaworski · (hace 7 años) · padre a7e2c07bc · ver el árbol en este commit

Delta semántico · 2

src/style.rs

5 archivos · +46 −0

diff --git a/Cargo.toml b/Cargo.toml
index 31d8386e7..3bb8e14b3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -19,6 +19,11 @@ maintenance = { status = "experimental" }
 libm = "0.1.2"
 lazy_static = "1.3"
 
+[dependencies.serde]
+version = "1.0.99"
+features = ["serde_derive"]
+optional = true
+
 [features]
 default = ["std"]
 std = []
diff --git a/src/geometry.rs b/src/geometry.rs
index 7e2919799..331b2e82b 100644
--- a/src/geometry.rs
+++ b/src/geometry.rs
@@ -4,6 +4,9 @@ use crate::number::Number;
 use crate::style;
 
 #[derive(Debug, Copy, Clone, PartialEq)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(default))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub struct Rect<T> {
     pub start: T,
     pub end: T,
@@ -81,6 +84,9 @@ where
 }
 
 #[derive(Debug, Copy, Clone, PartialEq)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(default))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub struct Size<T> {
     pub width: T,
     pub height: T,
diff --git a/src/lib.rs b/src/lib.rs
index c9f0b4542..5ffa0ac94 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -6,6 +6,10 @@ extern crate alloc;
 #[macro_use]
 extern crate lazy_static;
 
+#[cfg_attr(feature = "serde", macro_use)]
+#[cfg(feature = "serde")]
+extern crate serde;
+
 pub mod geometry;
 pub mod node;
 pub mod number;
diff --git a/src/number.rs b/src/number.rs
index 1cccedd96..15f6fcd1b 100644
--- a/src/number.rs
+++ b/src/number.rs
@@ -1,6 +1,8 @@
 use core::ops;
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum Number {
     Defined(f32),
     Undefined,
diff --git a/src/style.rs b/src/style.rs
index c4b4eb175..0a30256c3 100644
--- a/src/style.rs
+++ b/src/style.rs
@@ -5,6 +5,8 @@ use crate::geometry::{Rect, Size};
 use crate::number::Number;
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum AlignItems {
     FlexStart,
     FlexEnd,
@@ -20,6 +22,8 @@ impl Default for AlignItems {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum AlignSelf {
     Auto,
     FlexStart,
@@ -36,6 +40,8 @@ impl Default for AlignSelf {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum AlignContent {
     FlexStart,
     FlexEnd,
@@ -52,9 +58,13 @@ impl Default for AlignContent {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum Direction {
     Inherit,
+    #[cfg_attr(feature = "serde", serde(rename = "ltr"))]
     LTR,
+    #[cfg_attr(feature = "serde", serde(rename = "rtl"))]
     RTL,
 }
 
@@ -65,8 +75,12 @@ impl Default for Direction {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum Display {
+    #[cfg_attr(feature = "serde", serde(rename = "flex"))]
     Flex,
+    #[cfg_attr(feature = "serde", serde(rename = "none"))]
     None,
 }
 
@@ -77,6 +91,8 @@ impl Default for Display {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum FlexDirection {
     Row,
     Column,
@@ -105,6 +121,8 @@ impl FlexDirection {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum JustifyContent {
     FlexStart,
     FlexEnd,
@@ -121,6 +139,8 @@ impl Default for JustifyContent {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum Overflow {
     Visible,
     Hidden,
@@ -134,6 +154,8 @@ impl Default for Overflow {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum PositionType {
     Relative,
     Absolute,
@@ -146,6 +168,8 @@ impl Default for PositionType {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum FlexWrap {
     NoWrap,
     Wrap,
@@ -159,6 +183,8 @@ impl Default for FlexWrap {
 }
 
 #[derive(Copy, Clone, PartialEq, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub enum Dimension {
     Undefined,
     Auto,
@@ -203,6 +229,9 @@ impl Default for Size<Dimension> {
 }
 
 #[derive(Copy, Clone, Debug)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
+#[cfg_attr(feature = "serde", serde(default))]
+#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
 pub struct Style {
     pub display: Display,
     pub position_type: PositionType,