]> git.proxmox.com Git - rustc.git/blame - src/vendor/serde_derive/src/lib.rs
New upstream version 1.30.0~beta.7+dfsg1
[rustc.git] / src / vendor / serde_derive / src / lib.rs
CommitLineData
3b2f2976
XL
1// Copyright 2017 Serde Developers
2//
3// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6// option. This file may not be copied, modified, or distributed
7// except according to those terms.
8
9//! This crate provides Serde's two derive macros.
10//!
abe05a73
XL
11//! ```rust
12//! # #[macro_use]
13//! # extern crate serde_derive;
14//! #
3b2f2976 15//! #[derive(Serialize, Deserialize)]
abe05a73
XL
16//! # struct S;
17//! #
18//! # fn main() {}
3b2f2976
XL
19//! ```
20//!
21//! Please refer to [https://serde.rs/derive.html] for how to set this up.
22//!
23//! [https://serde.rs/derive.html]: https://serde.rs/derive.html
24
b7449926 25#![doc(html_root_url = "https://docs.rs/serde_derive/1.0.75")]
8faf50e0
XL
26#![cfg_attr(feature = "cargo-clippy", deny(clippy, clippy_pedantic))]
27// Whitelisted clippy lints
83c7162d
XL
28#![cfg_attr(
29 feature = "cargo-clippy",
8faf50e0 30 allow(
b7449926
XL
31 enum_variant_names,
32 redundant_field_names,
33 too_many_arguments,
34 used_underscore_binding,
35 cyclomatic_complexity,
36 needless_pass_by_value
8faf50e0
XL
37 )
38)]
39// Whitelisted clippy_pedantic lints
40#![cfg_attr(
41 feature = "cargo-clippy",
42 allow(
b7449926
XL
43 items_after_statements,
44 doc_markdown,
45 stutter,
46 similar_names,
47 use_self,
48 single_match_else,
49 enum_glob_use,
50 match_same_arms,
51 filter_map,
52 cast_possible_truncation,
53 indexing_slicing,
8faf50e0 54 )
83c7162d 55)]
3b2f2976 56// The `quote!` macro requires deep recursion.
0531ce1d 57#![recursion_limit = "512"]
3b2f2976 58
3b2f2976
XL
59#[macro_use]
60extern crate quote;
0531ce1d 61#[macro_use]
ff7c6d11 62extern crate syn;
3b2f2976 63
3b2f2976 64extern crate proc_macro;
0531ce1d
XL
65extern crate proc_macro2;
66
8faf50e0
XL
67mod internals;
68
3b2f2976 69use proc_macro::TokenStream;
0531ce1d 70use syn::DeriveInput;
3b2f2976
XL
71
72#[macro_use]
73mod bound;
74#[macro_use]
75mod fragment;
76
3b2f2976 77mod de;
8faf50e0 78mod pretend;
83c7162d 79mod ser;
8faf50e0 80mod try;
3b2f2976
XL
81
82#[proc_macro_derive(Serialize, attributes(serde))]
83pub fn derive_serialize(input: TokenStream) -> TokenStream {
0531ce1d 84 let input: DeriveInput = syn::parse(input).unwrap();
8faf50e0
XL
85 ser::expand_derive_serialize(&input)
86 .unwrap_or_else(compile_error)
87 .into()
3b2f2976
XL
88}
89
90#[proc_macro_derive(Deserialize, attributes(serde))]
91pub fn derive_deserialize(input: TokenStream) -> TokenStream {
0531ce1d 92 let input: DeriveInput = syn::parse(input).unwrap();
8faf50e0
XL
93 de::expand_derive_deserialize(&input)
94 .unwrap_or_else(compile_error)
95 .into()
96}
97
98fn compile_error(message: String) -> proc_macro2::TokenStream {
99 quote! {
100 compile_error!(#message);
3b2f2976
XL
101 }
102}