diff --git a/CHANGELOG.md b/CHANGELOG.md index cabb2b41..a217bcf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Add support for `no_alloc` targets. + ## 2.3.1 - Fix unit truncation in error strings. diff --git a/Cargo.lock b/Cargo.lock index dbc731f6..5e83ba2f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "arbitrary" @@ -25,9 +25,9 @@ checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bytesize" @@ -39,29 +39,28 @@ dependencies = [ "serde", "serde_core", "serde_json", - "toml", ] [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" -version = "4.5.47" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" +checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.47" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" +checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238" dependencies = [ "anstyle", "clap_lex", @@ -70,9 +69,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "condtype" @@ -115,12 +114,6 @@ dependencies = [ "regex", ] -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - [[package]] name = "errno" version = "0.3.14" @@ -128,47 +121,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.0", + "windows-sys 0.61.2", ] [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", "wasi", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" - -[[package]] -name = "indexmap" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" -dependencies = [ - "equivalent", - "hashbrown", -] - [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.181" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "459427e2af2b9c839b132acb702a1c654d95e10f8c326bfc2ad11310e458b1c5" [[package]] name = "linux-raw-sys" @@ -178,21 +155,21 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "memchr" -version = "2.7.5" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -210,9 +187,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] @@ -237,9 +214,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -249,9 +226,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -260,35 +237,29 @@ dependencies = [ [[package]] name = "regex-lite" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943f41321c63ef1c92fd763bfe054d2668f7f225a5c29f0105903dc2fc04ba30" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.0", + "windows-sys 0.61.2", ] -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - [[package]] name = "serde" version = "1.0.228" @@ -321,31 +292,22 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", -] - -[[package]] -name = "serde_spanned" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" -dependencies = [ - "serde", + "zmij", ] [[package]] name = "syn" -version = "2.0.106" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -362,50 +324,11 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "toml" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "toml_parser", - "toml_writer", - "winnow", -] - -[[package]] -name = "toml_datetime" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_parser" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" -dependencies = [ - "winnow", -] - -[[package]] -name = "toml_writer" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" - [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e" [[package]] name = "wasi" @@ -415,15 +338,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - -[[package]] -name = "windows-link" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" @@ -436,20 +353,20 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.1.3", + "windows-link", "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", @@ -462,54 +379,54 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] -name = "winnow" -version = "0.7.13" +name = "zmij" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "4de98dfa5d5b7fef4ee834d0073d560c9ca7b6c46a71d058c48db7960f8cfaf7" diff --git a/Cargo.toml b/Cargo.toml index 973b9f5b..4490627f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,8 @@ all-features = true [features] default = ["std"] -std = [] +alloc = [] +std = ["alloc"] arbitrary = ["dep:arbitrary"] serde = ["dep:serde_core"] @@ -35,7 +36,6 @@ divan = "0.1" quickcheck = "1" serde = { version = "1", features = ["derive"] } serde_json = "1" -toml = "0.9" [[bench]] name = "display" diff --git a/ensure-no-std/Cargo.toml b/ensure-no-std/Cargo.toml index f756489b..1c5553f9 100644 --- a/ensure-no-std/Cargo.toml +++ b/ensure-no-std/Cargo.toml @@ -11,4 +11,4 @@ panic = "abort" panic = "abort" [dependencies] -bytesize = { path = "..", default-features = false } +bytesize = { path = "..", default-features = false, features = ["alloc"] } diff --git a/justfile b/justfile index 437c3e90..aa79d2b4 100644 --- a/justfile +++ b/justfile @@ -48,9 +48,12 @@ test toolchain="": # Downgrade dev-dependencies necessary to run MSRV checks/tests. [private] downgrade-for-msrv: - cargo update -p=divan --precise=0.1.15 - cargo update -p=clap --precise=4.3.24 - cargo update -p=clap_lex --precise=0.5.0 + cargo update -p=divan --precise=0.1.15 # next ver: 1.80 + cargo update -p=clap --precise=4.3.24 # next ver: 1.74 + cargo update -p=clap_lex --precise=0.5.0 # next ver: 1.74 + cargo update -p=quickcheck --precise=1.0.3 # next ver: 1.85 + cargo update -p=zmij --precise=1.0.19 # next ver: 1.71 + cargo update -p=unicode-ident --precise=1.0.22 # next ver: 1.71 # Test workspace using MSRV. [group("test")] diff --git a/src/display.rs b/src/display.rs index 0cb2e62e..4cde63f8 100644 --- a/src/display.rs +++ b/src/display.rs @@ -67,7 +67,8 @@ impl Format { /// ByteSize::kb(42).display().si_short().to_string(), /// ); /// ``` -#[derive(Debug, Clone)] +#[derive(Clone)] +#[cfg_attr(feature = "alloc", derive(Debug))] pub struct Display { pub(crate) byte_size: ByteSize, pub(crate) format: Format, @@ -184,6 +185,7 @@ fn ideal_unit_std(size: f64, unit_base: f64) -> usize { } } +#[cfg(feature = "alloc")] #[cfg(test)] mod tests { use alloc::{format, string::ToString as _}; diff --git a/src/lib.rs b/src/lib.rs index 9291a343..5db4e522 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -43,21 +43,27 @@ #![cfg_attr(not(feature = "std"), no_std)] +#[cfg(feature = "alloc")] extern crate alloc; +#[cfg(feature = "alloc")] use alloc::string::ToString as _; -use core::{fmt, ops}; +#[cfg(feature = "alloc")] +use core::fmt; +use core::ops; #[cfg(feature = "arbitrary")] mod arbitrary; mod display; mod parse; -#[cfg(feature = "serde")] +#[cfg(all(feature = "alloc", feature = "serde"))] mod serde; pub use self::display::Display; use self::display::Format; -pub use self::parse::{Unit, UnitParseError}; +pub use self::parse::Unit; +#[cfg(feature = "alloc")] +pub use self::parse::UnitParseError; /// Number of bytes in 1 kilobyte. pub const KB: u64 = 1_000; @@ -331,6 +337,7 @@ impl ByteSize { } } +#[cfg(feature = "alloc")] impl fmt::Display for ByteSize { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let display = self.display(); @@ -344,6 +351,7 @@ impl fmt::Display for ByteSize { } } +#[cfg(feature = "alloc")] impl fmt::Debug for ByteSize { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{} ({} bytes)", self, self.0) @@ -471,6 +479,7 @@ where } #[cfg(test)] +#[cfg(feature = "alloc")] mod property_tests { use alloc::string::{String, ToString as _}; @@ -509,6 +518,7 @@ mod property_tests { #[cfg(test)] mod tests { + #[cfg(feature = "alloc")] use alloc::format; use super::*; @@ -571,11 +581,13 @@ mod tests { assert_eq!(2.613772153284117, ByteSize::b(2873872874893).as_tib()); } + #[cfg(feature = "alloc")] #[track_caller] fn assert_display(expected: &str, b: ByteSize) { assert_eq!(expected, format!("{b}")); } + #[cfg(feature = "alloc")] #[test] fn test_display() { assert_display("215 B", ByteSize::b(215)); @@ -588,6 +600,7 @@ mod tests { assert_display("15.0 EiB", ByteSize::eib(15)); } + #[cfg(feature = "alloc")] #[test] fn test_display_alignment() { assert_eq!("|357 B |", format!("|{:10}|", ByteSize(357))); @@ -600,6 +613,7 @@ mod tests { assert_eq!("|--357 B---|", format!("|{:-^10}|", ByteSize(357))); } + #[cfg(feature = "alloc")] #[test] fn test_default() { assert_eq!(ByteSize::b(0), ByteSize::default()); diff --git a/src/parse.rs b/src/parse.rs index ef107db1..fc4015cc 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -1,8 +1,12 @@ +#[cfg(feature = "alloc")] use alloc::{borrow::ToOwned as _, format, string::String}; +#[cfg(feature = "alloc")] use core::{fmt, str}; +#[cfg(feature = "alloc")] use super::ByteSize; +#[cfg(feature = "alloc")] impl str::FromStr for ByteSize { type Err = String; @@ -26,6 +30,7 @@ impl str::FromStr for ByteSize { } } +#[cfg(feature = "alloc")] fn take_while

(s: &str, mut predicate: P) -> &str where P: FnMut(char) -> bool, @@ -38,6 +43,7 @@ where &s[..offset] } +#[cfg(feature = "alloc")] fn skip_while

(s: &str, mut predicate: P) -> &str where P: FnMut(char) -> bool, @@ -198,6 +204,7 @@ mod impl_ops { } } +#[cfg(feature = "alloc")] impl str::FromStr for Unit { type Err = UnitParseError; @@ -246,6 +253,7 @@ impl str::FromStr for Unit { } /// Safely truncates +#[cfg(feature = "alloc")] fn to_string_truncate(unit: &str) -> String { const MAX_UNIT_LEN: usize = 3; @@ -269,9 +277,11 @@ fn to_string_truncate(unit: &str) -> String { } /// Error returned when parsing a [`Unit`] fails. +#[cfg(feature = "alloc")] #[derive(Debug)] pub struct UnitParseError(String); +#[cfg(feature = "alloc")] impl fmt::Display for UnitParseError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "Failed to parse unit \"{}\"", self.0) @@ -282,6 +292,7 @@ impl fmt::Display for UnitParseError { impl std::error::Error for UnitParseError {} #[cfg(test)] +#[cfg(feature = "alloc")] mod tests { use alloc::string::ToString as _; diff --git a/src/serde.rs b/src/serde.rs index de588b68..bef0dc2e 100644 --- a/src/serde.rs +++ b/src/serde.rs @@ -86,11 +86,11 @@ mod tests { let s = serde_json::from_str::(r#"{ "x": 1048576 }"#).unwrap(); assert_eq!(s.x, "1 MiB".parse::().unwrap()); - let s = toml::from_str::(r#"x = "2.5 MiB""#).unwrap(); + let s = serde_json::from_str::(r#"{ "x": "2.5 MiB" }"#).unwrap(); assert_eq!(s.x, "2.5 MiB".parse::().unwrap()); // i64 MAX - let s = toml::from_str::(r#"x = "9223372036854775807""#).unwrap(); + let s = serde_json::from_str::(r#"{ "x": 9223372036854775807 }"#).unwrap(); assert_eq!(s.x, "9223372036854775807".parse::().unwrap()); }