1//! This crate provides Serde's two derive macros. 2//! 3//! ```edition2021 4//! # use serde_derive::{Deserialize, Serialize}; 5//! # 6//! #[derive(Serialize, Deserialize)] 7//! # struct S; 8//! # 9//! # fn main() {} 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 16#![doc(html_root_url = "https://docs.rs/serde_derive/1.0.197")] 17// Ignored clippy lints 18#![allow( 19 // clippy false positive: https://github.com/rust-lang/rust-clippy/issues/7054 20 clippy::branches_sharing_code, 21 clippy::cognitive_complexity, 22 // clippy bug: https://github.com/rust-lang/rust-clippy/issues/7575 23 clippy::collapsible_match, 24 clippy::derive_partial_eq_without_eq, 25 clippy::enum_variant_names, 26 // clippy bug: https://github.com/rust-lang/rust-clippy/issues/6797 27 clippy::manual_map, 28 clippy::match_like_matches_macro, 29 clippy::needless_pass_by_value, 30 clippy::too_many_arguments, 31 clippy::trivially_copy_pass_by_ref, 32 clippy::used_underscore_binding, 33 clippy::wildcard_in_or_patterns, 34 // clippy bug: https://github.com/rust-lang/rust-clippy/issues/5704 35 clippy::unnested_or_patterns, 36)] 37// Ignored clippy_pedantic lints 38#![allow( 39 clippy::cast_possible_truncation, 40 clippy::checked_conversions, 41 clippy::doc_markdown, 42 clippy::enum_glob_use, 43 clippy::indexing_slicing, 44 clippy::items_after_statements, 45 clippy::let_underscore_untyped, 46 clippy::manual_assert, 47 clippy::map_err_ignore, 48 clippy::match_same_arms, 49 // clippy bug: https://github.com/rust-lang/rust-clippy/issues/6984 50 clippy::match_wildcard_for_single_variants, 51 clippy::module_name_repetitions, 52 clippy::must_use_candidate, 53 clippy::similar_names, 54 clippy::single_match_else, 55 clippy::struct_excessive_bools, 56 clippy::too_many_lines, 57 clippy::unseparated_literal_suffix, 58 clippy::unused_self, 59 clippy::use_self, 60 clippy::wildcard_imports 61)] 62#![cfg_attr(all(test, exhaustive), feature(non_exhaustive_omitted_patterns_lint))] 63 64extern crate proc_macro2; 65extern crate quote; 66extern crate syn; 67 68extern crate proc_macro; 69 70mod internals; 71 72use proc_macro::TokenStream; 73use syn::parse_macro_input; 74use syn::DeriveInput; 75 76#[macro_use] 77mod bound; 78#[macro_use] 79mod fragment; 80 81mod de; 82mod dummy; 83mod pretend; 84mod ser; 85mod this; 86 87#[proc_macro_derive(Serialize, attributes(serde))] 88pub fn derive_serialize(input: TokenStream) -> TokenStream { 89 let mut input = parse_macro_input!(input as DeriveInput); 90 ser::expand_derive_serialize(&mut input) 91 .unwrap_or_else(syn::Error::into_compile_error) 92 .into() 93} 94 95#[proc_macro_derive(Deserialize, attributes(serde))] 96pub fn derive_deserialize(input: TokenStream) -> TokenStream { 97 let mut input = parse_macro_input!(input as DeriveInput); 98 de::expand_derive_deserialize(&mut input) 99 .unwrap_or_else(syn::Error::into_compile_error) 100 .into() 101} 102