Skip to content

Commit f0b5c4f

Browse files
committed
Move MultiName to a new module
1 parent 3035d4f commit f0b5c4f

File tree

3 files changed

+58
-54
lines changed

3 files changed

+58
-54
lines changed

serde_derive/src/internals/attr.rs

+5-54
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::internals::name::MultiName;
12
use crate::internals::symbol::*;
23
use crate::internals::{ungroup, Ctxt};
34
use proc_macro2::{Spacing, Span, TokenStream, TokenTree};
@@ -21,7 +22,7 @@ use syn::{parse_quote, token, Ident, Lifetime, Token};
2122

2223
pub use crate::internals::case::RenameRule;
2324

24-
struct Attr<'c, T> {
25+
pub(crate) struct Attr<'c, T> {
2526
cx: &'c Ctxt,
2627
name: Symbol,
2728
tokens: TokenStream,
@@ -62,7 +63,7 @@ impl<'c, T> Attr<'c, T> {
6263
}
6364
}
6465

65-
fn get(self) -> Option<T> {
66+
pub(crate) fn get(self) -> Option<T> {
6667
self.value
6768
}
6869

@@ -90,7 +91,7 @@ impl<'c> BoolAttr<'c> {
9091
}
9192
}
9293

93-
struct VecAttr<'c, T> {
94+
pub(crate) struct VecAttr<'c, T> {
9495
cx: &'c Ctxt,
9596
name: Symbol,
9697
first_dup_tokens: TokenStream,
@@ -125,65 +126,15 @@ impl<'c, T> VecAttr<'c, T> {
125126
}
126127
}
127128

128-
fn get(self) -> Vec<T> {
129+
pub(crate) fn get(self) -> Vec<T> {
129130
self.values
130131
}
131132
}
132133

133-
pub struct MultiName {
134-
serialize: String,
135-
serialize_renamed: bool,
136-
deserialize: String,
137-
deserialize_renamed: bool,
138-
deserialize_aliases: BTreeSet<String>,
139-
}
140-
141134
fn unraw(ident: &Ident) -> String {
142135
ident.to_string().trim_start_matches("r#").to_owned()
143136
}
144137

145-
impl MultiName {
146-
fn from_attrs(
147-
source_name: String,
148-
ser_name: Attr<String>,
149-
de_name: Attr<String>,
150-
de_aliases: Option<VecAttr<String>>,
151-
) -> Self {
152-
let mut alias_set = BTreeSet::new();
153-
if let Some(de_aliases) = de_aliases {
154-
for alias_name in de_aliases.get() {
155-
alias_set.insert(alias_name);
156-
}
157-
}
158-
159-
let ser_name = ser_name.get();
160-
let ser_renamed = ser_name.is_some();
161-
let de_name = de_name.get();
162-
let de_renamed = de_name.is_some();
163-
MultiName {
164-
serialize: ser_name.unwrap_or_else(|| source_name.clone()),
165-
serialize_renamed: ser_renamed,
166-
deserialize: de_name.unwrap_or(source_name),
167-
deserialize_renamed: de_renamed,
168-
deserialize_aliases: alias_set,
169-
}
170-
}
171-
172-
/// Return the container name for the container when serializing.
173-
pub fn serialize_name(&self) -> &str {
174-
&self.serialize
175-
}
176-
177-
/// Return the container name for the container when deserializing.
178-
pub fn deserialize_name(&self) -> &str {
179-
&self.deserialize
180-
}
181-
182-
fn deserialize_aliases(&self) -> &BTreeSet<String> {
183-
&self.deserialize_aliases
184-
}
185-
}
186-
187138
#[derive(Copy, Clone)]
188139
pub struct RenameAllRules {
189140
pub serialize: RenameRule,

serde_derive/src/internals/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ pub mod attr;
44
mod case;
55
mod check;
66
mod ctxt;
7+
mod name;
78
mod receiver;
89
mod respan;
910
mod symbol;

serde_derive/src/internals/name.rs

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
use crate::internals::attr::{Attr, VecAttr};
2+
use std::collections::BTreeSet;
3+
4+
pub struct MultiName {
5+
pub(crate) serialize: String,
6+
pub(crate) serialize_renamed: bool,
7+
pub(crate) deserialize: String,
8+
pub(crate) deserialize_renamed: bool,
9+
pub(crate) deserialize_aliases: BTreeSet<String>,
10+
}
11+
12+
impl MultiName {
13+
pub(crate) fn from_attrs(
14+
source_name: String,
15+
ser_name: Attr<String>,
16+
de_name: Attr<String>,
17+
de_aliases: Option<VecAttr<String>>,
18+
) -> Self {
19+
let mut alias_set = BTreeSet::new();
20+
if let Some(de_aliases) = de_aliases {
21+
for alias_name in de_aliases.get() {
22+
alias_set.insert(alias_name);
23+
}
24+
}
25+
26+
let ser_name = ser_name.get();
27+
let ser_renamed = ser_name.is_some();
28+
let de_name = de_name.get();
29+
let de_renamed = de_name.is_some();
30+
MultiName {
31+
serialize: ser_name.unwrap_or_else(|| source_name.clone()),
32+
serialize_renamed: ser_renamed,
33+
deserialize: de_name.unwrap_or(source_name),
34+
deserialize_renamed: de_renamed,
35+
deserialize_aliases: alias_set,
36+
}
37+
}
38+
39+
/// Return the container name for the container when serializing.
40+
pub fn serialize_name(&self) -> &str {
41+
&self.serialize
42+
}
43+
44+
/// Return the container name for the container when deserializing.
45+
pub fn deserialize_name(&self) -> &str {
46+
&self.deserialize
47+
}
48+
49+
pub(crate) fn deserialize_aliases(&self) -> &BTreeSet<String> {
50+
&self.deserialize_aliases
51+
}
52+
}

0 commit comments

Comments
 (0)