mirror of https://github.com/rwf2/Rocket.git
Allow non-breaking config additions.
If stars aligned properly, we might imagine writing this: #[non_exhaustive] struct Config { pub field: Foo, pub other: Bar, } ...with semantics that would allow the defining crate (here, Rocket), to construct the structure directly while consumers would need to use public constructors or struct update syntax: Config { field: Foo, other: Bar, ..Default::default() } Alas, this is not the way `non_exhaustive` works on structs. You cannot use field-update syntax to construct `Config` above. You must use public constructors. This means builder methods or mutating an already built struct. This is not what we want. I don't know why it works this way. I don't see why it must. Something something Drop. So we have this hack from the pre-non_exhaustive era.
This commit is contained in:
parent
5f50d5e232
commit
333da45470
|
@ -92,6 +92,22 @@ pub struct Config {
|
|||
/// Whether to use colors and emoji when logging. **(default: `true`)**
|
||||
#[serde(deserialize_with = "figment::util::bool_from_str_or_int")]
|
||||
pub cli_colors: bool,
|
||||
/// PRIVATE: This structure may grow (but never change otherwise) in a
|
||||
/// non-breaking release. As such, constructing this structure should
|
||||
/// _always_ be done using a public constructor or update syntax:
|
||||
///
|
||||
/// ```rust
|
||||
/// use rocket::Config;
|
||||
///
|
||||
/// let config = Config {
|
||||
/// port: 1024,
|
||||
/// keep_alive: 10,
|
||||
/// ..Default::default()
|
||||
/// };
|
||||
/// ```
|
||||
#[doc(hidden)]
|
||||
#[serde(skip)]
|
||||
pub __non_exhaustive: (),
|
||||
}
|
||||
|
||||
impl Default for Config {
|
||||
|
@ -150,8 +166,9 @@ impl Config {
|
|||
secret_key: SecretKey::zero(),
|
||||
temp_dir: std::env::temp_dir(),
|
||||
log_level: LogLevel::Normal,
|
||||
cli_colors: true,
|
||||
shutdown: Shutdown::default(),
|
||||
cli_colors: true,
|
||||
__non_exhaustive: (),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -188,6 +188,7 @@ impl fmt::Display for Sig {
|
|||
/// grace: 10,
|
||||
/// mercy: 5,
|
||||
/// force: true,
|
||||
/// ..Default::default()
|
||||
/// },
|
||||
/// ..Config::default()
|
||||
/// };
|
||||
|
@ -236,7 +237,24 @@ pub struct Shutdown {
|
|||
/// cooperate.
|
||||
///
|
||||
/// **default: `true`**
|
||||
#[serde(deserialize_with = "figment::util::bool_from_str_or_int")]
|
||||
pub force: bool,
|
||||
/// PRIVATE: This structure may grow (but never change otherwise) in a
|
||||
/// non-breaking release. As such, constructing this structure should
|
||||
/// _always_ be done using a public constructor or update syntax:
|
||||
///
|
||||
/// ```rust
|
||||
/// use rocket::config::Shutdown;
|
||||
///
|
||||
/// let config = Shutdown {
|
||||
/// grace: 5,
|
||||
/// mercy: 10,
|
||||
/// ..Default::default()
|
||||
/// };
|
||||
/// ```
|
||||
#[doc(hidden)]
|
||||
#[serde(skip)]
|
||||
pub __non_exhaustive: (),
|
||||
}
|
||||
|
||||
impl fmt::Display for Shutdown {
|
||||
|
@ -266,6 +284,7 @@ impl Default for Shutdown {
|
|||
grace: 2,
|
||||
mercy: 3,
|
||||
force: true,
|
||||
__non_exhaustive: (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue