Skip to content

Commit 86a8438

Browse files
committed
add serialize for the de_unit_v-s
1 parent 3ae48d1 commit 86a8438

File tree

1 file changed

+48
-29
lines changed

1 file changed

+48
-29
lines changed

crates/rust-analyzer/src/config.rs

Lines changed: 48 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1854,7 +1854,7 @@ impl Config {
18541854
macro_rules! create_bool_or_string_serde {
18551855
($ident:ident<$bool:literal, $string:literal>) => {
18561856
mod $ident {
1857-
pub fn deserialize<'de, D>(d: D) -> Result<(), D::Error>
1857+
pub(super) fn deserialize<'de, D>(d: D) -> Result<(), D::Error>
18581858
where
18591859
D: serde::Deserializer<'de>,
18601860
{
@@ -1919,7 +1919,7 @@ macro_rules! create_bool_or_string_serde {
19191919
d.deserialize_any(V)
19201920
}
19211921

1922-
pub fn serialize<S>(serializer: S) -> Result<S::Ok, S::Error>
1922+
pub(super) fn serialize<S>(serializer: S) -> Result<S::Ok, S::Error>
19231923
where
19241924
S: serde::Serializer,
19251925
{
@@ -1933,25 +1933,33 @@ create_bool_or_string_serde!(false_or_never<false, "never">);
19331933

19341934
macro_rules! named_unit_variant {
19351935
($variant:ident) => {
1936-
pub(super) fn $variant<'de, D>(deserializer: D) -> Result<(), D::Error>
1937-
where
1938-
D: serde::Deserializer<'de>,
1939-
{
1940-
struct V;
1941-
impl<'de> serde::de::Visitor<'de> for V {
1942-
type Value = ();
1943-
fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1944-
f.write_str(concat!("\"", stringify!($variant), "\""))
1945-
}
1946-
fn visit_str<E: serde::de::Error>(self, value: &str) -> Result<Self::Value, E> {
1947-
if value == stringify!($variant) {
1948-
Ok(())
1949-
} else {
1950-
Err(E::invalid_value(serde::de::Unexpected::Str(value), &self))
1936+
pub(super) mod $variant {
1937+
pub(in super::super) fn deserialize<'de, D>(deserializer: D) -> Result<(), D::Error>
1938+
where
1939+
D: serde::Deserializer<'de>,
1940+
{
1941+
struct V;
1942+
impl<'de> serde::de::Visitor<'de> for V {
1943+
type Value = ();
1944+
fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1945+
f.write_str(concat!("\"", stringify!($variant), "\""))
1946+
}
1947+
fn visit_str<E: serde::de::Error>(self, value: &str) -> Result<Self::Value, E> {
1948+
if value == stringify!($variant) {
1949+
Ok(())
1950+
} else {
1951+
Err(E::invalid_value(serde::de::Unexpected::Str(value), &self))
1952+
}
19511953
}
19521954
}
1955+
deserializer.deserialize_str(V)
1956+
}
1957+
pub(in super::super) fn serialize<S>(serializer: S) -> Result<S::Ok, S::Error>
1958+
where
1959+
S: serde::Serializer,
1960+
{
1961+
serializer.serialize_str(stringify!($variant))
19531962
}
1954-
deserializer.deserialize_str(V)
19551963
}
19561964
};
19571965
}
@@ -2136,7 +2144,7 @@ enum CallableCompletionDef {
21362144
#[derive(Serialize, Deserialize, Debug, Clone)]
21372145
#[serde(untagged)]
21382146
enum CargoFeaturesDef {
2139-
#[serde(deserialize_with = "de_unit_v::all")]
2147+
#[serde(with = "de_unit_v::all")]
21402148
All,
21412149
Selected(Vec<String>),
21422150
}
@@ -2165,7 +2173,7 @@ enum LifetimeElisionDef {
21652173
Always,
21662174
#[serde(with = "false_or_never")]
21672175
Never,
2168-
#[serde(deserialize_with = "de_unit_v::skip_trivial")]
2176+
#[serde(with = "de_unit_v::skip_trivial")]
21692177
SkipTrivial,
21702178
}
21712179

@@ -2176,7 +2184,7 @@ enum ClosureReturnTypeHintsDef {
21762184
Always,
21772185
#[serde(with = "false_or_never")]
21782186
Never,
2179-
#[serde(deserialize_with = "de_unit_v::with_block")]
2187+
#[serde(with = "de_unit_v::with_block")]
21802188
WithBlock,
21812189
}
21822190

@@ -2196,7 +2204,7 @@ enum ReborrowHintsDef {
21962204
Always,
21972205
#[serde(with = "false_or_never")]
21982206
Never,
2199-
#[serde(deserialize_with = "de_unit_v::mutable")]
2207+
#[serde(with = "de_unit_v::mutable")]
22002208
Mutable,
22012209
}
22022210

@@ -2207,7 +2215,7 @@ enum AdjustmentHintsDef {
22072215
Always,
22082216
#[serde(with = "false_or_never")]
22092217
Never,
2210-
#[serde(deserialize_with = "de_unit_v::reborrow")]
2218+
#[serde(with = "de_unit_v::reborrow")]
22112219
Reborrow,
22122220
}
22132221

@@ -2218,7 +2226,7 @@ enum DiscriminantHintsDef {
22182226
Always,
22192227
#[serde(with = "false_or_never")]
22202228
Never,
2221-
#[serde(deserialize_with = "de_unit_v::fieldless")]
2229+
#[serde(with = "de_unit_v::fieldless")]
22222230
Fieldless,
22232231
}
22242232

@@ -2270,18 +2278,29 @@ enum WorkspaceSymbolSearchKindDef {
22702278
AllSymbols,
22712279
}
22722280

2273-
#[derive(Serialize, Deserialize, Debug, Copy, Clone)]
2281+
#[derive(Serialize, Deserialize, Debug, Copy, Clone, PartialEq)]
22742282
#[serde(rename_all = "snake_case")]
22752283
#[serde(untagged)]
2276-
pub enum MemoryLayoutHoverRenderKindDef {
2277-
#[serde(deserialize_with = "de_unit_v::decimal")]
2284+
enum MemoryLayoutHoverRenderKindDef {
2285+
#[serde(with = "de_unit_v::decimal")]
22782286
Decimal,
2279-
#[serde(deserialize_with = "de_unit_v::hexadecimal")]
2287+
#[serde(with = "de_unit_v::hexadecimal")]
22802288
Hexadecimal,
2281-
#[serde(deserialize_with = "de_unit_v::both")]
2289+
#[serde(with = "de_unit_v::both")]
22822290
Both,
22832291
}
22842292

2293+
#[test]
2294+
fn untagged_option_hover_render_kind() {
2295+
let hex = MemoryLayoutHoverRenderKindDef::Hexadecimal;
2296+
2297+
let ser = serde_json::to_string(&Some(hex)).unwrap();
2298+
assert_eq!(&ser, "\"hexadecimal\"");
2299+
2300+
let opt: Option<_> = serde_json::from_str("\"hexadecimal\"").unwrap();
2301+
assert_eq!(opt, Some(hex));
2302+
}
2303+
22852304
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
22862305
#[serde(rename_all = "snake_case")]
22872306
#[serde(untagged)]

0 commit comments

Comments
 (0)