Merge pull request #71 from phaazon/better-feature-gates

Provide better feature gates.
This commit is contained in:
Dimitri Sabadie 2021-07-11 16:25:45 +02:00 committed by GitHub
commit 06f6e4b578
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 28 additions and 26 deletions

View File

@ -24,15 +24,14 @@ default = ["std"]
impl-cgmath = ["cgmath"] impl-cgmath = ["cgmath"]
impl-glam = ["glam"] impl-glam = ["glam"]
impl-nalgebra = ["nalgebra"] impl-nalgebra = ["nalgebra"]
serialization = ["serde", "serde_derive"] serialization = ["serde"]
std = [] std = []
[dependencies] [dependencies]
cgmath = { version = ">=0.17, <0.19", optional = true } cgmath = { version = ">=0.17, <0.19", optional = true }
glam = { version = ">=0.10, <0.15", optional = true } glam = { version = ">=0.10, <0.15", optional = true }
nalgebra = { version = ">=0.21, <0.25", optional = true } nalgebra = { version = ">=0.21, <0.25", optional = true }
serde = { version = "1", optional = true } serde = { version = "1", features = ["derive"], optional = true }
serde_derive = { version = "1", optional = true }
[dev-dependencies] [dev-dependencies]
float-cmp = ">=0.6, < 0.9" float-cmp = ">=0.6, < 0.9"
@ -46,4 +45,4 @@ name = "hello-world"
[[example]] [[example]]
name = "serialization" name = "serialization"
required-features = ["serialization"] required-features = ["serde"]

View File

@ -83,19 +83,19 @@ not. Its especially important to see how it copes with the documentation.
So heres a list of currently supported features and how to enable them: So heres a list of currently supported features and how to enable them:
- **Serialization / deserialization.** - **Serde.**
- This feature implements both the `Serialize` and `Deserialize` traits from `serde` for all - This feature implements both the `Serialize` and `Deserialize` traits from `serde` for all
types exported by this crate. types exported by this crate.
- Enable with the `"serialization"` feature. - Enable with the `"serde"` feature.
- **[cgmath](https://crates.io/crates/cgmath) implementors.** - **[cgmath](https://crates.io/crates/cgmath) implementors.**
- Adds some useful implementations of `Interpolate` for some cgmath types. - Adds some useful implementations of `Interpolate` for some cgmath types.
- Enable with the `"impl-cgmath"` feature. - Enable with the `"cgmath"` feature.
- **[glam](https://crates.io/crates/glam) implementors.** - **[glam](https://crates.io/crates/glam) implementors.**
- Adds some useful implementations of `Interpolate` for some glam types. - Adds some useful implementations of `Interpolate` for some glam types.
- Enable with the `"impl-glam"` feature. - Enable with the `"glam"` feature.
- **[nalgebra](https://crates.io/crates/nalgebra) implementors.** - **[nalgebra](https://crates.io/crates/nalgebra) implementors.**
- Adds some useful implementations of `Interpolate` for some nalgebra types. - Adds some useful implementations of `Interpolate` for some nalgebra types.
- Enable with the `"impl-nalgebra"` feature. - Enable with the `"nalgebra"` feature.
- **Standard library / no standard library.** - **Standard library / no standard library.**
- Its possible to compile against the standard library or go on your own without it. - Its possible to compile against the standard library or go on your own without it.
- Compiling with the standard library is enabled by default. - Compiling with the standard library is enabled by default.

View File

@ -1,7 +1,7 @@
//! Available interpolation modes. //! Available interpolation modes.
#[cfg(feature = "serialization")] #[cfg(any(feature = "serialization", feature = "serde"))]
use serde_derive::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
/// Available kind of interpolations. /// Available kind of interpolations.
/// ///
@ -9,7 +9,7 @@ use serde_derive::{Deserialize, Serialize};
#[non_exhaustive] #[non_exhaustive]
#[derive(Copy, Clone, Debug, Eq, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr( #[cfg_attr(
feature = "serialization", any(feature = "serialization", feature = "serde"),
derive(Deserialize, Serialize), derive(Deserialize, Serialize),
serde(rename_all = "snake_case") serde(rename_all = "snake_case")
)] )]

View File

@ -7,8 +7,8 @@
//! interpolation mode on a key-based way, allowing you to implement and encode complex curves. //! interpolation mode on a key-based way, allowing you to implement and encode complex curves.
use crate::interpolation::Interpolation; use crate::interpolation::Interpolation;
#[cfg(feature = "serialization")] #[cfg(any(feature = "serialization", feature = "serde"))]
use serde_derive::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
/// A spline control point. /// A spline control point.
/// ///
@ -19,7 +19,7 @@ use serde_derive::{Deserialize, Serialize};
/// [`Interpolation`]: crate::interpolation::Interpolation /// [`Interpolation`]: crate::interpolation::Interpolation
#[derive(Copy, Clone, Debug, Eq, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr( #[cfg_attr(
feature = "serialization", any(feature = "serialization", feature = "serde"),
derive(Deserialize, Serialize), derive(Deserialize, Serialize),
serde(rename_all = "snake_case") serde(rename_all = "snake_case")
)] )]

View File

@ -84,19 +84,19 @@
//! //!
//! So heres a list of currently supported features and how to enable them: //! So heres a list of currently supported features and how to enable them:
//! //!
//! - **Serialization / deserialization.** //! - **Serde.**
//! - This feature implements both the `Serialize` and `Deserialize` traits from `serde` for all //! - This feature implements both the `Serialize` and `Deserialize` traits from `serde` for all
//! types exported by this crate. //! types exported by this crate.
//! - Enable with the `"serialization"` feature. //! - Enable with the `"serde"` feature.
//! - **[cgmath](https://crates.io/crates/cgmath) implementors.** //! - **[cgmath](https://crates.io/crates/cgmath) implementors.**
//! - Adds some useful implementations of `Interpolate` for some cgmath types. //! - Adds some useful implementations of `Interpolate` for some cgmath types.
//! - Enable with the `"impl-cgmath"` feature. //! - Enable with the `"cgmath"` feature.
//! - **[glam](https://crates.io/crates/glam) implementors.** //! - **[glam](https://crates.io/crates/glam) implementors.**
//! - Adds some useful implementations of `Interpolate` for some glam types. //! - Adds some useful implementations of `Interpolate` for some glam types.
//! - Enable with the `"impl-glam"` feature. //! - Enable with the `"glam"` feature.
//! - **[nalgebra](https://crates.io/crates/nalgebra) implementors.** //! - **[nalgebra](https://crates.io/crates/nalgebra) implementors.**
//! - Adds some useful implementations of `Interpolate` for some nalgebra types. //! - Adds some useful implementations of `Interpolate` for some nalgebra types.
//! - Enable with the `"impl-nalgebra"` feature. //! - Enable with the `"nalgebra"` feature.
//! - **Standard library / no standard library.** //! - **Standard library / no standard library.**
//! - Its possible to compile against the standard library or go on your own without it. //! - Its possible to compile against the standard library or go on your own without it.
//! - Compiling with the standard library is enabled by default. //! - Compiling with the standard library is enabled by default.
@ -112,15 +112,15 @@
#[cfg(not(feature = "std"))] #[cfg(not(feature = "std"))]
extern crate alloc; extern crate alloc;
#[cfg(feature = "impl-cgmath")] #[cfg(any(feature = "impl-cgmath", feature = "cgmath"))]
mod cgmath; mod cgmath;
#[cfg(feature = "impl-glam")] #[cfg(any(feature = "impl-glam", feature = "glam"))]
mod glam; mod glam;
pub mod interpolate; pub mod interpolate;
pub mod interpolation; pub mod interpolation;
pub mod iter; pub mod iter;
pub mod key; pub mod key;
#[cfg(feature = "impl-nalgebra")] #[cfg(any(feature = "impl-nalgebra", feature = "nalgebra"))]
mod nalgebra; mod nalgebra;
pub mod spline; pub mod spline;

View File

@ -10,8 +10,8 @@ use alloc::vec::Vec;
use core::cmp::Ordering; use core::cmp::Ordering;
#[cfg(not(feature = "std"))] #[cfg(not(feature = "std"))]
use core::ops::{Div, Mul}; use core::ops::{Div, Mul};
#[cfg(feature = "serialization")] #[cfg(any(feature = "serialization", feature = "serde"))]
use serde_derive::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[cfg(feature = "std")] #[cfg(feature = "std")]
use std::cmp::Ordering; use std::cmp::Ordering;
@ -28,7 +28,10 @@ use std::cmp::Ordering;
/// - [`Spline::clamped_sample`]: behaves like [`Spline::sample`] but will return either the first /// - [`Spline::clamped_sample`]: behaves like [`Spline::sample`] but will return either the first
/// or last key if out of bound; it will return `None` if not enough key. /// or last key if out of bound; it will return `None` if not enough key.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
#[cfg_attr(feature = "serialization", derive(Deserialize, Serialize))] #[cfg_attr(
any(feature = "serialization", feature = "serde"),
derive(Deserialize, Serialize)
)]
pub struct Spline<T, V>(pub(crate) Vec<Key<T, V>>); pub struct Spline<T, V>(pub(crate) Vec<Key<T, V>>);
impl<T, V> Spline<T, V> { impl<T, V> Spline<T, V> {