Skip to content

Commit 3ae48d1

Browse files
committed
serialize impl for true_or_always/false_or_never
1 parent 8835d42 commit 3ae48d1

File tree

1 file changed

+77
-65
lines changed

1 file changed

+77
-65
lines changed

crates/rust-analyzer/src/config.rs

Lines changed: 77 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1851,73 +1851,85 @@ impl Config {
18511851
}
18521852
// Deserialization definitions
18531853

1854-
macro_rules! create_bool_or_string_de {
1854+
macro_rules! create_bool_or_string_serde {
18551855
($ident:ident<$bool:literal, $string:literal>) => {
1856-
fn $ident<'de, D>(d: D) -> Result<(), D::Error>
1857-
where
1858-
D: serde::Deserializer<'de>,
1859-
{
1860-
struct V;
1861-
impl<'de> serde::de::Visitor<'de> for V {
1862-
type Value = ();
1863-
1864-
fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1865-
formatter.write_str(concat!(
1866-
stringify!($bool),
1867-
" or \"",
1868-
stringify!($string),
1869-
"\""
1870-
))
1871-
}
1856+
mod $ident {
1857+
pub fn deserialize<'de, D>(d: D) -> Result<(), D::Error>
1858+
where
1859+
D: serde::Deserializer<'de>,
1860+
{
1861+
struct V;
1862+
impl<'de> serde::de::Visitor<'de> for V {
1863+
type Value = ();
1864+
1865+
fn expecting(
1866+
&self,
1867+
formatter: &mut std::fmt::Formatter<'_>,
1868+
) -> std::fmt::Result {
1869+
formatter.write_str(concat!(
1870+
stringify!($bool),
1871+
" or \"",
1872+
stringify!($string),
1873+
"\""
1874+
))
1875+
}
18721876

1873-
fn visit_bool<E>(self, v: bool) -> Result<Self::Value, E>
1874-
where
1875-
E: serde::de::Error,
1876-
{
1877-
match v {
1878-
$bool => Ok(()),
1879-
_ => Err(serde::de::Error::invalid_value(
1880-
serde::de::Unexpected::Bool(v),
1881-
&self,
1882-
)),
1877+
fn visit_bool<E>(self, v: bool) -> Result<Self::Value, E>
1878+
where
1879+
E: serde::de::Error,
1880+
{
1881+
match v {
1882+
$bool => Ok(()),
1883+
_ => Err(serde::de::Error::invalid_value(
1884+
serde::de::Unexpected::Bool(v),
1885+
&self,
1886+
)),
1887+
}
18831888
}
1884-
}
18851889

1886-
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1887-
where
1888-
E: serde::de::Error,
1889-
{
1890-
match v {
1891-
$string => Ok(()),
1892-
_ => Err(serde::de::Error::invalid_value(
1893-
serde::de::Unexpected::Str(v),
1894-
&self,
1895-
)),
1890+
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
1891+
where
1892+
E: serde::de::Error,
1893+
{
1894+
match v {
1895+
$string => Ok(()),
1896+
_ => Err(serde::de::Error::invalid_value(
1897+
serde::de::Unexpected::Str(v),
1898+
&self,
1899+
)),
1900+
}
18961901
}
1897-
}
18981902

1899-
fn visit_enum<A>(self, a: A) -> Result<Self::Value, A::Error>
1900-
where
1901-
A: serde::de::EnumAccess<'de>,
1902-
{
1903-
use serde::de::VariantAccess;
1904-
let (variant, va) = a.variant::<&'de str>()?;
1905-
va.unit_variant()?;
1906-
match variant {
1907-
$string => Ok(()),
1908-
_ => Err(serde::de::Error::invalid_value(
1909-
serde::de::Unexpected::Str(variant),
1910-
&self,
1911-
)),
1903+
fn visit_enum<A>(self, a: A) -> Result<Self::Value, A::Error>
1904+
where
1905+
A: serde::de::EnumAccess<'de>,
1906+
{
1907+
use serde::de::VariantAccess;
1908+
let (variant, va) = a.variant::<&'de str>()?;
1909+
va.unit_variant()?;
1910+
match variant {
1911+
$string => Ok(()),
1912+
_ => Err(serde::de::Error::invalid_value(
1913+
serde::de::Unexpected::Str(variant),
1914+
&self,
1915+
)),
1916+
}
19121917
}
19131918
}
1919+
d.deserialize_any(V)
1920+
}
1921+
1922+
pub fn serialize<S>(serializer: S) -> Result<S::Ok, S::Error>
1923+
where
1924+
S: serde::Serializer,
1925+
{
1926+
serializer.serialize_str($string)
19141927
}
1915-
d.deserialize_any(V)
19161928
}
19171929
};
19181930
}
1919-
create_bool_or_string_de!(true_or_always<true, "always">);
1920-
create_bool_or_string_de!(false_or_never<false, "never">);
1931+
create_bool_or_string_serde!(true_or_always<true, "always">);
1932+
create_bool_or_string_serde!(false_or_never<false, "never">);
19211933

19221934
macro_rules! named_unit_variant {
19231935
($variant:ident) => {
@@ -2149,9 +2161,9 @@ enum InvocationLocation {
21492161
#[derive(Serialize, Deserialize, Debug, Clone)]
21502162
#[serde(untagged)]
21512163
enum LifetimeElisionDef {
2152-
#[serde(deserialize_with = "true_or_always")]
2164+
#[serde(with = "true_or_always")]
21532165
Always,
2154-
#[serde(deserialize_with = "false_or_never")]
2166+
#[serde(with = "false_or_never")]
21552167
Never,
21562168
#[serde(deserialize_with = "de_unit_v::skip_trivial")]
21572169
SkipTrivial,
@@ -2160,9 +2172,9 @@ enum LifetimeElisionDef {
21602172
#[derive(Serialize, Deserialize, Debug, Clone)]
21612173
#[serde(untagged)]
21622174
enum ClosureReturnTypeHintsDef {
2163-
#[serde(deserialize_with = "true_or_always")]
2175+
#[serde(with = "true_or_always")]
21642176
Always,
2165-
#[serde(deserialize_with = "false_or_never")]
2177+
#[serde(with = "false_or_never")]
21662178
Never,
21672179
#[serde(deserialize_with = "de_unit_v::with_block")]
21682180
WithBlock,
@@ -2180,9 +2192,9 @@ enum ClosureStyle {
21802192
#[derive(Serialize, Deserialize, Debug, Clone)]
21812193
#[serde(untagged)]
21822194
enum ReborrowHintsDef {
2183-
#[serde(deserialize_with = "true_or_always")]
2195+
#[serde(with = "true_or_always")]
21842196
Always,
2185-
#[serde(deserialize_with = "false_or_never")]
2197+
#[serde(with = "false_or_never")]
21862198
Never,
21872199
#[serde(deserialize_with = "de_unit_v::mutable")]
21882200
Mutable,
@@ -2191,9 +2203,9 @@ enum ReborrowHintsDef {
21912203
#[derive(Serialize, Deserialize, Debug, Clone)]
21922204
#[serde(untagged)]
21932205
enum AdjustmentHintsDef {
2194-
#[serde(deserialize_with = "true_or_always")]
2206+
#[serde(with = "true_or_always")]
21952207
Always,
2196-
#[serde(deserialize_with = "false_or_never")]
2208+
#[serde(with = "false_or_never")]
21972209
Never,
21982210
#[serde(deserialize_with = "de_unit_v::reborrow")]
21992211
Reborrow,
@@ -2202,9 +2214,9 @@ enum AdjustmentHintsDef {
22022214
#[derive(Serialize, Deserialize, Debug, Clone)]
22032215
#[serde(untagged)]
22042216
enum DiscriminantHintsDef {
2205-
#[serde(deserialize_with = "true_or_always")]
2217+
#[serde(with = "true_or_always")]
22062218
Always,
2207-
#[serde(deserialize_with = "false_or_never")]
2219+
#[serde(with = "false_or_never")]
22082220
Never,
22092221
#[serde(deserialize_with = "de_unit_v::fieldless")]
22102222
Fieldless,

0 commit comments

Comments
 (0)