Field defaults overwrite explicitly selected unit enum variants
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 68/100
Direzione di ricerca
Start at the derived Configuration implementation for enums and inspect how contains_non_secret_data() treats unit variants. Add a regression test using the issue’s LogFormat example and field default. Done means the explicitly configured Json value survives try_build() instead of being replaced by Plain.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The Configuration derive returns false from contains_non_secret_data() for unit enum variants. This causes #[confik(default = …)] to overwrite explicit values—for example, configured LogFormat::Json becomes the default LogFormat::Plain.
An explicitly selected variant should count as supplied data and take precedence over the field default.
This works:
// Cargo.toml:
// confik = "=0.15.12"
// serde = { version = "1", features = ["derive"] }
use confik::{Configuration, TomlSource};
#[derive(Debug, PartialEq, serde::Deserialize)]
#[serde(rename_all = "lowercase")]
enum LogFormat {
Plain,
Json,
}
impl Configuration for LogFormat {
type Builder = Option<Self>;
}
#[derive(Configuration)]
struct Config {
#[confik(default = LogFormat::Plain)]
format: LogFormat,
}
fn main() {
let config = Config::builder()
.override_with(TomlSource::new(r#"format = "json""#))
.try_build()
.unwrap();
assert_eq!(config.format, LogFormat::Json);
}
This doesn’t — a derived implementation with the same field default:
// Cargo.toml: confik = "=0.15.12"
use confik::{Configuration, TomlSource};
#[derive(Debug, PartialEq, Configuration)]
#[confik(forward(serde(rename_all = "lowercase")))]
enum LogFormat {
Plain,
Json,
}
#[derive(Configuration)]
struct Config {
#[confik(default = LogFormat::Plain)]
format: LogFormat,
}
fn main() {
let config = Config::builder()
.override_with(TomlSource::new(r#"format = "json""#))
.try_build()
.unwrap();
// Fails: left is Plain, right is Json.
assert_eq!(config.format, LogFormat::Json);
}
- Lingua principale
- Rust
- Stelle
- 46
- Fork
- 3
- Merge medio
- 19h 35m
- PR unite (30g)
- 27
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di x52dev/confik
-
bug-upstream
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
x52dev/confik#118 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
KDL source supportApertaenhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di x52dev/confik
Issue simili
-
comp-view potential bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
ClickHouse/ClickHouse#128410 ·
I maintainer di solito rispondono entro 1 giorno
-
Save As onto the project's own .snxprj overwrites it with a schematic and the project can no longer openForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaarea: app data-loss priority: high type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
lan_bot: 13 of 15 tests fail on main (minecraft:dialog entries carry data with the known pack)Forse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaskip-release
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
horizon-rust/horizon#5505 ·
I maintainer di solito rispondono entro 1 giorno
-
area: cloud S3: minor
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
manaflow-ai/cmux#29709 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
area:mem good first issue priority:low type:docs
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
I maintainer di solito rispondono entro 1 giorno