diff options
| author | Nick Cameron <nrc@ncameron.org> | 2015-09-05 10:11:50 +1200 |
|---|---|---|
| committer | Nick Cameron <nrc@ncameron.org> | 2015-09-05 10:11:50 +1200 |
| commit | c838b00d540d6e85b7a4ead656ff37d8b9e641cc (patch) | |
| tree | df4de7f89dd728e6f098e30ecd1aaf99c77bac38 | |
| parent | f5ee0f0986f23acb27fabf257e11eb76c6981601 (diff) | |
| parent | 14a94f0bcd4d6892674cbe7dcaf8f3613cac30fc (diff) | |
Merge pull request #257 from cburgdorf/partial_config
Allow partial rustfmt.toml
| -rw-r--r-- | src/config.rs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/config.rs b/src/config.rs index 1b4d79ab6ee..c7525e930ec 100644 --- a/src/config.rs +++ b/src/config.rs @@ -52,10 +52,30 @@ macro_rules! create_config { $(pub $i: $ty),+ } + // Just like the Config struct but with each property wrapped + // as Option<T>. This is used to parse a rustfmt.toml that doesn't + // specity all properties of `Config`. + // We first parse into `ParsedConfig`, then create a default `Config` + // and overwrite the properties with corresponding values from `ParsedConfig` + #[derive(RustcDecodable, Clone)] + pub struct ParsedConfig { + $(pub $i: Option<$ty>),+ + } + impl Config { + + fn fill_from_parsed_config(mut self, parsed: &ParsedConfig) -> Config { + $( + if let Some(val) = parsed.$i { + self.$i = val; + } + )+ + self + } + pub fn from_toml(toml: &str) -> Config { let parsed = toml.parse().unwrap(); - match toml::decode(parsed) { + let parsed_config:ParsedConfig = match toml::decode(parsed) { Some(decoded) => decoded, None => { println!("Decoding config file failed. Config:\n{}", toml); @@ -63,7 +83,8 @@ macro_rules! create_config { println!("\n\nParsed:\n{:?}", parsed); panic!(); } - } + }; + Config::default().fill_from_parsed_config(&parsed_config) } pub fn override_value(&mut self, key: &str, val: &str) { |
