Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pycrdt for openSUSE:Factory checked in at 2024-09-10 21:13:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pycrdt (Old) and /work/SRC/openSUSE:Factory/.python-pycrdt.new.17570 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pycrdt" Tue Sep 10 21:13:20 2024 rev:5 rq:1199728 version:0.9.11 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pycrdt/python-pycrdt.changes 2024-09-09 14:43:48.993145835 +0200 +++ /work/SRC/openSUSE:Factory/.python-pycrdt.new.17570/python-pycrdt.changes 2024-09-10 21:14:38.645564216 +0200 @@ -1,0 +2,5 @@ +Mon Sep 9 18:25:15 UTC 2024 - Ben Greiner <c...@bnavigator.de> + +- Bump upper limit of trio gh#jupyter-server/pycrdt#160 + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pycrdt.spec ++++++ --- /var/tmp/diff_new_pack.nSzJis/_old 2024-09-10 21:14:39.513600383 +0200 +++ /var/tmp/diff_new_pack.nSzJis/_new 2024-09-10 21:14:39.517600549 +0200 @@ -34,7 +34,7 @@ BuildRequires: %{python_module pytest >= 7.4.2} BuildRequires: %{python_module anyio >= 4.4.0 with %python-anyio < 5} BuildRequires: %{python_module exceptiongroup if %python-base < 3.11} -BuildRequires: %{python_module trio >= 0.25.1 with %python-trio < 0.26} +BuildRequires: %{python_module trio >= 0.25.1 with %python-trio < 0.27} # /SECTION %python_subpackages @@ -49,6 +49,8 @@ %prep %autosetup -p1 -n pycrdt-%{version} -a1 +# gh#jupyter-server/pycrdt#160 +sed -i '/trio/ s/<0.26/<0.27/' pyproject.toml %build %pyproject_wheel ++++++ vendor.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Cargo.lock new/Cargo.lock --- old/Cargo.lock 1970-01-01 01:00:00.000000000 +0100 +++ new/Cargo.lock 1970-01-01 01:00:00.000000000 +0100 @@ -204,9 +204,9 @@ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot_core" @@ -345,18 +345,18 @@ [[package]] name = "serde" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/parking/.cargo-checksum.json new/vendor/parking/.cargo-checksum.json --- old/vendor/parking/.cargo-checksum.json 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/parking/.cargo-checksum.json 1970-01-01 01:00:00.000000000 +0100 @@ -1 +1 @@ -{"files":{"CHANGELOG.md":"388fbcffc436eeb94c3415d4fc3869471d440c6a1eae0f9e57752f0ea6468373","Cargo.toml":"54465df37dd6011d2de34226996dcc73a0249e2688789ceb7ee3fb90b9f6c6ae","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","LICENSE-THIRD-PARTY":"9a6d7a3c1b8edcc706c4b6c37f8dae9a77f02c7f9051df603f975db136b55419","README.md":"c3c9a484f17cf3e0596df7337591f68e88d45b43808b8ca0083a1768c9011ecb","src/lib.rs":"6819c3a1e5ed4237a3ed1497f3bb7ec3daeaf216adc5fa03509aba42fc7cbf34","tests/loom.rs":"27d5dd8afc0241d9c62a0e7678b0984a9de9fb6859ef145b69500f9c8e2e4c93","tests/parking.rs":"202b392df3bbce1cbd4045d9269f62dd12abc725f3f17fe92feb561c3eafd35c"},"package":"bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"} \ No newline at end of file +{"files":{"CHANGELOG.md":"cde9fe20ea7d438e13aa08a82be3b47f851cf59ca526c4d3bc755e2e5acba95e","Cargo.toml":"06994b8edc975b1af488f385bafc91f3c6c4c79394fc2d2e662cc8f05dd786dd","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","LICENSE-THIRD-PARTY":"9a6d7a3c1b8edcc706c4b6c37f8dae9a77f02c7f9051df603f975db136b55419","README.md":"c2d29c2e898bc73cfece19b7ce7fe1763f6e1f1471f89376ae28043ad4c0bd3f","src/lib.rs":"775370db46257b33510128938c6693dac2ccf9f27a472e503967b1d1ae18461d","tests/loom.rs":"e13cbefd9e838a0010c555f1c4c5a9917b75c6c9518f45f0ebe138f5e7d5f968","tests/parking.rs":"63fafaf40f613bdcadf3fd5238ae72ce00cd7540f05d77888c7ae0d362eadc52"},"package":"f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/parking/CHANGELOG.md new/vendor/parking/CHANGELOG.md --- old/vendor/parking/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/parking/CHANGELOG.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +1,7 @@ +# Version 2.2.1 + +- Specify the reason for using `parking` in the docs. (#25) + # Version 2.2.0 - Implement `From<Unparker>` for `Waker`. This enables `Waker`s to be constructed from `Unparker`s without allocating. (#18) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/parking/Cargo.toml new/vendor/parking/Cargo.toml --- old/vendor/parking/Cargo.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/parking/Cargo.toml 1970-01-01 01:00:00.000000000 +0100 @@ -13,12 +13,17 @@ edition = "2018" rust-version = "1.51" name = "parking" -version = "2.2.0" +version = "2.2.1" authors = [ "Stjepan Glavina <stjep...@gmail.com>", "The Rust Project Developers", ] +build = false exclude = ["/.*"] +autobins = false +autoexamples = false +autotests = false +autobenches = false description = "Thread parking and unparking" homepage = "https://github.com/smol-rs/parking" documentation = "https://docs.rs/parking" @@ -34,6 +39,18 @@ license = "Apache-2.0 OR MIT" repository = "https://github.com/smol-rs/parking" +[lib] +name = "parking" +path = "src/lib.rs" + +[[test]] +name = "loom" +path = "tests/loom.rs" + +[[test]] +name = "parking" +path = "tests/parking.rs" + [dev-dependencies.easy-parallel] version = "3.0.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/parking/README.md new/vendor/parking/README.md --- old/vendor/parking/README.md 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/parking/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -11,9 +11,20 @@ Thread parking and unparking. -A parker is in either notified or unnotified state. Method `park()` blocks -the current thread until the parker becomes notified and then puts it back into unnotified -state. Method `unpark()` puts it into notified state. +A `Parker` is in either the notified or unnotified state. The `park()` method blocks +the current thread until the `Parker` becomes notified and then puts it back into the unnotified +state. The `unpark()` method puts it into the notified state. + +This API is similar to [`thread::park()`] and [`Thread::unpark()`] from the standard library. +The difference is that the state "token" managed by those functions is shared across an entire +thread, and anyone can call [`thread::current()`] to access it. If you use `park` and `unpark`, +but you also call a function that uses `park` and `unpark` internally, that function could +cause a deadlock by consuming a wakeup that was intended for you. The `Parker` object in this +crate avoids that problem by managing its own state, which isn't shared with unrelated callers. + +[`thread::park()`]: https://doc.rust-lang.org/std/thread/fn.park.html +[`Thread::unpark()`]: https://doc.rust-lang.org/std/thread/struct.Thread.html#method.unpark +[`thread::current()`]: https://doc.rust-lang.org/std/thread/fn.current.html ## Examples diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/parking/src/lib.rs new/vendor/parking/src/lib.rs --- old/vendor/parking/src/lib.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/parking/src/lib.rs 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +1,19 @@ //! Thread parking and unparking. //! -//! A parker is in either notified or unnotified state. Method [`park()`][`Parker::park()`] blocks -//! the current thread until the parker becomes notified and then puts it back into unnotified -//! state. Method [`unpark()`][`Unparker::unpark()`] puts it into notified state. +//! A [`Parker`] is in either the notified or unnotified state. The [`park()`][`Parker::park()`] method blocks +//! the current thread until the [`Parker`] becomes notified and then puts it back into the unnotified +//! state. The [`unpark()`][`Unparker::unpark()`] method puts it into the notified state. +//! +//! This API is similar to [`thread::park()`] and [`Thread::unpark()`] from the standard library. +//! The difference is that the state "token" managed by those functions is shared across an entire +//! thread, and anyone can call [`thread::current()`] to access it. If you use `park` and `unpark`, +//! but you also call a function that uses `park` and `unpark` internally, that function could +//! cause a deadlock by consuming a wakeup that was intended for you. The [`Parker`] object in this +//! crate avoids that problem by managing its own state, which isn't shared with unrelated callers. +//! +//! [`thread::park()`]: https://doc.rust-lang.org/std/thread/fn.park.html +//! [`Thread::unpark()`]: https://doc.rust-lang.org/std/thread/struct.Thread.html#method.unpark +//! [`thread::current()`]: https://doc.rust-lang.org/std/thread/fn.current.html //! //! # Examples //! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/parking/tests/loom.rs new/vendor/parking/tests/loom.rs --- old/vendor/parking/tests/loom.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/parking/tests/loom.rs 1970-01-01 01:00:00.000000000 +0100 @@ -12,3 +12,17 @@ u.unpark(); }); } + +#[test] +fn yield_then_unpark() { + loom::model(|| { + let (p, u) = parking::pair(); + + loom::thread::spawn(move || { + loom::thread::yield_now(); + u.unpark(); + }); + + p.park(); + }); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/parking/tests/parking.rs new/vendor/parking/tests/parking.rs --- old/vendor/parking/tests/parking.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/parking/tests/parking.rs 1970-01-01 01:00:00.000000000 +0100 @@ -1,15 +1,16 @@ +use std::future::Future; +use std::task::{Context, Poll, Waker}; use std::thread::sleep; -use std::time::Duration; -use std::u32; +use std::time::{Duration, Instant}; use easy_parallel::Parallel; use parking::Parker; #[test] fn park_timeout_unpark_before() { - let p = Parker::new(); + let (p, u) = parking::pair(); for _ in 0..10 { - p.unparker().unpark(); + u.unpark(); p.park_timeout(Duration::from_millis(u32::MAX as u64)); } } @@ -39,3 +40,106 @@ .run(); } } + +#[test] +fn park_deadline_unpark_called_other_thread() { + for _ in 0..10 { + let p = Parker::new(); + let u = p.unparker(); + + Parallel::new() + .add(move || { + sleep(Duration::from_millis(50)); + u.unpark(); + }) + .add(move || { + let deadline = Instant::now() + Duration::from_micros(u32::MAX as u64); + p.park_deadline(deadline); + }) + .run(); + } +} + +#[test] +fn park_then_wake_from_other_thread() { + for _ in 0..10 { + let (p, u) = parking::pair(); + + Parallel::new() + .add(move || { + sleep(Duration::from_millis(50)); + u.unpark(); + }) + .add(move || { + let start = Instant::now(); + p.park(); + assert!(Instant::now().duration_since(start) >= Duration::from_millis(50)); + }) + .run(); + } +} + +#[test] +fn unpark() { + let p = Parker::default(); + + assert!(p.unpark()); + assert!(!p.unpark()); +} + +#[test] +fn same_parker() { + let (p1, u1) = parking::pair(); + let (p2, u2) = parking::pair(); + + assert!(u1.will_unpark(&p1)); + assert!(!u1.will_unpark(&p2)); + assert!(u1.same_parker(&u1.clone())); + assert!(!u1.same_parker(&u2)); +} + +#[test] +fn waker() { + let (p, u) = parking::pair(); + let waker: Waker = u.into(); + + waker.wake(); + assert!(p.park_timeout(Duration::from_secs(2))); +} + +#[test] +fn future() { + struct Yield(bool); + + impl Future for Yield { + type Output = (); + + fn poll(mut self: std::pin::Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { + if self.0 { + Poll::Ready(()) + } else { + self.0 = true; + cx.waker().wake_by_ref(); + Poll::Pending + } + } + } + + let (p, u) = parking::pair(); + let waker = u.into(); + let mut context = Context::from_waker(&waker); + + let mut future = Box::pin(Yield(false)); + + assert!(!p.park_timeout(Duration::from_millis(0))); + assert_eq!(future.as_mut().poll(&mut context), Poll::Pending); + assert!(p.park_timeout(Duration::from_millis(0))); + assert_eq!(future.as_mut().poll(&mut context), Poll::Ready(())); + assert!(!p.park_timeout(Duration::from_millis(0))); +} + +#[test] +fn debug_for_coverage() { + let (p, u) = parking::pair(); + let _ = format!("{:?} {:?}", &p, &u); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/.cargo-checksum.json new/vendor/serde/.cargo-checksum.json --- old/vendor/serde/.cargo-checksum.json 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/.cargo-checksum.json 1970-01-01 01:00:00.000000000 +0100 @@ -1 +1 @@ -{"files":{"Cargo.toml":"68cf9c1f5e3213b996b890b110c4797fe537515e7b2558e32c29698bbd931320","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"731c044fc5f98b37a89e9049c9214267db98763309cb63146b45c029640f82a3","build.rs":"8653bc5c754a533b55849c29ccb0e75f06758d415cd768c94c3e08e790c2e953","crates-io.md":"407d92b2932923f8708aaf31db266fd7db32e2b0afa6c569d134b680b74a1920","src/de/format.rs":"c85071b016df643b161859682d21ce34fa0ebf2a3bdbeeea69859da48f5d934f","src/de/ignored_any.rs":"6480f2b2a83dc4764d01b2eec7309729eef2492eede2e5ee98d23a60b05198eb","src/de/impls.rs":"f1d691a1bd4f0404c590eb217bab1d07c7d56ff9e874da6ab28d4affa7fef94c","src/de/mod.rs":"14880617db97f5bd68f991248051c0327098730e6e0f15c763fc0f0048ce3dbe","src/de/seed.rs":"045d890712a04eb33ffc5a021e5d948a63c89402b8ffeea749df2171b7484f8f","src/de/size_hint.rs":"fff83dc39d30e75e8e611991f9c5399188a1aad23a6462dbca2 c8b62655cfedb","src/de/value.rs":"0c485908b1f755e4750af0aefa2132460dadbcf30919c15c06ca795a92d96430","src/integer128.rs":"29ef30b7d94507b34807090e68173767cdc7aff62edccd38affe69e75338dddc","src/lib.rs":"6f5ec7c32e2d609815d08ccba25bc3d3e985725de9b65c9fb95c479a05d76ea6","src/macros.rs":"0d4b392ed6fe529fda2c5439c8547fe9717e64f528bfd01f633bb725f98b53cd","src/private/de.rs":"c12df7ee5ac43c9c30389e1f02d2bb5c206b1b850e598963dfedeb303e448f5a","src/private/doc.rs":"b222decb40321190155209e1b8a5a52e3adfaa470047e379e664b71e0320655a","src/private/mod.rs":"b8f0c348621d91dd9da3db83d8877e70bc61ad0a2dc2d6fb57c6fc2c2cbafa26","src/private/ser.rs":"4343ccbe0b345288dce0dbf1023c6082ef42ae7073c911b535e3d9e88c3aa472","src/ser/fmt.rs":"d1cfd9623605413e45a23ef778d97f0ac4da4adaed23739f1f9d7414b30e384b","src/ser/impls.rs":"585908d859fc89adcc1c6a7acc8f12467feba7daeb8c44ae28d25fd40d140f2c","src/ser/impossible.rs":"5c325da8e0370ab22abe1e15d8af1dc7a1707b127508f61e720cd7f0caa80593","src/ser/mod.rs":"eee3a4ecfc0999367 7df0be4772c1c7edde43ec9591be0b5595cb113a548a8a2","src/std_error.rs":"25a07149e2e468747ffa5a58051c7f93d7b3c0fa0372f012a96c97ec8ab03b97"},"package":"99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09"} \ No newline at end of file +{"files":{"Cargo.toml":"6d6add51c2e5e089ce4597070f2a2770d3caaf07da77070b01afe7a2dec19592","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"731c044fc5f98b37a89e9049c9214267db98763309cb63146b45c029640f82a3","build.rs":"a98eaa82c783fdb4169d1646c06028ec5cb82937d39ee127ec8ed33651d2f238","crates-io.md":"407d92b2932923f8708aaf31db266fd7db32e2b0afa6c569d134b680b74a1920","src/de/ignored_any.rs":"6480f2b2a83dc4764d01b2eec7309729eef2492eede2e5ee98d23a60b05198eb","src/de/impls.rs":"18ed2d8221b04c7fe8f7a757445a04cd1d28c887f46f7a8717afff10eada146f","src/de/mod.rs":"b34735b2e5c9c93e9857540f24cba393f1b767a2ba33d469c2d28f15049e8f6c","src/de/seed.rs":"045d890712a04eb33ffc5a021e5d948a63c89402b8ffeea749df2171b7484f8f","src/de/size_hint.rs":"fff83dc39d30e75e8e611991f9c5399188a1aad23a6462dbca2c8b62655cfedb","src/de/value.rs":"0c485908b1f755e4750af0aefa2132460dadbcf30919c15c06ca 795a92d96430","src/format.rs":"c85071b016df643b161859682d21ce34fa0ebf2a3bdbeeea69859da48f5d934f","src/integer128.rs":"29ef30b7d94507b34807090e68173767cdc7aff62edccd38affe69e75338dddc","src/lib.rs":"ff721a04872d840e4a9aabd0cbd98c1a60ae3eefd6237f5c6c1474b9549e4f04","src/macros.rs":"0d4b392ed6fe529fda2c5439c8547fe9717e64f528bfd01f633bb725f98b53cd","src/private/de.rs":"c12df7ee5ac43c9c30389e1f02d2bb5c206b1b850e598963dfedeb303e448f5a","src/private/doc.rs":"b222decb40321190155209e1b8a5a52e3adfaa470047e379e664b71e0320655a","src/private/mod.rs":"b8f0c348621d91dd9da3db83d8877e70bc61ad0a2dc2d6fb57c6fc2c2cbafa26","src/private/ser.rs":"4343ccbe0b345288dce0dbf1023c6082ef42ae7073c911b535e3d9e88c3aa472","src/ser/fmt.rs":"d1cfd9623605413e45a23ef778d97f0ac4da4adaed23739f1f9d7414b30e384b","src/ser/impls.rs":"00b58a84f7c07b2f575219d6d0745fd1258dae9b9c8ec5b9b299a712c482b1a3","src/ser/impossible.rs":"5c325da8e0370ab22abe1e15d8af1dc7a1707b127508f61e720cd7f0caa80593","src/ser/mod.rs":"9aab34f08defdd6be044 383ad41aeb59acee3abe7cacb73ac5bc8c70f747a67e","src/std_error.rs":"25a07149e2e468747ffa5a58051c7f93d7b3c0fa0372f012a96c97ec8ab03b97"},"package":"c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a"} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/Cargo.toml new/vendor/serde/Cargo.toml --- old/vendor/serde/Cargo.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/Cargo.toml 1970-01-01 01:00:00.000000000 +0100 @@ -13,7 +13,7 @@ edition = "2018" rust-version = "1.31" name = "serde" -version = "1.0.209" +version = "1.0.210" authors = [ "Erick Tryzelaar <erick.tryzel...@gmail.com>", "David Tolnay <dtol...@gmail.com>", @@ -76,4 +76,4 @@ unstable = [] [target."cfg(any())".dependencies.serde_derive] -version = "=1.0.209" +version = "=1.0.210" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/build.rs new/vendor/serde/build.rs --- old/vendor/serde/build.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/build.rs 1970-01-01 01:00:00.000000000 +0100 @@ -15,6 +15,8 @@ if minor >= 77 { println!("cargo:rustc-check-cfg=cfg(no_core_cstr)"); + println!("cargo:rustc-check-cfg=cfg(no_core_error)"); + println!("cargo:rustc-check-cfg=cfg(no_core_net)"); println!("cargo:rustc-check-cfg=cfg(no_core_num_saturating)"); println!("cargo:rustc-check-cfg=cfg(no_core_try_from)"); println!("cargo:rustc-check-cfg=cfg(no_diagnostic_namespace)"); @@ -86,11 +88,23 @@ println!("cargo:rustc-cfg=no_core_num_saturating"); } + // Support for core::net stabilized in Rust 1.77. + // https://blog.rust-lang.org/2024/03/21/Rust-1.77.0.html + if minor < 77 { + println!("cargo:rustc-cfg=no_core_net"); + } + // Support for the `#[diagnostic]` tool attribute namespace // https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#diagnostic-attributes if minor < 78 { println!("cargo:rustc-cfg=no_diagnostic_namespace"); } + + // The Error trait became available in core in 1.81. + // https://blog.rust-lang.org/2024/09/05/Rust-1.81.0.html#coreerrorerror + if minor < 81 { + println!("cargo:rustc-cfg=no_core_error"); + } } fn rustc_minor_version() -> Option<u32> { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/src/de/format.rs new/vendor/serde/src/de/format.rs --- old/vendor/serde/src/de/format.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/src/de/format.rs 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -use crate::lib::fmt::{self, Write}; -use crate::lib::str; - -pub(super) struct Buf<'a> { - bytes: &'a mut [u8], - offset: usize, -} - -impl<'a> Buf<'a> { - pub fn new(bytes: &'a mut [u8]) -> Self { - Buf { bytes, offset: 0 } - } - - pub fn as_str(&self) -> &str { - let slice = &self.bytes[..self.offset]; - unsafe { str::from_utf8_unchecked(slice) } - } -} - -impl<'a> Write for Buf<'a> { - fn write_str(&mut self, s: &str) -> fmt::Result { - if self.offset + s.len() > self.bytes.len() { - Err(fmt::Error) - } else { - self.bytes[self.offset..self.offset + s.len()].copy_from_slice(s.as_bytes()); - self.offset += s.len(); - Ok(()) - } - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/src/de/impls.rs new/vendor/serde/src/de/impls.rs --- old/vendor/serde/src/de/impls.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/src/de/impls.rs 1970-01-01 01:00:00.000000000 +0100 @@ -1583,12 +1583,9 @@ //////////////////////////////////////////////////////////////////////////////// +#[cfg(any(feature = "std", not(no_core_net)))] macro_rules! parse_ip_impl { - ( - $(#[$attr:meta])* - $ty:ty, $expecting:expr, $size:tt - ) => { - $(#[$attr])* + ($ty:ty, $expecting:expr, $size:tt) => { impl<'de> Deserialize<'de> for $ty { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where @@ -1604,7 +1601,7 @@ }; } -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] macro_rules! variant_identifier { ( $name_kind:ident ($($variant:ident; $bytes:expr; $index:expr),*) @@ -1679,7 +1676,7 @@ } } -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] macro_rules! deserialize_enum { ( $name:ident $name_kind:ident ($($variant:ident; $bytes:expr; $index:expr),*) @@ -1716,8 +1713,7 @@ } } -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +#[cfg(any(feature = "std", not(no_core_net)))] impl<'de> Deserialize<'de> for net::IpAddr { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where @@ -1736,25 +1732,18 @@ } } -parse_ip_impl! { - #[cfg(feature = "std")] - #[cfg_attr(docsrs, doc(cfg(feature = "std")))] - net::Ipv4Addr, "IPv4 address", 4 -} +#[cfg(any(feature = "std", not(no_core_net)))] +parse_ip_impl!(net::Ipv4Addr, "IPv4 address", 4); -parse_ip_impl! { - #[cfg(feature = "std")] - #[cfg_attr(docsrs, doc(cfg(feature = "std")))] - net::Ipv6Addr, "IPv6 address", 16 -} +#[cfg(any(feature = "std", not(no_core_net)))] +parse_ip_impl!(net::Ipv6Addr, "IPv6 address", 16); +#[cfg(any(feature = "std", not(no_core_net)))] macro_rules! parse_socket_impl { ( - $(#[$attr:meta])* $ty:ty, $expecting:tt, $new:expr, ) => { - $(#[$attr])* impl<'de> Deserialize<'de> for $ty { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where @@ -1770,8 +1759,7 @@ }; } -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +#[cfg(any(feature = "std", not(no_core_net)))] impl<'de> Deserialize<'de> for net::SocketAddr { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where @@ -1790,16 +1778,14 @@ } } +#[cfg(any(feature = "std", not(no_core_net)))] parse_socket_impl! { - #[cfg(feature = "std")] - #[cfg_attr(docsrs, doc(cfg(feature = "std")))] net::SocketAddrV4, "IPv4 socket address", |(ip, port)| net::SocketAddrV4::new(ip, port), } +#[cfg(any(feature = "std", not(no_core_net)))] parse_socket_impl! { - #[cfg(feature = "std")] - #[cfg_attr(docsrs, doc(cfg(feature = "std")))] net::SocketAddrV6, "IPv6 socket address", |(ip, port)| net::SocketAddrV6::new(ip, port, 0, 0), } @@ -3160,13 +3146,13 @@ AtomicU64 "64" } -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] struct FromStrVisitor<T> { expecting: &'static str, ty: PhantomData<T>, } -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] impl<T> FromStrVisitor<T> { fn new(expecting: &'static str) -> Self { FromStrVisitor { @@ -3176,7 +3162,7 @@ } } -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] impl<'de, T> Visitor<'de> for FromStrVisitor<T> where T: str::FromStr, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/src/de/mod.rs new/vendor/serde/src/de/mod.rs --- old/vendor/serde/src/de/mod.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/src/de/mod.rs 1970-01-01 01:00:00.000000000 +0100 @@ -118,17 +118,16 @@ pub mod value; -mod format; mod ignored_any; mod impls; pub(crate) mod size_hint; pub use self::ignored_any::IgnoredAny; -#[cfg(not(any(feature = "std", feature = "unstable")))] +#[cfg(all(not(feature = "std"), no_core_error))] #[doc(no_inline)] pub use crate::std_error::Error as StdError; -#[cfg(all(feature = "unstable", not(feature = "std")))] +#[cfg(not(any(feature = "std", no_core_error)))] #[doc(no_inline)] pub use core::error::Error as StdError; #[cfg(feature = "std")] @@ -1374,7 +1373,7 @@ E: Error, { let mut buf = [0u8; 58]; - let mut writer = format::Buf::new(&mut buf); + let mut writer = crate::format::Buf::new(&mut buf); fmt::Write::write_fmt(&mut writer, format_args!("integer `{}` as i128", v)).unwrap(); Err(Error::invalid_type( Unexpected::Other(writer.as_str()), @@ -1436,7 +1435,7 @@ E: Error, { let mut buf = [0u8; 57]; - let mut writer = format::Buf::new(&mut buf); + let mut writer = crate::format::Buf::new(&mut buf); fmt::Write::write_fmt(&mut writer, format_args!("integer `{}` as u128", v)).unwrap(); Err(Error::invalid_type( Unexpected::Other(writer.as_str()), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/src/format.rs new/vendor/serde/src/format.rs --- old/vendor/serde/src/format.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/src/format.rs 1970-01-01 01:00:00.000000000 +0100 @@ -0,0 +1,30 @@ +use crate::lib::fmt::{self, Write}; +use crate::lib::str; + +pub(super) struct Buf<'a> { + bytes: &'a mut [u8], + offset: usize, +} + +impl<'a> Buf<'a> { + pub fn new(bytes: &'a mut [u8]) -> Self { + Buf { bytes, offset: 0 } + } + + pub fn as_str(&self) -> &str { + let slice = &self.bytes[..self.offset]; + unsafe { str::from_utf8_unchecked(slice) } + } +} + +impl<'a> Write for Buf<'a> { + fn write_str(&mut self, s: &str) -> fmt::Result { + if self.offset + s.len() > self.bytes.len() { + Err(fmt::Error) + } else { + self.bytes[self.offset..self.offset + s.len()].copy_from_slice(s.as_bytes()); + self.offset += s.len(); + Ok(()) + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/src/lib.rs new/vendor/serde/src/lib.rs --- old/vendor/serde/src/lib.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/src/lib.rs 1970-01-01 01:00:00.000000000 +0100 @@ -95,7 +95,7 @@ //////////////////////////////////////////////////////////////////////////////// // Serde types in rustdoc of other crates get linked to here. -#![doc(html_root_url = "https://docs.rs/serde/1.0.209")] +#![doc(html_root_url = "https://docs.rs/serde/1.0.210")] // Support using Serde without the standard library! #![cfg_attr(not(feature = "std"), no_std)] // Show which crate feature enables conditionally compiled APIs in documentation. @@ -238,8 +238,13 @@ #[cfg(feature = "std")] pub use std::ffi::CString; + #[cfg(all(not(no_core_net), not(feature = "std")))] + pub use self::core::net; #[cfg(feature = "std")] - pub use std::{error, net}; + pub use std::net; + + #[cfg(feature = "std")] + pub use std::error; #[cfg(feature = "std")] pub use std::collections::{HashMap, HashSet}; @@ -305,6 +310,8 @@ pub mod de; pub mod ser; +mod format; + #[doc(inline)] pub use crate::de::{Deserialize, Deserializer}; #[doc(inline)] @@ -318,7 +325,7 @@ #[path = "de/seed.rs"] mod seed; -#[cfg(not(any(feature = "std", feature = "unstable")))] +#[cfg(all(not(feature = "std"), no_core_error))] mod std_error; // Re-export #[derive(Serialize, Deserialize)]. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/src/ser/impls.rs new/vendor/serde/src/ser/impls.rs --- old/vendor/serde/src/ser/impls.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/src/ser/impls.rs 1970-01-01 01:00:00.000000000 +0100 @@ -773,28 +773,17 @@ /// statically known to never have more than a constant `MAX_LEN` bytes. /// /// Panics if the `Display` impl tries to write more than `MAX_LEN` bytes. -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] macro_rules! serialize_display_bounded_length { ($value:expr, $max:expr, $serializer:expr) => {{ let mut buffer = [0u8; $max]; - let remaining_len = { - let mut remaining = &mut buffer[..]; - write!(remaining, "{}", $value).unwrap(); - remaining.len() - }; - let written_len = buffer.len() - remaining_len; - let written = &buffer[..written_len]; - - // write! only provides fmt::Formatter to Display implementations, which - // has methods write_str and write_char but no method to write arbitrary - // bytes. Therefore `written` must be valid UTF-8. - let written_str = str::from_utf8(written).expect("must be valid UTF-8"); - $serializer.serialize_str(written_str) + let mut writer = crate::format::Buf::new(&mut buffer); + write!(&mut writer, "{}", $value).unwrap(); + $serializer.serialize_str(writer.as_str()) }}; } -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +#[cfg(any(feature = "std", not(no_core_net)))] impl Serialize for net::IpAddr { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where @@ -818,7 +807,7 @@ } } -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] const DEC_DIGITS_LUT: &[u8] = b"\ 0001020304050607080910111213141516171819\ 2021222324252627282930313233343536373839\ @@ -826,7 +815,7 @@ 6061626364656667686970717273747576777879\ 8081828384858687888990919293949596979899"; -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] #[inline] fn format_u8(mut n: u8, out: &mut [u8]) -> usize { if n >= 100 { @@ -847,7 +836,7 @@ } } -#[cfg(feature = "std")] +#[cfg(any(feature = "std", not(no_core_net)))] #[test] fn test_format_u8() { let mut i = 0u8; @@ -864,8 +853,7 @@ } } -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +#[cfg(any(feature = "std", not(no_core_net)))] impl Serialize for net::Ipv4Addr { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where @@ -889,8 +877,7 @@ } } -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +#[cfg(any(feature = "std", not(no_core_net)))] impl Serialize for net::Ipv6Addr { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where @@ -906,8 +893,7 @@ } } -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +#[cfg(any(feature = "std", not(no_core_net)))] impl Serialize for net::SocketAddr { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where @@ -931,8 +917,7 @@ } } -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +#[cfg(any(feature = "std", not(no_core_net)))] impl Serialize for net::SocketAddrV4 { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where @@ -948,8 +933,7 @@ } } -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +#[cfg(any(feature = "std", not(no_core_net)))] impl Serialize for net::SocketAddrV6 { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde/src/ser/mod.rs new/vendor/serde/src/ser/mod.rs --- old/vendor/serde/src/ser/mod.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde/src/ser/mod.rs 1970-01-01 01:00:00.000000000 +0100 @@ -115,10 +115,10 @@ pub use self::impossible::Impossible; -#[cfg(not(any(feature = "std", feature = "unstable")))] +#[cfg(all(not(feature = "std"), no_core_error))] #[doc(no_inline)] pub use crate::std_error::Error as StdError; -#[cfg(all(feature = "unstable", not(feature = "std")))] +#[cfg(not(any(feature = "std", no_core_error)))] #[doc(no_inline)] pub use core::error::Error as StdError; #[cfg(feature = "std")] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde_derive/.cargo-checksum.json new/vendor/serde_derive/.cargo-checksum.json --- old/vendor/serde_derive/.cargo-checksum.json 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde_derive/.cargo-checksum.json 1970-01-01 01:00:00.000000000 +0100 @@ -1 +1 @@ -{"files":{"Cargo.toml":"7ca37ffebc73fe7fc549fc7675bcd014538a03da37b4e9c82879adce2c84a57c","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"731c044fc5f98b37a89e9049c9214267db98763309cb63146b45c029640f82a3","crates-io.md":"407d92b2932923f8708aaf31db266fd7db32e2b0afa6c569d134b680b74a1920","src/bound.rs":"6c5c20785ac95af9480f8d0de35a7e844cc36a16012f6468db148acd03cb15c2","src/de.rs":"e0a2186fb31e24b95cdfc499b1adad295bb3eac0448a41fc37f7609cadda52c7","src/dummy.rs":"9533dfee23f20d92ea75734c739022820c2787ded0d54f459feacdeb770ec912","src/fragment.rs":"6757cb4c3131d4300f093572efc273c4ab5a20e3e1efb54a311dcfa52d0bd6eb","src/internals/ast.rs":"171478e83d203193cd96f2c9c922bd240214e05fdf76add73fb7e029784bace8","src/internals/attr.rs":"8ab89c54ec7713a16767971507733f6692eff1919fe7add6911b33c40dfc45a7","src/internals/case.rs":"10c8dda2b32d8c6c6b63cf09cdc63d02375af7e95ecefe8 fecb34f93b65191bb","src/internals/check.rs":"d842eb9912fd29311060b67f3bc62c438eb7b5d86093355acb4de7eee02a0ef8","src/internals/ctxt.rs":"83a4e6fbe0e439d578478883594407e03f2f340541be479bdf0b04a202633a37","src/internals/mod.rs":"ed021ca635c18132a0e5c3d90f21b7f65def0a61e946421a30200b5b9ab6ad43","src/internals/receiver.rs":"710f875da3bad3e2a7fc1df40ab6805bb5e971b6a2a04c1b643b8a0aa29e8496","src/internals/respan.rs":"899753859c58ce5f532a3ec4584796a52f13ed5a0533191e48c953ba5c1b52ff","src/internals/symbol.rs":"d619e88caa3c7a09b03014257f2b349ee922290062d9b97b4dd19d0e64532690","src/lib.rs":"859329090a2685a2d4e6c6fe3e6ff2e7c17db5ca488bcff95431dee26fcfc93e","src/pretend.rs":"7facc10a5b805564dd95735ae11118ec17ca6adcc49a59764e7c920e27b9fc4a","src/ser.rs":"120588172988a1078af4a090fbe6ffc2f9ba3ac6993f9baebea17cfe5ac6e7fa","src/this.rs":"87818dc80cbb521b51938a653d09daf10aafc220bb10425948de82ad670fcb85"},"package":"a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170"} \ No newline at end of file +{"files":{"Cargo.toml":"f02849531e614dd38ab37ad86c0e4f5bf16ede7becaa75ebbb6604170ea294e6","LICENSE-APACHE":"62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"731c044fc5f98b37a89e9049c9214267db98763309cb63146b45c029640f82a3","crates-io.md":"407d92b2932923f8708aaf31db266fd7db32e2b0afa6c569d134b680b74a1920","src/bound.rs":"6c5c20785ac95af9480f8d0de35a7e844cc36a16012f6468db148acd03cb15c2","src/de.rs":"e0a2186fb31e24b95cdfc499b1adad295bb3eac0448a41fc37f7609cadda52c7","src/dummy.rs":"9533dfee23f20d92ea75734c739022820c2787ded0d54f459feacdeb770ec912","src/fragment.rs":"6757cb4c3131d4300f093572efc273c4ab5a20e3e1efb54a311dcfa52d0bd6eb","src/internals/ast.rs":"171478e83d203193cd96f2c9c922bd240214e05fdf76add73fb7e029784bace8","src/internals/attr.rs":"8ab89c54ec7713a16767971507733f6692eff1919fe7add6911b33c40dfc45a7","src/internals/case.rs":"10c8dda2b32d8c6c6b63cf09cdc63d02375af7e95ecefe8 fecb34f93b65191bb","src/internals/check.rs":"d842eb9912fd29311060b67f3bc62c438eb7b5d86093355acb4de7eee02a0ef8","src/internals/ctxt.rs":"83a4e6fbe0e439d578478883594407e03f2f340541be479bdf0b04a202633a37","src/internals/mod.rs":"ed021ca635c18132a0e5c3d90f21b7f65def0a61e946421a30200b5b9ab6ad43","src/internals/receiver.rs":"710f875da3bad3e2a7fc1df40ab6805bb5e971b6a2a04c1b643b8a0aa29e8496","src/internals/respan.rs":"899753859c58ce5f532a3ec4584796a52f13ed5a0533191e48c953ba5c1b52ff","src/internals/symbol.rs":"d619e88caa3c7a09b03014257f2b349ee922290062d9b97b4dd19d0e64532690","src/lib.rs":"67d0a9e8509324573bf42467f98eb3d9e4e15da67410a3e23bb87bdbd742f5ed","src/pretend.rs":"7facc10a5b805564dd95735ae11118ec17ca6adcc49a59764e7c920e27b9fc4a","src/ser.rs":"120588172988a1078af4a090fbe6ffc2f9ba3ac6993f9baebea17cfe5ac6e7fa","src/this.rs":"87818dc80cbb521b51938a653d09daf10aafc220bb10425948de82ad670fcb85"},"package":"243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde_derive/Cargo.toml new/vendor/serde_derive/Cargo.toml --- old/vendor/serde_derive/Cargo.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde_derive/Cargo.toml 1970-01-01 01:00:00.000000000 +0100 @@ -13,7 +13,7 @@ edition = "2015" rust-version = "1.56" name = "serde_derive" -version = "1.0.209" +version = "1.0.210" authors = [ "Erick Tryzelaar <erick.tryzel...@gmail.com>", "David Tolnay <dtol...@gmail.com>", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/serde_derive/src/lib.rs new/vendor/serde_derive/src/lib.rs --- old/vendor/serde_derive/src/lib.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/vendor/serde_derive/src/lib.rs 1970-01-01 01:00:00.000000000 +0100 @@ -13,7 +13,7 @@ //! //! [https://serde.rs/derive.html]: https://serde.rs/derive.html -#![doc(html_root_url = "https://docs.rs/serde_derive/1.0.209")] +#![doc(html_root_url = "https://docs.rs/serde_derive/1.0.210")] #![cfg_attr(not(check_cfg), allow(unexpected_cfgs))] // Ignored clippy lints #![allow(