From 48604e124f5da773ec97f6bac2aaddf9ad477a20 Mon Sep 17 00:00:00 2001 From: Vincent Thiberville Date: Thu, 14 Oct 2021 17:42:02 +0200 Subject: [PATCH] feat: forbid creating IniDefault using struct expression This ensures that new fields can be added to it without it being a breaking change. --- src/ini.rs | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/src/ini.rs b/src/ini.rs index 031f4b9..5700581 100755 --- a/src/ini.rs +++ b/src/ini.rs @@ -35,6 +35,7 @@ pub struct Ini { ///let mut config2 = Ini::new_from_defaults(default); // default gets consumed ///``` #[derive(Debug, Clone, Eq, PartialEq)] +#[non_exhaustive] pub struct IniDefault { ///Denotes the default section header name. ///## Example @@ -145,16 +146,9 @@ impl Ini { ///use configparser::ini::Ini; ///use configparser::ini::IniDefault; /// - ///let default = IniDefault { - /// default_section: "default".to_owned(), - /// comment_symbols: vec![';'], - /// delimiters: vec!['='], - /// boolean_values: [ - /// (true, vec!["true", "yes", "t", "y", "on", "1"].iter().map(|&s| s.to_owned()).collect()), - /// (false, vec!["false", "no", "f", "n", "off", "0"].iter().map(|&s| s.to_owned()).collect()), - /// ].iter().cloned().collect(), - /// case_sensitive: true, - ///}; + ///let mut default = IniDefault::default(); + ///default.comment_symbols = vec![';']; + ///default.delimiters = vec!['=']; ///let mut config = Ini::new_from_defaults(default.clone()); ///// Now, load as usual with new defaults: ///let map = config.load("tests/test.ini").unwrap(); @@ -199,16 +193,9 @@ impl Ini { ///use configparser::ini::IniDefault; /// ///let mut config = Ini::new(); - ///let default = IniDefault { - /// default_section: "default".to_owned(), - /// comment_symbols: vec![';', '#'], - /// delimiters: vec!['=', ':'], - /// boolean_values: [ - /// (true, vec!["true", "yes", "t", "y", "on", "1"].iter().map(|&s| s.to_owned()).collect()), - /// (false, vec!["false", "no", "f", "n", "off", "0"].iter().map(|&s| s.to_owned()).collect()), - /// ].iter().cloned().collect(), - /// case_sensitive: true, - ///}; // This is equivalent to ini_cs() defaults + ///let mut default = IniDefault::default(); + ///default.case_sensitive = true; + ///// This is equivalent to ini_cs() defaults ///config.load_defaults(default.clone()); ///assert_eq!(config.defaults(), default); ///```