From a88a1d12ead9e14005d3b1225606d52c46a7aa38 Mon Sep 17 00:00:00 2001 From: Erik Tesar Date: Wed, 21 Jan 2026 13:09:58 +0100 Subject: [PATCH] feat: derive Facet if facet feature is active --- Cargo.lock | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++--- Cargo.toml | 65 ++++++++++++++++++--------------- src/lib.rs | 7 +++- 3 files changed, 143 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a16c44f..eab35a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,9 +21,9 @@ checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bit-set" @@ -112,6 +112,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "const-fnv1a-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" + [[package]] name = "convert_case" version = "0.4.0" @@ -162,6 +168,66 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "facet" +version = "0.42.0" +source = "git+https://github.com/facet-rs/facet#914d99074209d720e532f8242230dccfa27f84b4" +dependencies = [ + "autocfg", + "facet-core", + "facet-macros", +] + +[[package]] +name = "facet-core" +version = "0.42.0" +source = "git+https://github.com/facet-rs/facet#914d99074209d720e532f8242230dccfa27f84b4" +dependencies = [ + "autocfg", + "const-fnv1a-hash", + "impls", +] + +[[package]] +name = "facet-macro-parse" +version = "0.42.0" +source = "git+https://github.com/facet-rs/facet#914d99074209d720e532f8242230dccfa27f84b4" +dependencies = [ + "facet-macro-types", + "proc-macro2", + "quote", +] + +[[package]] +name = "facet-macro-types" +version = "0.42.0" +source = "git+https://github.com/facet-rs/facet#914d99074209d720e532f8242230dccfa27f84b4" +dependencies = [ + "proc-macro2", + "quote", + "unsynn", +] + +[[package]] +name = "facet-macros" +version = "0.42.0" +source = "git+https://github.com/facet-rs/facet#914d99074209d720e532f8242230dccfa27f84b4" +dependencies = [ + "facet-macros-impl", +] + +[[package]] +name = "facet-macros-impl" +version = "0.42.0" +source = "git+https://github.com/facet-rs/facet#914d99074209d720e532f8242230dccfa27f84b4" +dependencies = [ + "facet-macro-parse", + "facet-macro-types", + "proc-macro2", + "quote", + "unsynn", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -200,6 +266,12 @@ dependencies = [ "ahash", ] +[[package]] +name = "impls" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a46645bbd70538861a90d0f26c31537cdf1e44aae99a794fb75a664b70951bc" + [[package]] name = "itertools" version = "0.10.5" @@ -254,6 +326,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mutants" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0287524726960e07b119cebd01678f852f147742ae0d925e6a520dca956126" + [[package]] name = "num-cmp" version = "0.1.0" @@ -284,6 +362,7 @@ dependencies = [ "borsh", "bytemuck", "derive-visitor", + "facet", "num-cmp", "num-traits", "proptest", @@ -306,9 +385,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] @@ -457,6 +536,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustix" version = "0.38.42" @@ -647,6 +732,17 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +[[package]] +name = "unsynn" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501a7adf1a4bd9951501e5c66621e972ef8874d787628b7f90e64f936ef7ec0a" +dependencies = [ + "mutants", + "proc-macro2", + "rustc-hash", +] + [[package]] name = "version_check" version = "0.9.5" diff --git a/Cargo.toml b/Cargo.toml index c13504e..e7625af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,44 +1,53 @@ [package] -name = "ordered-float" -version = "5.1.0" -authors = [ +name = "ordered-float" +version = "5.1.0" +authors = [ "Jonathan Reem ", "Matt Brubeck ", ] -license = "MIT" +license = "MIT" description = "Wrappers for total ordering on floats" -repository = "https://github.com/reem/rust-ordered-float" -readme = "README.md" -keywords = ["no_std", "ord", "f64", "f32", "sort"] -categories = ["science", "rust-patterns", "no-std"] -edition = "2021" +repository = "https://github.com/reem/rust-ordered-float" +readme = "README.md" +keywords = ["no_std", "ord", "f64", "f32", "sort"] +categories = ["science", "rust-patterns", "no-std"] +edition = "2021" rust-version = "1.63" [dependencies] -arbitrary = { version = "1.0.0", optional = true } -borsh = { version = "1.2.0", optional = true, default-features = false } -bytemuck = { version = "1.12.2", optional = true, default-features = false } +arbitrary = { version = "1.0.0", optional = true } +borsh = { version = "1.2.0", optional = true, default-features = false } +bytemuck = { version = "1.12.2", optional = true, default-features = false } derive-visitor = { version = "0.4.0", optional = true } -num-cmp = { version = "0.1.0", optional = true } +num-cmp = { version = "0.1.0", optional = true } num-traits = { version = "0.2.9", default-features = false } -proptest = { version = "1.0.0", optional = true } -rand = { version = "0.8.3", optional = true, default-features = false } -rkyv = { version = "0.7.41", optional = true, default-features = false, features = ["rend"] } -schemars = { version = "0.8.8", optional = true } -serde = { version = "1.0", optional = true, default-features = false } -speedy = { version = "0.8.3", optional = true, default-features = false } +proptest = { version = "1.0.0", optional = true } +rand = { version = "0.8.3", optional = true, default-features = false } +rkyv = { version = "0.7.41", optional = true, default-features = false, features = [ + "rend", +] } +schemars = { version = "0.8.8", optional = true } +serde = { version = "1.0", optional = true, default-features = false } +speedy = { version = "0.8.3", optional = true, default-features = false } +facet = { version = "0.42", optional = true, default-features = false, features = [ + "alloc", +] } [dev-dependencies] serde_test = "1.0" [features] -default = ["std"] -std = ["num-traits/std"] -libm = ["num-traits/libm"] -serde = ["dep:serde", "rand?/serde1"] +default = ["std"] +std = ["num-traits/std"] +libm = ["num-traits/libm"] +serde = ["dep:serde", "rand?/serde1"] +facet = ["dep:facet"] randtest = ["rand/std", "rand/std_rng"] -rkyv = ["rkyv_32"] -rkyv_16 = ["dep:rkyv", "rkyv?/size_16"] -rkyv_32 = ["dep:rkyv", "rkyv?/size_32"] -rkyv_64 = ["dep:rkyv", "rkyv?/size_64"] -rkyv_ck = ["rkyv?/validation"] +rkyv = ["rkyv_32"] +rkyv_16 = ["dep:rkyv", "rkyv?/size_16"] +rkyv_32 = ["dep:rkyv", "rkyv?/size_32"] +rkyv_64 = ["dep:rkyv", "rkyv?/size_64"] +rkyv_ck = ["rkyv?/validation"] + +[patch.crates-io] +facet = { git = "https://github.com/facet-rs/facet" } diff --git a/src/lib.rs b/src/lib.rs index dc44a4d..33353cd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -23,6 +23,8 @@ use core::ops::{ }; use core::str::FromStr; +#[cfg(feature = "facet")] +use facet::Facet; pub use num_traits::float::FloatCore; #[cfg(any(feature = "std", feature = "libm"))] use num_traits::real::Real; @@ -88,7 +90,8 @@ pub use impl_rand::{UniformNotNan, UniformOrdered}; doc = "[`bytemuck`]: https://docs.rs/bytemuck/1/" )] #[derive(Default, Clone, Copy)] -#[repr(transparent)] +#[cfg_attr(feature = "facet", derive(Facet))] +#[cfg_attr(feature = "facet", facet(transparent))] pub struct OrderedFloat(pub T); #[cfg(feature = "derive-visitor")] @@ -1246,6 +1249,8 @@ impl Num for OrderedFloat { doc = "[`bytemuck`]: https://docs.rs/bytemuck/1/" )] #[derive(PartialOrd, PartialEq, Default, Clone, Copy)] +#[cfg_attr(feature = "facet", derive(Facet))] +#[cfg_attr(feature = "facet", facet(transparent))] #[repr(transparent)] pub struct NotNan(T);