From 39c4dffe3666342b96e4964efc50b07eeb6b072f Mon Sep 17 00:00:00 2001 From: Dimitri Sabadie Date: Tue, 7 Aug 2018 23:40:52 +0200 Subject: [PATCH] Add support for serde serialization / deserialization. --- .travis.yml | 4 ++++ Cargo.toml | 12 ++++++++++++ src/lib.rs | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/.travis.yml b/.travis.yml index 70bbe7d..6be9898 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,10 @@ os: script: - rustc --version - cargo --version + - echo "Testing default crate configuration" - cargo build --verbose - cargo test --verbose - cd examples && cargo check --verbose + - echo "Testing feature serialization" + - cargo build --verbose --features serialization + - cargo test --verbose --features serialization diff --git a/Cargo.toml b/Cargo.toml index 4b7c455..c8206f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,5 +17,17 @@ is-it-maintained-issue-resolution = { repository = "phaazon/splines" } is-it-maintained-open-issues = { repository = "phaazon/splines" } maintenance = { status = "actively-developed" } +[features] +default = [] +serialization = ["serde", "serde_derive"] + [dependencies] cgmath = "0.16" + +[dependencies.serde] +version = "1" +optional = true + +[dependencies.serde_derive] +version = "1" +optional = true diff --git a/src/lib.rs b/src/lib.rs index dfe1110..63e98c5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -66,6 +66,9 @@ extern crate cgmath; +#[cfg(feature = "serialization")] extern crate serde; +#[cfg(feature = "serialization")] #[macro_use] extern crate serde_derive; + use cgmath::{InnerSpace, Quaternion, Vector2, Vector3, Vector4}; use std::cmp::Ordering; use std::f32::consts; @@ -77,6 +80,8 @@ use std::ops::{Add, Div, Mul, Sub}; /// interpolation hint used to determine how to interpolate values on the segment defined by this /// key and the next one – if existing. #[derive(Copy, Clone, Debug)] +#[cfg_attr(feature = "serialization", derive(Deserialize, Serialize))] +#[cfg_attr(feature = "serialization", serde(rename_all = "snake_case"))] pub struct Key { /// Interpolation parameter at which the [`Key`] should be reached. pub t: f32, @@ -99,6 +104,8 @@ impl Key { /// Interpolation mode. #[derive(Copy, Clone, Debug)] +#[cfg_attr(feature = "serialization", derive(Deserialize, Serialize))] +#[cfg_attr(feature = "serialization", serde(rename_all = "snake_case"))] pub enum Interpolation { /// Hold a [`Key`] until the time passes the normalized step threshold, in which case the next /// key is used. @@ -125,6 +132,7 @@ impl Default for Interpolation { /// Spline curve used to provide interpolation between control points (keys). #[derive(Debug, Clone)] +#[cfg_attr(feature = "serialization", derive(Deserialize, Serialize))] pub struct Spline(Vec>); impl Spline {