View all comments
Provides a native way to easily manage multiple conditional flags without having to rewrite each clause multiple times.
Public API
cfg_select ! {
unix => {
fn foo( ) { /* unix specific functionality */ }
}
target_pointer_width = "32" => {
fn foo( ) { /* non-unix, 32-bit functionality */ }
}
_ => {
fn foo( ) { /* fallback implementation */ }
}
}
let is_unix_str = cfg_select ! {
unix => "unix" ,
_ => "not unix" ,
} ;
println ! ( "{is_unix_str}" ) ;
Steps / History
Unresolved Questions
What should the final syntax be? A match-like syntax feels more natural in the sense that each macro fragment resembles an arm.
Should the macro be supported directly by a language feature?
What should the feature name be? cfg_match conflicts with the already existing cfg_match crate.
How can we support usage in both expression-position and item position?
Support trailing commas to have similar grammar as match statements. (cfg_select: Support unbraced expressions #145233 )
References
Implementation history
Tooling support
View all comments
Provides a native way to easily manage multiple conditional flags without having to rewrite each clause multiple times.
Public API
Steps / History
cfg_match!macro #115416)cfg_matchtocfg_selectRenamecfg_match!tocfg_select!#137198cfg_select!#149783Unresolved Questions
What should the final syntax be? A match-like syntax feels more natural in the sense that each macro fragment resembles an arm.Should the macro be supported directly by a language feature?What should the feature name be?cfg_matchconflicts with the already existingcfg_matchcrate.How can we support usage in both expression-position and item position?Support trailing commas to have similar grammar as(cfg_select: Support unbraced expressions #145233)matchstatements.References
cfg_if#59442Implementation history
cfg_match(Compiler) #116312cfg_matchinto a builtin #116323cfg_match(Library) #116342cfg_matchfrom the prelude #117162cfg_match] Generalize inputs #130313cfg_match!tocfg_select!#137198cfg_match!a semitransparent macro #138993cfg_match!in core #138996cfg_selecta builtin macro #143461cfg_select!documentation #143941Tooling support
rustfmtside:cfg_select#144323