]> git.proxmox.com Git - rustc.git/blame - vendor/serde_derive/src/lib.rs
New upstream version 1.48.0~beta.8+dfsg1
[rustc.git] / vendor / serde_derive / src / lib.rs
CommitLineData
3b2f2976
XL
1//! This crate provides Serde's two derive macros.
2//!
f9f354fc
XL
3//! ```edition2018
4//! # use serde_derive::{Serialize, Deserialize};
abe05a73 5//! #
3b2f2976 6//! #[derive(Serialize, Deserialize)]
abe05a73
XL
7//! # struct S;
8//! #
9//! # fn main() {}
3b2f2976
XL
10//! ```
11//!
12//! Please refer to [https://serde.rs/derive.html] for how to set this up.
13//!
14//! [https://serde.rs/derive.html]: https://serde.rs/derive.html
15
1b1a35ee 16#![doc(html_root_url = "https://docs.rs/serde_derive/1.0.116")]
f9f354fc 17#![allow(unknown_lints, bare_trait_objects)]
f035d41b 18#![deny(clippy::all, clippy::pedantic)]
f9f354fc 19// Ignored clippy lints
f035d41b
XL
20#![allow(
21 clippy::cognitive_complexity,
22 clippy::enum_variant_names,
3dfed10e 23 clippy::match_like_matches_macro,
f035d41b
XL
24 clippy::needless_pass_by_value,
25 clippy::too_many_arguments,
26 clippy::trivially_copy_pass_by_ref,
27 clippy::used_underscore_binding,
28 clippy::wildcard_in_or_patterns,
29 // clippy bug: https://github.com/rust-lang/rust-clippy/issues/5704
30 clippy::unnested_or_patterns,
8faf50e0 31)]
f9f354fc 32// Ignored clippy_pedantic lints
f035d41b
XL
33#![allow(
34 clippy::cast_possible_truncation,
35 clippy::checked_conversions,
36 clippy::doc_markdown,
37 clippy::enum_glob_use,
38 clippy::filter_map,
39 clippy::indexing_slicing,
40 clippy::items_after_statements,
41 clippy::match_same_arms,
42 clippy::module_name_repetitions,
43 clippy::must_use_candidate,
3dfed10e 44 clippy::option_if_let_else,
f035d41b
XL
45 clippy::similar_names,
46 clippy::single_match_else,
47 clippy::struct_excessive_bools,
48 clippy::too_many_lines,
49 clippy::unseparated_literal_suffix,
50 clippy::use_self,
51 clippy::wildcard_imports
83c7162d 52)]
3b2f2976 53
3b2f2976
XL
54#[macro_use]
55extern crate quote;
0531ce1d 56#[macro_use]
ff7c6d11 57extern crate syn;
3b2f2976 58
3b2f2976 59extern crate proc_macro;
0531ce1d
XL
60extern crate proc_macro2;
61
8faf50e0
XL
62mod internals;
63
3b2f2976 64use proc_macro::TokenStream;
0531ce1d 65use syn::DeriveInput;
3b2f2976
XL
66
67#[macro_use]
68mod bound;
69#[macro_use]
70mod fragment;
71
3b2f2976 72mod de;
f9f354fc 73mod dummy;
8faf50e0 74mod pretend;
83c7162d 75mod ser;
8faf50e0 76mod try;
3b2f2976
XL
77
78#[proc_macro_derive(Serialize, attributes(serde))]
79pub fn derive_serialize(input: TokenStream) -> TokenStream {
0731742a 80 let input = parse_macro_input!(input as DeriveInput);
8faf50e0 81 ser::expand_derive_serialize(&input)
0731742a 82 .unwrap_or_else(to_compile_errors)
8faf50e0 83 .into()
3b2f2976
XL
84}
85
86#[proc_macro_derive(Deserialize, attributes(serde))]
87pub fn derive_deserialize(input: TokenStream) -> TokenStream {
0731742a 88 let input = parse_macro_input!(input as DeriveInput);
8faf50e0 89 de::expand_derive_deserialize(&input)
0731742a 90 .unwrap_or_else(to_compile_errors)
8faf50e0
XL
91 .into()
92}
93
0731742a
XL
94fn to_compile_errors(errors: Vec<syn::Error>) -> proc_macro2::TokenStream {
95 let compile_errors = errors.iter().map(syn::Error::to_compile_error);
96 quote!(#(#compile_errors)*)
3b2f2976 97}