mirror of
https://github.com/serde-rs/serde.git
synced 2025-09-27 13:00:49 +00:00
Move MultiName to a new module
This commit is contained in:
parent
3035d4fa34
commit
f0b5c4f857
@ -1,3 +1,4 @@
|
|||||||
|
use crate::internals::name::MultiName;
|
||||||
use crate::internals::symbol::*;
|
use crate::internals::symbol::*;
|
||||||
use crate::internals::{ungroup, Ctxt};
|
use crate::internals::{ungroup, Ctxt};
|
||||||
use proc_macro2::{Spacing, Span, TokenStream, TokenTree};
|
use proc_macro2::{Spacing, Span, TokenStream, TokenTree};
|
||||||
@ -21,7 +22,7 @@ use syn::{parse_quote, token, Ident, Lifetime, Token};
|
|||||||
|
|
||||||
pub use crate::internals::case::RenameRule;
|
pub use crate::internals::case::RenameRule;
|
||||||
|
|
||||||
struct Attr<'c, T> {
|
pub(crate) struct Attr<'c, T> {
|
||||||
cx: &'c Ctxt,
|
cx: &'c Ctxt,
|
||||||
name: Symbol,
|
name: Symbol,
|
||||||
tokens: TokenStream,
|
tokens: TokenStream,
|
||||||
@ -62,7 +63,7 @@ impl<'c, T> Attr<'c, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get(self) -> Option<T> {
|
pub(crate) fn get(self) -> Option<T> {
|
||||||
self.value
|
self.value
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +91,7 @@ impl<'c> BoolAttr<'c> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct VecAttr<'c, T> {
|
pub(crate) struct VecAttr<'c, T> {
|
||||||
cx: &'c Ctxt,
|
cx: &'c Ctxt,
|
||||||
name: Symbol,
|
name: Symbol,
|
||||||
first_dup_tokens: TokenStream,
|
first_dup_tokens: TokenStream,
|
||||||
@ -125,65 +126,15 @@ impl<'c, T> VecAttr<'c, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get(self) -> Vec<T> {
|
pub(crate) fn get(self) -> Vec<T> {
|
||||||
self.values
|
self.values
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct MultiName {
|
|
||||||
serialize: String,
|
|
||||||
serialize_renamed: bool,
|
|
||||||
deserialize: String,
|
|
||||||
deserialize_renamed: bool,
|
|
||||||
deserialize_aliases: BTreeSet<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn unraw(ident: &Ident) -> String {
|
fn unraw(ident: &Ident) -> String {
|
||||||
ident.to_string().trim_start_matches("r#").to_owned()
|
ident.to_string().trim_start_matches("r#").to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MultiName {
|
|
||||||
fn from_attrs(
|
|
||||||
source_name: String,
|
|
||||||
ser_name: Attr<String>,
|
|
||||||
de_name: Attr<String>,
|
|
||||||
de_aliases: Option<VecAttr<String>>,
|
|
||||||
) -> Self {
|
|
||||||
let mut alias_set = BTreeSet::new();
|
|
||||||
if let Some(de_aliases) = de_aliases {
|
|
||||||
for alias_name in de_aliases.get() {
|
|
||||||
alias_set.insert(alias_name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let ser_name = ser_name.get();
|
|
||||||
let ser_renamed = ser_name.is_some();
|
|
||||||
let de_name = de_name.get();
|
|
||||||
let de_renamed = de_name.is_some();
|
|
||||||
MultiName {
|
|
||||||
serialize: ser_name.unwrap_or_else(|| source_name.clone()),
|
|
||||||
serialize_renamed: ser_renamed,
|
|
||||||
deserialize: de_name.unwrap_or(source_name),
|
|
||||||
deserialize_renamed: de_renamed,
|
|
||||||
deserialize_aliases: alias_set,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return the container name for the container when serializing.
|
|
||||||
pub fn serialize_name(&self) -> &str {
|
|
||||||
&self.serialize
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return the container name for the container when deserializing.
|
|
||||||
pub fn deserialize_name(&self) -> &str {
|
|
||||||
&self.deserialize
|
|
||||||
}
|
|
||||||
|
|
||||||
fn deserialize_aliases(&self) -> &BTreeSet<String> {
|
|
||||||
&self.deserialize_aliases
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct RenameAllRules {
|
pub struct RenameAllRules {
|
||||||
pub serialize: RenameRule,
|
pub serialize: RenameRule,
|
||||||
|
@ -4,6 +4,7 @@ pub mod attr;
|
|||||||
mod case;
|
mod case;
|
||||||
mod check;
|
mod check;
|
||||||
mod ctxt;
|
mod ctxt;
|
||||||
|
mod name;
|
||||||
mod receiver;
|
mod receiver;
|
||||||
mod respan;
|
mod respan;
|
||||||
mod symbol;
|
mod symbol;
|
||||||
|
52
serde_derive/src/internals/name.rs
Normal file
52
serde_derive/src/internals/name.rs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
use crate::internals::attr::{Attr, VecAttr};
|
||||||
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
|
pub struct MultiName {
|
||||||
|
pub(crate) serialize: String,
|
||||||
|
pub(crate) serialize_renamed: bool,
|
||||||
|
pub(crate) deserialize: String,
|
||||||
|
pub(crate) deserialize_renamed: bool,
|
||||||
|
pub(crate) deserialize_aliases: BTreeSet<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MultiName {
|
||||||
|
pub(crate) fn from_attrs(
|
||||||
|
source_name: String,
|
||||||
|
ser_name: Attr<String>,
|
||||||
|
de_name: Attr<String>,
|
||||||
|
de_aliases: Option<VecAttr<String>>,
|
||||||
|
) -> Self {
|
||||||
|
let mut alias_set = BTreeSet::new();
|
||||||
|
if let Some(de_aliases) = de_aliases {
|
||||||
|
for alias_name in de_aliases.get() {
|
||||||
|
alias_set.insert(alias_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let ser_name = ser_name.get();
|
||||||
|
let ser_renamed = ser_name.is_some();
|
||||||
|
let de_name = de_name.get();
|
||||||
|
let de_renamed = de_name.is_some();
|
||||||
|
MultiName {
|
||||||
|
serialize: ser_name.unwrap_or_else(|| source_name.clone()),
|
||||||
|
serialize_renamed: ser_renamed,
|
||||||
|
deserialize: de_name.unwrap_or(source_name),
|
||||||
|
deserialize_renamed: de_renamed,
|
||||||
|
deserialize_aliases: alias_set,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the container name for the container when serializing.
|
||||||
|
pub fn serialize_name(&self) -> &str {
|
||||||
|
&self.serialize
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the container name for the container when deserializing.
|
||||||
|
pub fn deserialize_name(&self) -> &str {
|
||||||
|
&self.deserialize
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn deserialize_aliases(&self) -> &BTreeSet<String> {
|
||||||
|
&self.deserialize_aliases
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user