-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement #[macro_export(local_inner_macros)]
(a solution for the macro helper import problem)
#51496
Conversation
r? @pnkfelix (rust_highfive has picked a reviewer for you, use r? to override) |
cc @dtolnay @rust-lang/lang |
There's one subtle detail that affects how we treat the If we have a macro call using a macro variable, like // Library crate
#[macro_export(macro_helper_hack)]
macro_rules! public {
($helper: ident) => {
$helper!();
}
}
// User crate
// `my_helper` is not affected by the macro helper hack (not changed to `$crate::my_helper`) and is resolved in the user crate, not library crate
public!(my_helper); The primary alternative is to determine whether the change is applicable using context of the macro call |
The job Click to expand the log.
I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact |
Currently building locally to play around with this, but I think this does the trick. Grabbing the span from the ident is the right behavior (as opposed to from the macro call). |
src/libsyntax/feature_gate.rs
Outdated
if attr.check_name("macro_export") { | ||
if let Some(content) = attr.meta_item_list() { | ||
if attr::list_contains_name(&content, "macro_helper_hack") { | ||
gate_feature_post!(&self, macro_helper_hack, attr.span, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well, this must be a mistake, the attribute shouldn't be gated at the library side, but rather the effect should be enabled if feature(use_extern_macros)
is enabled on the use site or stabilized.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was about to write the same thing. This should never happen:
error[E0658]: `macro_helper_hack` in `macro_export` is experimental (see issue #35896)
--> serde-json/src/macros.rs:69:1
|
69 | #[macro_export(macro_helper_hack)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: add #![feature(macro_helper_hack)] to the crate attributes to enable
If not building with use_extern_macros
, the macro_helper_hack
should have no effect and should be ignored as it has been on all past stable compilers.
Overall I found that this PR works incredibly well. I tested it against some of my nastiest macro code and it behaved as desired every time, with nom-style passing of macro names across crates and everything. The one exception I found was it seems #![feature(use_extern_macros, macro_helper_hack)]
#[macro_export(macro_helper_hack)]
macro_rules! noop {
() => {
noop_helper!{}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! noop_helper {
() => {};
}
pub fn call() {
noop!{}
}
|
Ah, it appears the problem is not with this PR. The same thing happens invoking a macro through $crate just with #![feature(use_extern_macros)]
#[macro_export]
macro_rules! noop {
() => {
$crate::noop_helper!{}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! noop_helper {
() => {};
}
pub fn call() {
noop!{}
}
|
I guess this is a consequence of #35896 (comment).
Seems easy to work around in any case, and uncommon anyway. |
Yes, With duplicate macro_rules! foo { () => () } // (1)
mod m {
// maybe somewhere in deeply nested modules
#[macro_export] macro_rules! foo { () => () } (2)
}
macro_rules! foo { () => () } // (3), shadows (1) for the rest of the module
$crate::foo!(); // refers to (2), like from other crates, not to (1) or (3) This doesn't seem urgent and blocking |
Once |
#[macro_export(local_inner_macros)]
(a solution for the macro helper import problem)
Updated.
Bikeshedding about the attribute name is welcome. |
👍 for |
@petrochenkov sorry for being slow to provide feedback. Mozilla All Hands was all consuming. I'll take a look and also skim the comments, but before that I wanted to say thanks for trying this out! |
Let's notify people formally, there's a number of other things that should ideally get into 1.29 and are blocked on this PR. @rfcbot fcp merge This PR implements a solution for the macro helper issue described by dtolnay in #35896 (comment). Macros exported from libraries can be marked with If we have a fn-like macro call |
@rfcbot still doesn't listen to me |
@petrochenkov This issue is tagged T-lang, so only lang team members can start FCP. I'll do it for you. @rfcbot fcp merge |
Team member @cramertj has proposed to merge this. The next step is review by the rest of the tagged teams: Concerns:
Once a majority of reviewers approve (and none object), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up! See this document for info about what commands tagged team members can give me. |
(Oh, and because time is somewhat of the essence here.) |
@bors r=nikomatsakis |
📌 Commit d347270 has been approved by |
Implement `#[macro_export(local_inner_macros)]` (a solution for the macro helper import problem) Implement a solution for the macro helper issue discussed in #35896 as described in #35896 (comment). Macros exported from libraries can be marked with `#[macro_export(local_inner_macros)]` and this annotation changes how nested macros in them are resolved. If we have a fn-like macro call `ident!(...)` and `ident` comes from a `macro_rules!` macro marked with `#[macro_export(local_inner_macros)]` then it's replaced with `$crate::ident!(...)` and resolved as such (`$crate` gets the same context as `ident`).
☀️ Test successful - status-appveyor, status-travis |
Is there a writeup on the migration strategy for macro heavy crates, and how we can test with recent nightlies anywhere? |
@sgrif I don't know of a writeup to point to. The rough summary:
|
Or use |
@petrochenkov Thanks, I've edited my comment to take that possibility into account. |
Do macros which take other macros as callbacks need this as well? |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [serde](https://serde.rs) ([source](https://togithub.com/serde-rs/serde)) | dependencies | patch | `1.0` -> `1.0.200` | | [serde_json](https://togithub.com/serde-rs/json) | dependencies | patch | `1.0` -> `1.0.116` | --- ### Release Notes <details> <summary>serde-rs/serde (serde)</summary> ### [`v1.0.200`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.200) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.199...v1.0.200) - Fix formatting of "invalid type" and "invalid value" deserialization error messages containing NaN or infinite floats ([#​2733](https://togithub.com/serde-rs/serde/issues/2733), thanks [@​jamessan](https://togithub.com/jamessan)) ### [`v1.0.199`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.199) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.198...v1.0.199) - Fix ambiguous associated item when `forward_to_deserialize_any!` is used on an enum with `Error` variant ([#​2732](https://togithub.com/serde-rs/serde/issues/2732), thanks [@​aatifsyed](https://togithub.com/aatifsyed)) ### [`v1.0.198`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.198) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.197...v1.0.198) - Support serializing and deserializing `Saturating<T>` ([#​2709](https://togithub.com/serde-rs/serde/issues/2709), thanks [@​jbethune](https://togithub.com/jbethune)) ### [`v1.0.197`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.197) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.196...v1.0.197) - Fix unused_imports warnings when compiled by rustc 1.78 - Optimize code size of some Display impls ([#​2697](https://togithub.com/serde-rs/serde/issues/2697), thanks [@​nyurik](https://togithub.com/nyurik)) ### [`v1.0.196`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.196) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.195...v1.0.196) - Improve formatting of "invalid type" error messages involving floats ([#​2682](https://togithub.com/serde-rs/serde/issues/2682)) ### [`v1.0.195`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.195) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.194...v1.0.195) - Prevent remote definitions of tuple struct or tuple variant from triggering dead_code warning ([#​2671](https://togithub.com/serde-rs/serde/issues/2671)) ### [`v1.0.194`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.194) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.193...v1.0.194) - Update proc-macro2 to fix caching issue when using a rustc-wrapper such as sccache ### [`v1.0.193`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.193) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.192...v1.0.193) - Fix field names used for the deserialization of `RangeFrom` and `RangeTo` ([#​2653](https://togithub.com/serde-rs/serde/issues/2653), [#​2654](https://togithub.com/serde-rs/serde/issues/2654), [#​2655](https://togithub.com/serde-rs/serde/issues/2655), thanks [@​emilbonnek](https://togithub.com/emilbonnek)) ### [`v1.0.192`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.192) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.191...v1.0.192) - Allow internal tag field in untagged variant ([#​2646](https://togithub.com/serde-rs/serde/issues/2646), thanks [@​robsdedude](https://togithub.com/robsdedude)) ### [`v1.0.191`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.191) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.190...v1.0.191) - Documentation improvements ### [`v1.0.190`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.190) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.189...v1.0.190) - Preserve NaN sign when deserializing f32 from f64 or vice versa ([#​2637](https://togithub.com/serde-rs/serde/issues/2637)) ### [`v1.0.189`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.189) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.188...v1.0.189) - Fix "cannot infer type" error when internally tagged enum contains untagged variant ([#​2613](https://togithub.com/serde-rs/serde/issues/2613), thanks [@​ahl](https://togithub.com/ahl)) ### [`v1.0.188`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.188) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.187...v1.0.188) - Fix *"failed to parse manifest"* error when building serde using a Cargo version between 1.45 and 1.50 ([#​2603](https://togithub.com/serde-rs/serde/issues/2603)) ### [`v1.0.187`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.187) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.186...v1.0.187) - Remove support for Emscripten targets on rustc older than 1.40 ([#​2600](https://togithub.com/serde-rs/serde/issues/2600)) ### [`v1.0.186`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.186) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.185...v1.0.186) - Disallow incompatible versions of `serde_derive` and `serde` in the dependency graph ([#​2588](https://togithub.com/serde-rs/serde/issues/2588), thanks [@​soqb](https://togithub.com/soqb)) ### [`v1.0.185`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.185) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.184...v1.0.185) - Fix error *"cannot move out of `*self` which is behind a shared reference"* deriving Serialize on a non_exhaustive enum ([#​2591](https://togithub.com/serde-rs/serde/issues/2591)) ### [`v1.0.184`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.184) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.183...v1.0.184) - Restore from-source `serde_derive` build on all platforms — eventually we'd like to use a first-class precompiled macro if such a thing becomes supported by cargo / crates.io ### [`v1.0.183`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.183) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.182...v1.0.183) - Support deserializing `Box<OsStr>` with an equivalent representation as `OsString` ([#​2556](https://togithub.com/serde-rs/serde/issues/2556), thanks [@​DBLouis](https://togithub.com/DBLouis)) ### [`v1.0.182`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.182) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.181...v1.0.182) - Render field aliases in sorted order in error messages ([#​2458](https://togithub.com/serde-rs/serde/issues/2458), thanks [@​Mingun](https://togithub.com/Mingun)) - Support `serde(default)` on tuple structs ([#​2553](https://togithub.com/serde-rs/serde/issues/2553), thanks [@​Mingun](https://togithub.com/Mingun)) ### [`v1.0.181`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.181) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.180...v1.0.181) - Make `serde(alias)` work in combination with `flatten` when using in-place deserialization ([#​2443](https://togithub.com/serde-rs/serde/issues/2443), thanks [@​Mingun](https://togithub.com/Mingun)) - Improve the representation of adjacently tagged enums in formats where enum tags are serialized by index, as opposed to by string name ([#​2505](https://togithub.com/serde-rs/serde/issues/2505), [#​2496](https://togithub.com/serde-rs/serde/issues/2496), thanks [@​Baptistemontan](https://togithub.com/Baptistemontan)) ### [`v1.0.180`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.180) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.179...v1.0.180) - Update to 2018 edition ### [`v1.0.179`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.179) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.178...v1.0.179) - Support serialization of tuple variants inside a flattened field ([#​2448](https://togithub.com/serde-rs/serde/issues/2448), thanks [@​Mingun](https://togithub.com/Mingun)) ### [`v1.0.178`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.178) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.177...v1.0.178) - Fix build error when using serde with "std" feature turned off and "unstable" feature turned on ([#​2541](https://togithub.com/serde-rs/serde/issues/2541)) ### [`v1.0.177`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.177) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.176...v1.0.177) - Add `serde(rename_all_fields = "...")` attribute to apply a `rename_all` on every struct variant of an enum ([#​1695](https://togithub.com/serde-rs/serde/issues/1695), thanks [@​jplatte](https://togithub.com/jplatte)) - Improve diagnostics for attribute parse errors ([#​2536](https://togithub.com/serde-rs/serde/issues/2536), thanks [@​jplatte](https://togithub.com/jplatte)) ### [`v1.0.176`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.176) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.175...v1.0.176) - Allow tag field of an internally tagged enum to have same name as a field inside a skipped struct variant ([#​2266](https://togithub.com/serde-rs/serde/issues/2266), thanks [@​flisky](https://togithub.com/flisky)) ### [`v1.0.175`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.175) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.174...v1.0.175) - Restore missing LICENSE files in serde_derive crate ([#​2527](https://togithub.com/serde-rs/serde/issues/2527), thanks [@​ankane](https://togithub.com/ankane)) ### [`v1.0.174`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.174) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.173...v1.0.174) - Documentation improvements ### [`v1.0.173`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.173) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.172...v1.0.173) - Fix missing trait implementations when using serde derive macro on a macro-generated data structure, such as via the `bitflags` crate ([#​2516](https://togithub.com/serde-rs/serde/issues/2516)) ### [`v1.0.172`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.172) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.171...v1.0.172) - Experiment with precompiling the serde_derive macros to reduce build time ([#​2514](https://togithub.com/serde-rs/serde/issues/2514)) ### [`v1.0.171`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.171) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.170...v1.0.171) - Support `derive(Deserialize)` on unit structs that have const generics ([#​2500](https://togithub.com/serde-rs/serde/issues/2500), thanks [@​Baptistemontan](https://togithub.com/Baptistemontan)) ### [`v1.0.170`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.170) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.169...v1.0.170) - Produce error message on suffixed string literals inside serde attributes ([#​2242](https://togithub.com/serde-rs/serde/issues/2242)) - Support single identifier as unbraced default value for const generic parameter ([#​2449](https://togithub.com/serde-rs/serde/issues/2449)) ### [`v1.0.169`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.169) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.168...v1.0.169) - Add Deserializer::deserialize_identifier support for adjacently tagged enums ([#​2475](https://togithub.com/serde-rs/serde/issues/2475), thanks [@​Baptistemontan](https://togithub.com/Baptistemontan)) - Fix unused_braces lint in generated Deserialize impl that uses braced const generic expressions ([#​2414](https://togithub.com/serde-rs/serde/issues/2414)) ### [`v1.0.168`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.168) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.167...v1.0.168) - Allow `serde::de::IgnoredAny` to be the type for a `serde(flatten)` field ([#​2436](https://togithub.com/serde-rs/serde/issues/2436), thanks [@​Mingun](https://togithub.com/Mingun)) - Allow larger preallocated capacity for smaller elements ([#​2494](https://togithub.com/serde-rs/serde/issues/2494)) ### [`v1.0.167`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.167) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.166...v1.0.167) - Add serialize and deserialize impls for `RangeFrom` and `RangeTo` ([#​2471](https://togithub.com/serde-rs/serde/issues/2471), thanks [@​tbu-](https://togithub.com/tbu-)) ### [`v1.0.166`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.166) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.165...v1.0.166) - Add `no-alloc` category to crates.io metadata ### [`v1.0.165`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.165) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.164...v1.0.165) - Fix incorrect count of fields passed to tuple deserialization methods when using `serde(skip_deserializing)` attributes ([#​2466](https://togithub.com/serde-rs/serde/issues/2466), thanks [@​Mingun](https://togithub.com/Mingun)) - Fix `-Zminimal-versions` build ### [`v1.0.164`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.164) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.163...v1.0.164) - Allowed enum variants to be individually marked as untagged ([#​2403](https://togithub.com/serde-rs/serde/issues/2403), thanks [@​dewert99](https://togithub.com/dewert99)) ### [`v1.0.163`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.163) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.162...v1.0.163) - Eliminate build script from serde_derive crate to slightly reduce build time ([#​2442](https://togithub.com/serde-rs/serde/issues/2442), thanks [@​taiki-e](https://togithub.com/taiki-e)) ### [`v1.0.162`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.162) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.161...v1.0.162) - Support deserializing flattened adjacently tagged enums from data formats which represent fields as bytes, such as the `csv` crate ([#​2377](https://togithub.com/serde-rs/serde/issues/2377), thanks [@​mfro](https://togithub.com/mfro)) ```rust #[derive(Deserialize)] pub struct Record { common: u64, #[serde(flatten)] kind: Kind, } #[derive(Deserialize)] #[serde(tag = "kind", content = "parameter", rename_all = "lowercase")] enum Kind { Foo(u64), Bar(bool), } ``` ```csv common,kind,parameter 1,foo,42 2,bar,true ``` ### [`v1.0.161`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.161) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.160...v1.0.161) - Improve error messages produced by serde_test on test failure ([#​2435](https://togithub.com/serde-rs/serde/issues/2435), thanks [@​Mingun](https://togithub.com/Mingun)) ### [`v1.0.160`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.160) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.159...v1.0.160) - Make derived serializer/deserializer internals `doc(hidden)` ([#​2426](https://togithub.com/serde-rs/serde/issues/2426), thanks [@​compiler-errors](https://togithub.com/compiler-errors)) ### [`v1.0.159`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.159) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.158...v1.0.159) - Accept empty #\[serde()] attribute ([#​2422](https://togithub.com/serde-rs/serde/issues/2422)) ### [`v1.0.158`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.158) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.157...v1.0.158) - Fix *"expected serde crate attribute to be a string"* error when using macro_rules metavariable inside of serde attribute: `#[serde(crate = $serde_path)]` ([#​2409](https://togithub.com/serde-rs/serde/issues/2409)) ### [`v1.0.157`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.157) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.156...v1.0.157) - Update syn dependency to 2.x ### [`v1.0.156`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.156) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.155...v1.0.156) - Documentation improvements ### [`v1.0.155`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.155) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.154...v1.0.155) - Support `Serialize` and `Deserialize` impls for `core::ffi::CStr` and `alloc::ffi::CString` without "std" feature ([#​2374](https://togithub.com/serde-rs/serde/issues/2374), thanks [@​safarir](https://togithub.com/safarir)) ### [`v1.0.154`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.154) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.153...v1.0.154) - Fix "undeclared lifetime" error in generated code when deriving Deserialize for an enum with both `flatten` and `'static` fields ([#​2383](https://togithub.com/serde-rs/serde/issues/2383), thanks [@​Mingun](https://togithub.com/Mingun)) ### [`v1.0.153`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.153) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.152...v1.0.153) - Support `serde(alias = "…")` attribute used inside of flattened struct ([#​2387](https://togithub.com/serde-rs/serde/issues/2387), thanks [@​bebecue](https://togithub.com/bebecue)) ### [`v1.0.152`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.152) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.151...v1.0.152) - Documentation improvements ### [`v1.0.151`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.151) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.150...v1.0.151) - Update `serde::`{`ser`,`de`}`::StdError` to re-export `core::error::Error` when serde is built with `feature="std"` **off** and `feature="unstable"` **on** ([#​2344](https://togithub.com/serde-rs/serde/issues/2344)) ### [`v1.0.150`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.150) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.149...v1.0.150) - Relax some trait bounds from the `Serialize` impl of `HashMap` and `BTreeMap` ([#​2334](https://togithub.com/serde-rs/serde/issues/2334)) - Enable `Serialize` and `Deserialize` impls of `std::sync::atomic` types on more platforms ([#​2337](https://togithub.com/serde-rs/serde/issues/2337), thanks [@​badboy](https://togithub.com/badboy)) ### [`v1.0.149`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.149) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.148...v1.0.149) - Relax some trait bounds from the `Serialize` impl of `BinaryHeap`, `BTreeSet`, and `HashSet` ([#​2333](https://togithub.com/serde-rs/serde/issues/2333), thanks [@​jonasbb](https://togithub.com/jonasbb)) ### [`v1.0.148`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.148) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.147...v1.0.148) - Support `remote` derive for generic types that have private fields ([#​2327](https://togithub.com/serde-rs/serde/issues/2327)) ### [`v1.0.147`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.147) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.146...v1.0.147) - Add `serde::de::value::EnumAccessDeserializer` which transforms an `EnumAccess` into a `Deserializer` ([#​2305](https://togithub.com/serde-rs/serde/issues/2305)) ### [`v1.0.146`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.146) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.145...v1.0.146) - Allow internally tagged newtype variant to contain unit ([#​2303](https://togithub.com/serde-rs/serde/issues/2303), thanks [@​tage64](https://togithub.com/tage64)) ### [`v1.0.145`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.145) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.144...v1.0.145) - Allow RefCell\<T>, Mutex\<T>, and RwLock\<T> to be serialized regardless of whether T is `Sized` ([#​2282](https://togithub.com/serde-rs/serde/issues/2282), thanks [@​ChayimFriedman2](https://togithub.com/ChayimFriedman2)) ### [`v1.0.144`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.144) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.143...v1.0.144) - Change atomic ordering used by Serialize impl of atomic types to match ordering used by Debug impl of those same types ([#​2263](https://togithub.com/serde-rs/serde/issues/2263), thanks [@​taiki-e](https://togithub.com/taiki-e)) ### [`v1.0.143`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.143) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.142...v1.0.143) - Invert build.rs cfgs in serde_test to produce the most modern configuration in the default case ([#​2253](https://togithub.com/serde-rs/serde/issues/2253), thanks [@​taiki-e](https://togithub.com/taiki-e)) ### [`v1.0.142`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.142) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.141...v1.0.142) - Add keywords to crates.io metadata ### [`v1.0.141`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.141) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.140...v1.0.141) - Add `no-std` category to crates.io metadata ### [`v1.0.140`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.140) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.139...v1.0.140) - Invert serde_derive cfgs to convenience non-Cargo builds on a modern toolchain ([#​2251](https://togithub.com/serde-rs/serde/issues/2251), thanks [@​taiki-e](https://togithub.com/taiki-e)) ### [`v1.0.139`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.139) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.138...v1.0.139) - Add `new` constructor function for all `IntoDeserializer` impls ([#​2246](https://togithub.com/serde-rs/serde/issues/2246)) ### [`v1.0.138`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.138) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.137...v1.0.138) - Documentation improvements ### [`v1.0.137`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.137) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.136...v1.0.137) - Update documentation links to some data formats whose repos have moved ([#​2201](https://togithub.com/serde-rs/serde/issues/2201), thanks [@​atouchet](https://togithub.com/atouchet)) - Fix declared `rust-version` of serde and serde_test ([#​2168](https://togithub.com/serde-rs/serde/issues/2168)) ### [`v1.0.136`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.136) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.135...v1.0.136) - Improve default error message when `Visitor` fails to deserialize a u128 or i128 ([#​2167](https://togithub.com/serde-rs/serde/issues/2167)) ### [`v1.0.135`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.135) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.134...v1.0.135) - Update discord channels listed in readme ### [`v1.0.134`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.134) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.133...v1.0.134) - Improve error messages on deserializing NonZero integers from a 0 value ([#​2158](https://togithub.com/serde-rs/serde/issues/2158)) ### [`v1.0.133`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.133) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.132...v1.0.133) - Optimize deserialization of data structures that contain recursive use of `flatten` fields or `tag` or `untagged` enums ([#​2148](https://togithub.com/serde-rs/serde/issues/2148)) ### [`v1.0.132`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.132) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.131...v1.0.132) - Enable Serialize and Deserialize impls for `std::sync::atomic::{AtomicI64, AtomicU64}` on riscv64 arch ([#​2141](https://togithub.com/serde-rs/serde/issues/2141), thanks [@​Avimitin](https://togithub.com/Avimitin)) ### [`v1.0.131`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.131) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.130...v1.0.131) - Avoid `unused_results` being triggered in generated code for adjacently tagged enum ([#​2116](https://togithub.com/serde-rs/serde/issues/2116), thanks [@​tyranron](https://togithub.com/tyranron)) ### [`v1.0.130`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.130) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.129...v1.0.130) - Provide `MapAccess` and `SeqAccess` impl for reference to a dynamically sized existing impl ([#​2081](https://togithub.com/serde-rs/serde/issues/2081)) ### [`v1.0.129`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.129) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.128...v1.0.129) - Support deserialization of remote structs that used packed repr ([#​2078](https://togithub.com/serde-rs/serde/issues/2078), [#​2079](https://togithub.com/serde-rs/serde/issues/2079), [#​2080](https://togithub.com/serde-rs/serde/issues/2080)) ### [`v1.0.128`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.128) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.127...v1.0.128) - Enable 128-bit integers on emscripten in Rust 1.40+ ([#​2076](https://togithub.com/serde-rs/serde/issues/2076), thanks [@​Manishearth](https://togithub.com/Manishearth)) ### [`v1.0.127`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.127) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.126...v1.0.127) - Resolve warning in rustc nightly-2021-07-31+ compiling serde_test ### [`v1.0.126`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.126) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.125...v1.0.126) - Resolve conflict with `forbid(future_incompatible)` lint setting in generated code ([#​2026](https://togithub.com/serde-rs/serde/issues/2026), thanks [@​hyd-dev](https://togithub.com/hyd-dev)) ### [`v1.0.125`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.125) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.124...v1.0.125) - Improve performance of serializing `Ipv4Addr` ([#​2001](https://togithub.com/serde-rs/serde/issues/2001), thanks [@​saethlin](https://togithub.com/saethlin)) ### [`v1.0.124`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.124) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.123...v1.0.124) - Fix possible panic deserializing invalid data as `SystemTime` ([#​1997](https://togithub.com/serde-rs/serde/issues/1997), thanks [@​cyang1](https://togithub.com/cyang1)) ### [`v1.0.123`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.123) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.122...v1.0.123) - Support `Self` keywords in fields of types that derive Deserialize ([#​1830](https://togithub.com/serde-rs/serde/issues/1830), thanks [@​taiki-e](https://togithub.com/taiki-e)) - Allow floats to be deserialized from ints in tagged unions ([#​1842](https://togithub.com/serde-rs/serde/issues/1842), thanks [@​Timmmm](https://togithub.com/Timmmm)) - Support `Self` inside fields that use serialize_with ([#​1970](https://togithub.com/serde-rs/serde/issues/1970)) ### [`v1.0.122`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.122) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.121...v1.0.122) - Add IntoDeserializer impl for &\[u8] ([#​1898](https://togithub.com/serde-rs/serde/issues/1898), thanks [@​Mingun](https://togithub.com/Mingun)) - Handle unrecognized numeric field keys during deserialization of a field_identifier, equivalently to string field keys ([#​1914](https://togithub.com/serde-rs/serde/issues/1914), thanks [@​Mingun](https://togithub.com/Mingun)) - Add attribute to override default deserialization failure expectation message ([#​1916](https://togithub.com/serde-rs/serde/issues/1916), thanks [@​Mingun](https://togithub.com/Mingun)) ```rust #[derive(Deserialize)] #[serde(untagged, expecting = "single version or array of versions")] struct VersionSpec { One(Version), Many(Vec<Version>), } ``` - Improve `serde_test` handling of map entries and error message construction ([#​1918](https://togithub.com/serde-rs/serde/issues/1918), thanks [@​Mingun](https://togithub.com/Mingun)) - Produce more accurate location information on test failures from `serde_test` crate ([#​1920](https://togithub.com/serde-rs/serde/issues/1920), thanks [@​Mingun](https://togithub.com/Mingun)) - Improve diagnostic on failure to parse a `rename_all` attribute ([#​1960](https://togithub.com/serde-rs/serde/issues/1960), [#​1961](https://togithub.com/serde-rs/serde/issues/1961)) - Eliminate unnecessary trait bounds on some value Deserializer impls ([#​1963](https://togithub.com/serde-rs/serde/issues/1963)) ### [`v1.0.121`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.121) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.120...v1.0.121) - Support borrowed data during deserialization of a field identifier ([#​1917](https://togithub.com/serde-rs/serde/issues/1917), thanks [@​Mingun](https://togithub.com/Mingun)) - Fix panic when deserializing `Duration` with nanoseconds that cause the seconds counter to overflow ([#​1958](https://togithub.com/serde-rs/serde/issues/1958), thanks [@​jonasbb](https://togithub.com/jonasbb)) ### [`v1.0.120`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.120) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.119...v1.0.120) - Fix deserialization of ignored fields containing 128-bit integer ([#​1955](https://togithub.com/serde-rs/serde/issues/1955), thanks [@​TheJokr](https://togithub.com/TheJokr)) ### [`v1.0.119`](https://togithub.com/serde-rs/serde/compare/v1.0.118...v1.0.119) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.118...v1.0.119) ### [`v1.0.118`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.118) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.117...v1.0.118) - Support serialization of core::num::Wrapping in no_std mode ([#​1926](https://togithub.com/serde-rs/serde/issues/1926), thanks [@​attente](https://togithub.com/attente)) ### [`v1.0.117`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.117) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.116...v1.0.117) - Allow serialization of std::net::SocketAddrV6 to include a scope id if present (based on [https://github.com/rust-lang/rust/pull/77426](https://togithub.com/rust-lang/rust/pull/77426)) ### [`v1.0.116`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.116) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.115...v1.0.116) - Fix deserialization of IpAddr, SocketAddr, Bound, Result, OsString in formats which process variant identifiers as u64 ([#​1888](https://togithub.com/serde-rs/serde/issues/1888), thanks [@​joshtriplett](https://togithub.com/joshtriplett)) ### [`v1.0.115`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.115) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.114...v1.0.115) - Support `#[serde(flatten)]` on a field whose type is a type parameter and concrete type is `()` ([#​1873](https://togithub.com/serde-rs/serde/issues/1873)) ### [`v1.0.114`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.114) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.113...v1.0.114) - Improve `packed` repr matching to support deriving Serialize for structs having `repr(C, packed)` ([#​1813](https://togithub.com/serde-rs/serde/issues/1813), thanks [@​TannerRogalsky](https://togithub.com/TannerRogalsky)) ### [`v1.0.113`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.113) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.112...v1.0.113) - Improve diagnostic when a serde trait is not implemented ([#​1827](https://togithub.com/serde-rs/serde/issues/1827), thanks [@​taiki-e](https://togithub.com/taiki-e)) ### [`v1.0.112`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.112) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.111...v1.0.112) - Support `serde(flatten)` on map types where the Serializer only works with serialize_entry ([#​1837](https://togithub.com/serde-rs/serde/issues/1837)) ### [`v1.0.111`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.111) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.110...v1.0.111) - Process borrowed lifetimes inside of interpolated macro_rules metavariables, such as in the case of `#[derive(Deserialize)] struct S<'a> { field: $field }` ([#​1821](https://togithub.com/serde-rs/serde/issues/1821)) ### [`v1.0.110`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.110) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.109...v1.0.110) - Support deriving Serialize impl for a `repr(packed)` struct ([#​1791](https://togithub.com/serde-rs/serde/issues/1791), thanks [@​alvardes](https://togithub.com/alvardes)) ### [`v1.0.109`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.109) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.108...v1.0.109) - Allow adjacently tagged newtype variants containing `Option` to omit the content field when deserializing ([#​1553](https://togithub.com/serde-rs/serde/issues/1553), [#​1706](https://togithub.com/serde-rs/serde/issues/1706), thanks [@​zth0](https://togithub.com/zth0)) - Avoid panicking when a SystemTime older than UNIX_EPOCH is serialized ([#​1702](https://togithub.com/serde-rs/serde/issues/1702), thanks [@​hjiayz](https://togithub.com/hjiayz)) ### [`v1.0.108`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.108) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.107...v1.0.108) - Provide a `Serializer` impl that can write primitives and unit variants to a `&mut fmt::Formatter` ([#​1705](https://togithub.com/serde-rs/serde/issues/1705), thanks [@​jethrogb](https://togithub.com/jethrogb)) ```rust use serde::Serialize; use std::fmt::{self, Display}; #[derive(Serialize)] #[serde(rename_all = "kebab-case")] pub enum MessageType { StartRequest, EndRequest, } impl Display for MessageType { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { self.serialize(f) } } ``` ### [`v1.0.107`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.107) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.106...v1.0.107) - Fix panic during macro expansion when using `serde(skip)` and `serde(other)` in the same enum ([#​1804](https://togithub.com/serde-rs/serde/issues/1804)) ### [`v1.0.106`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.106) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.105...v1.0.106) - Hide dummy const implementation detail from rustdoc when documenting a binary crate ([#​1768](https://togithub.com/serde-rs/serde/issues/1768), thanks [@​robo9k](https://togithub.com/robo9k)) ### [`v1.0.105`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.105) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.104...v1.0.105) - Allow #\[serde(borrow)] to work on non-standard `Cow` types ([#​1754](https://togithub.com/serde-rs/serde/issues/1754), thanks [@​maciejhirsz](https://togithub.com/maciejhirsz)) ### [`v1.0.104`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.104) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.103...v1.0.104) - Revert stabilization of Serialize/Deserialize impls for `!` to account for [https://github.com/rust-lang/rust/pull/67224](https://togithub.com/rust-lang/rust/pull/67224) ### [`v1.0.103`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.103) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.102...v1.0.103) - Support deserializing untagged unit variants from formats that treat unit as None ([#​1668](https://togithub.com/serde-rs/serde/issues/1668)) ### [`v1.0.102`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.102) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.101...v1.0.102) - Support deserializing `PathBuf` from bytes like `&Path` already did, and support deserializing `Box<Path>` ([#​1656](https://togithub.com/serde-rs/serde/issues/1656), thanks [@​heftig](https://togithub.com/heftig)) ### [`v1.0.101`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.101) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.100...v1.0.101) - Report errors on malformed serde attributes, like `#[serde(rename =)]` -- the compiler used to reject these itself, but when the compiler relaxed its requirements on attribute syntax these malformed attributes began silently being ignored by serde_derive - Eliminate unused variable warning when using skip_serializing inside a tuple variant of an adjacently tagged enum ([#​1617](https://togithub.com/serde-rs/serde/issues/1617), thanks [@​arilotter](https://togithub.com/arilotter)) - Support skip attribute inside of newtype variants ([#​1622](https://togithub.com/serde-rs/serde/issues/1622), thanks [@​Xaeroxe](https://togithub.com/Xaeroxe)) ### [`v1.0.100`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.100) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.99...v1.0.100) - Provide `serde::ser::StdError` and `serde::de::StdError` which are either a re-export of `std::error::Error` (if Serde's "std" feature is enabled) or a new identical trait (otherwise). ```rust #[cfg(feature = "std")] pub use std::error::Error as StdError; #[cfg(not(feature = "std"))] pub trait StdError: Debug + Display { fn source(&self) -> Option<&(StdError + 'static)> { None } } ``` Serde's error traits `serde::ser::Error` and `serde::de::Error` require `std::error::Error` as a supertrait, but only when Serde is built with "std" enabled. Data formats that don't care about no_std support should generally provide their error types with a `std::error::Error` impl directly: ```rust #[derive(Debug)] struct MySerError {...} impl serde::ser::Error for MySerError {...} impl std::fmt::Display for MySerError {...} // We don't support no_std! impl std::error::Error for MySerError {} ``` Data formats that *do* support no_std may either have a "std" feature of their own as has been required in the past: ```toml [features] std = ["serde/std"] ``` ```rust #[cfg(feature = "std")] impl std::error::Error for MySerError {} ``` ... or else now may provide the std Error impl unconditionally via Serde's re-export: ```rust impl serde::ser::StdError for MySerError {} ``` ### [`v1.0.99`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.99) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.98...v1.0.99) - Update Syn dependency to 1.0. *Note: This raises the minimum required compiler version for serde_derive from rustc 1.15 to rustc 1.31. The minimum required compiler version for serde remains at rustc 1.13.* ### [`v1.0.98`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.98) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.97...v1.0.98) - Add support for NonZeroI\* types ([#​1589](https://togithub.com/serde-rs/serde/issues/1589), thanks [@​Flaise](https://togithub.com/Flaise)) ### [`v1.0.97`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.97) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.96...v1.0.97) - Introduce `serde(try_from = "...")` attribute to derive Deserialize based on a given implementation of [`std::convert::TryFrom`](https://doc.rust-lang.org/std/convert/trait.TryFrom.html) ([#​1526](https://togithub.com/serde-rs/serde/issues/1526), thanks [@​fanzeyi](https://togithub.com/fanzeyi)) ```rust #[derive(Deserialize)] #[serde(try_from = "u32")] enum N { Zero, One, Two, } impl TryFrom<u32> for N { type Error = String; fn try_from(u: u32) -> Result<Self, Self::Error> { match u { 0 => Ok(Self::Zero), 1 => Ok(Self::One), 2 => Ok(Self::Two), other => Err(format!("out of range: {}", other)), } } } ``` ### [`v1.0.96`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.96) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.95...v1.0.96) - Implement serialization and deserialization for std::sync::atomic types ([#​1572](https://togithub.com/serde-rs/serde/issues/1572) and [#​1581](https://togithub.com/serde-rs/serde/issues/1581), thanks [@​Roguelazer](https://togithub.com/Roguelazer)) - Make "alloc" feature work on stable Rust 1.36+ ([#​1576](https://togithub.com/serde-rs/serde/issues/1576), thanks [@​c410-f3r](https://togithub.com/c410-f3r)) ### [`v1.0.95`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.95) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.94...v1.0.95) *yanked* ### [`v1.0.94`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.94) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.93...v1.0.94) - Accept enums in input data when deserializing IgnoredAny ([#​1558](https://togithub.com/serde-rs/serde/issues/1558)) ### [`v1.0.93`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.93) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.92...v1.0.93) - Allow integer keys in untagged flattened map ([#​1545](https://togithub.com/serde-rs/serde/issues/1545)) ### [`v1.0.92`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.92) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.91...v1.0.92) - Support using `serde(flatten)` in no_std + alloc mode ([#​1543](https://togithub.com/serde-rs/serde/issues/1543), thanks [@​jplatte](https://togithub.com/jplatte)) ### [`v1.0.91`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.91) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.90...v1.0.91) - Support deserializing from MapAccessDeserializer into an enum ([#​1522](https://togithub.com/serde-rs/serde/issues/1522)) ### [`v1.0.90`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.90) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.89...v1.0.90) - Add an attribute `#[serde(crate = "path::to::serde")]` which replaces the use of `extern crate serde` in the generated code; this is intended for crates that invoke Serde derives from a macro and need to refer to `serde` through their own re-export rather than requiring callers to list Serde in Cargo.toml ([#​1499](https://togithub.com/serde-rs/serde/issues/1499), thanks [@​sgrif](https://togithub.com/sgrif)) ```rust #[derive(Deserialize)] #[serde(crate = "__tw::codegen::serde")] struct S { ... } ``` ```rust // expands to: impl<'de> __tw::codegen::serde::Deserialize<'de> for S { ... } ``` ### [`v1.0.89`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.89) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.88...v1.0.89) - Implement Serialize and Deserialize for core::cmp::Reverse\<T> ([#​1486](https://togithub.com/serde-rs/serde/issues/1486), thanks [@​vorot93](https://togithub.com/vorot93)) - Fix a Clippy lint triggered within generated code involving flatten + deny_unknown_fields ([#​1492](https://togithub.com/serde-rs/serde/issues/1492), thanks [@​thomaseizinger](https://togithub.com/thomaseizinger)) ### [`v1.0.88`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.88) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.87...v1.0.88) - Support `flatten` and `skip_serializing` / `skip_deserializing` attributes on the same field ### [`v1.0.87`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.87) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.86...v1.0.87) - Fix inclusion of tag in struct containing flattened fields ([#​1468](https://togithub.com/serde-rs/serde/issues/1468), thanks [@​jwillbold](https://togithub.com/jwillbold)) ### [`v1.0.86`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.86) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.85...v1.0.86) - Implement Serialize and Deserialize for core::ops::Bound\<T> ([#​1466](https://togithub.com/serde-rs/serde/issues/1466), thanks [@​0nkery](https://togithub.com/0nkery)) ### [`v1.0.85`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.85) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.84...v1.0.85) - Accept `#[serde(alias = "...")]` attribute on fields and variants which allows the same field or variant to be deserialized from any of multiple different names in the input ([#​1458](https://togithub.com/serde-rs/serde/issues/1458), thanks [@​Lymia](https://togithub.com/Lymia)) ```rust #[derive(Deserialize)] struct S { #[serde(alias = "old_name")] new_name: String, // will deserialize from either of "old_name" or "new_name" } ``` ### [`v1.0.84`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.84) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.83...v1.0.84) - Update example code in documentation to 2018 edition ### [`v1.0.83`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.83) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.82...v1.0.83) - Support a `rename_all` specification that applies only to the Serialize impl or only to the Deserialize impl ([#​1447](https://togithub.com/serde-rs/serde/issues/1447), thanks [@​vincascm](https://togithub.com/vincascm)) ```rust #[derive(Serialize, Deserialize)] #[serde(rename_all( serialize = "camelCase", deserialize = "SCREAMING_SNAKE_CASE", ))] struct S { /* ... */ } ``` - Allow serializing struct name inside of structs with named fields ([#​1448](https://togithub.com/serde-rs/serde/issues/1448), thanks [@​motu42](https://togithub.com/motu42)) ```rust #[derive(Serialize)] #[serde(tag = "type")] struct S { /* ... */ } // serializes as {"type":"S",...} ``` ### [`v1.0.82`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.82) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.81...v1.0.82) - Support `serde(default)` attribute inside of tuple structs and tuple variants ([#​1442](https://togithub.com/serde-rs/serde/issues/1442), thanks [@​tcr](https://togithub.com/tcr)) ### [`v1.0.81`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.81) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.80...v1.0.81) - Better error messages when using an invalid combination of serde attributes ([#​1424](https://togithub.com/serde-rs/serde/issues/1424), thanks [@​hcpl](https://togithub.com/hcpl)) - Support deserializing tagged enums inside of untagged enums in formats that encode tagged enum variants by index, like MessagePack ([#​1437](https://togithub.com/serde-rs/serde/issues/1437), thanks [@​daboross](https://togithub.com/daboross)) ### [`v1.0.80`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.80) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.79...v1.0.80) - Performance optimization for `Vec::deserialize_in_place` to deserialize elements in place ([#​1411](https://togithub.com/serde-rs/serde/issues/1411)) ### [`v1.0.79`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.79) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.78...v1.0.79) - Add `serde(other)` variant attribute for deserializing any variant that is not one of the others ([#​1382](https://togithub.com/serde-rs/serde/issues/1382)) ```rust #[derive(Deserialize)] #[serde(tag = "variant")] enum MyEnum { A(ModelA), B(ModelB), #[serde(other)] Unknown, } ``` In this internally tagged enum the `MyEnum::Unknown` variant would be produced if the `"variant"` tag in the input is neither `"A"` nor `"B"`. This feature is currently limited to externally tagged and adjacently tagged enums in which the `other` variant is a unit variant. ### [`v1.0.78`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.78) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.77...v1.0.78) - Fix panic deserializing flattened Value after flattened struct ([#​1379](https://togithub.com/serde-rs/serde/issues/1379)) ### [`v1.0.77`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.77) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.76...v1.0.77) - Fix internally tagged enum deserialization with unknown fields ([#​1376](https://togithub.com/serde-rs/serde/issues/1376), thanks [@​dreid](https://togithub.com/dreid)) ### [`v1.0.76`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.76) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.75...v1.0.76) - Provide impls for [`NonZeroU128`](https://doc.rust-lang.org/std/num/struct.NonZeroU128.html) ([#​1371](https://togithub.com/serde-rs/serde/issues/1371), thanks [@​hcpl](https://togithub.com/hcpl)) ### [`v1.0.75`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.75) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.74...v1.0.75) - Adjust dependency version requirement to support building with `-Z minimal-versions` in CI ([#​1367](https://togithub.com/serde-rs/serde/issues/1367)) ### [`v1.0.74`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.74) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.73...v1.0.74) - Disable i128 integers on Emscripten targets ([#​1365](https://togithub.com/serde-rs/serde/issues/1365), thanks [@​koute](https://togithub.com/koute)) ### [`v1.0.73`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.73) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.72...v1.0.73) - Fix the names of serialized fields when the Rust data structure uses a raw identifier ([#​1362](https://togithub.com/serde-rs/serde/issues/1362)) ### [`v1.0.72`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.72) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.71...v1.0.72) - Fix compilation of `default-features = false, features = ["alloc", "rc"]` feature combination ([#​1359](https://togithub.com/serde-rs/serde/issues/1359), thanks [@​Pratyush](https://togithub.com/Pratyush)) ### [`v1.0.71`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.71) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.70...v1.0.71) - Provide impls for [`core::ops::RangeInclusive`](https://doc.rust-lang.org/core/ops/struct.RangeInclusive.html) ([#​1347](https://togithub.com/serde-rs/serde/issues/1347), thanks [@​c410-f3r](https://togithub.com/c410-f3r)) - Provide impls for [`core::ops::Range`](https://doc.rust-lang.org/core/ops/struct.Range.html) whether or not `"std"` feature is enabled ([#​1348](https://togithub.com/serde-rs/serde/issues/1348)) ### [`v1.0.70`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.70) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.69...v1.0.70) - Update `--features alloc` to work with nightly-2018-07-07 ([#​1335](https://togithub.com/serde-rs/serde/issues/1335)) ### [`v1.0.69`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.69) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.68...v1.0.69) - Support Rust 2018 `use_extern_macros` ([https://github.com/rust-lang/rust/pull/51496](https://togithub.com/rust-lang/rust/pull/51496)) ### [`v1.0.68`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.68) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.67...v1.0.68) - Suppress 'extern crate' warning for rust 2018 ([#​1324](https://togithub.com/serde-rs/serde/issues/1324), thanks [@​jechase](https://togithub.com/jechase)) ### [`v1.0.67`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.67) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.66...v1.0.67) - Implement Serialize for core::fmt::Arguments ([#​1319](https://togithub.com/serde-rs/serde/issues/1319)) ### [`v1.0.66`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.66) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.65...v1.0.66) - Implement Serialize and Deserialize for `!` ([#​544](https://togithub.com/serde-rs/serde/issues/544), unstable) - Support Duration in no-std mode on sufficiently new compilers ([#​1123](https://togithub.com/serde-rs/serde/issues/1123)) - Improve compiler error messages ([#​1297](https://togithub.com/serde-rs/serde/issues/1297), thanks [@​adamcrume](https://togithub.com/adamcrume)) ### [`v1.0.65`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.65) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.64...v1.0.65) - Do not panic when serializing a RefCell that is currently mutably borrowed ([#​1300](https://togithub.com/serde-rs/serde/issues/1300), thanks [@​xfix](https://togithub.com/xfix)) - Allow flattened fields after a flattened map to receive input fields ([#​1299](https://togithub.com/serde-rs/serde/issues/1299)) ### [`v1.0.64`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.64) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.63...v1.0.64) - Second attempt to work around docs.rs old compiler version ([#​1295](https://togithub.com/serde-rs/serde/issues/1295)) ### [`v1.0.63`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.63) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.62...v1.0.63) - Workaround to get docs.rs successfully building our docs with its old compiler ([#​1294](https://togithub.com/serde-rs/serde/issues/1294)) ### [`v1.0.62`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.62) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.61...v1.0.62) - Implement [`IntoDeserializer`](https://docs.serde.rs/serde/de/trait.IntoDeserializer.html) for i128 and u128 ([#​1280](https://togithub.com/serde-rs/serde/issues/1280)) - Implement Copy for the primitive value deserializers ([#​1287](https://togithub.com/serde-rs/serde/issues/1287)) - Implement Clone for primitive value deserializers even when the error type cannot be cloned ([#​1287](https://togithub.com/serde-rs/serde/issues/1287)) ### [`v1.0.61`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.61) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.60...v1.0.61) - Stabilize Deserialize impls for dynamically sized Rc / Arc ([#​1266](https://togithub.com/serde-rs/serde/issues/1266)) - Stabilize Deserialize impl for Box\<CStr> ([#​1267](https://togithub.com/serde-rs/serde/issues/1267)) ### [`v1.0.60`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.60) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.59...v1.0.60) - Add Serde impls for i128 and u128 when compiling with Rust 1.26+ ([#​1263](https://togithub.com/serde-rs/serde/issues/1263)) - Stabilize Serde impls for std::num::NonZero\* on Rust 1.28+ ([#​1278](https://togithub.com/serde-rs/serde/issues/1278), thanks [@​SimonSapin](https://togithub.com/SimonSapin)) ### [`v1.0.59`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.59) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.58...v1.0.59) - Add a `serde(transparent)` container attribute to indicate that a struct serializes and deserializes the same as its only field -- analogous to `repr(transparent)` ([#​1054](https://togithub.com/serde-rs/serde/issues/1054)) ### [`v1.0.58`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.58) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.57...v1.0.58) - Fix generated code for deserializing untagged newtype variant ([#​1268](https://togithub.com/serde-rs/serde/issues/1268)) ### [`v1.0.57`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.57) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.56...v1.0.57) - Remove unstable Serialize and Deserialize impls for `NonZero<T>` which has been removed from the most recent nightly compiler ([#​1265](https://togithub.com/serde-rs/serde/issues/1265)) ### [`v1.0.56`](https://togithub.com/serde-rs/serde/releases/tag/v1.0.56) [Compare Source](https://togithub.com/serde-rs/serde/compare/v1.0.55...v1.0.56) - Add a Serde build.rs script for rustc version detection in preparation for adding i128 / u128 primitive support on sufficiently new compilers. Please let us know in [#​1136](https://togithub.com/serde-rs/serde/issues/1136) if having a build script causes undue complication in your environment. We will begin using the build script to enable observable functionality after a week o </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 9pm,before 6am" in timezone Europe/Zurich, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/smartive/zitadel-rust). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMzEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjMzMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Implement a solution for the macro helper issue discussed in #35896 as described in #35896 (comment).
Macros exported from libraries can be marked with
#[macro_export(local_inner_macros)]
and this annotation changes how nested macros in them are resolved.If we have a fn-like macro call
ident!(...)
andident
comes from amacro_rules!
macro marked with#[macro_export(local_inner_macros)]
then it's replaced with$crate::ident!(...)
and resolved as such ($crate
gets the same context asident
).