trybuild_internals_api/
inherit.rs

1use serde::de::{self, Deserialize, Deserializer, Visitor};
2use serde_derive::Deserialize;
3use std::fmt;
4
5#[derive(Deserialize)]
6#[serde(deny_unknown_fields)]
7pub struct InheritEdition {
8    #[allow(dead_code)]
9    pub workspace: True,
10}
11
12pub struct True;
13
14impl<'de> Deserialize<'de> for True {
15    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
16    where
17        D: Deserializer<'de>,
18    {
19        deserializer.deserialize_bool(True)
20    }
21}
22
23impl<'de> Visitor<'de> for True {
24    type Value = True;
25
26    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
27        formatter.write_str("bool")
28    }
29
30    fn visit_bool<E>(self, b: bool) -> Result<Self::Value, E>
31    where
32        E: de::Error,
33    {
34        if b {
35            Ok(True)
36        } else {
37            Err(de::Error::custom(
38                "workspace=false is unsupported for package.edition",
39            ))
40        }
41    }
42}