annotate rust/hg-core/src/config/config_items.rs @ 51861:f81e0ce5103a default tip

typing: simplify archive.gz writing and drop a few pytype suppressions I was waiting until 3.8 to use `Literal` to fix this, but there's also the ":" and "|" characters that are passed along here, meant only for the non-gz archive types. But manipulating what the local caller passes is silly- we know we're writing, so just open it for writing. As an added bonus, PyCharm stops flagging the call too (since it doesn't know about pytype suppression comments).
author Matt Harbison <matt_harbison@yahoo.com>
date Thu, 12 Sep 2024 12:53:00 -0400
parents 0dbf6a5ccf5f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
1 //! Code for parsing default Mercurial config items.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
2 use itertools::Itertools;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
3 use serde::Deserialize;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
4
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
5 use crate::{errors::HgError, exit_codes, FastHashMap};
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
6
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
7 /// Corresponds to the structure of `mercurial/configitems.toml`.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
8 #[derive(Debug, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
9 pub struct ConfigItems {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
10 items: Vec<DefaultConfigItem>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
11 templates: FastHashMap<String, Vec<TemplateItem>>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
12 #[serde(rename = "template-applications")]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
13 template_applications: Vec<TemplateApplication>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
14 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
15
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
16 /// Corresponds to a config item declaration in `mercurial/configitems.toml`.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
17 #[derive(Clone, Debug, PartialEq, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
18 #[serde(try_from = "RawDefaultConfigItem")]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
19 pub struct DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
20 /// Section of the config the item is in (e.g. `[merge-tools]`)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
21 section: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
22 /// Name of the item (e.g. `meld.gui`)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
23 name: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
24 /// Default value (can be dynamic, see [`DefaultConfigItemType`])
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
25 default: Option<DefaultConfigItemType>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
26 /// If the config option is generic (e.g. `merge-tools.*`), defines
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
27 /// the priority of this item relative to other generic items.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
28 /// If we're looking for <pattern>, then all generic items within the same
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
29 /// section will be sorted by order of priority, and the first regex match
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
30 /// against `name` is returned.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
31 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
32 priority: Option<isize>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
33 /// Aliases, if any. Each alias is a tuple of `(section, name)` for each
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
34 /// option that is aliased to this one.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
35 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
36 alias: Vec<(String, String)>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
37 /// Whether the config item is marked as experimental
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
38 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
39 experimental: bool,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
40 /// The (possibly empty) docstring for the item
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
41 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
42 documentation: String,
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
43 /// Whether the item is part of an in-core extension. This allows us to
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
44 /// hide them if the extension is not enabled, to preserve legacy
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
45 /// behavior.
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
46 #[serde(default)]
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
47 in_core_extension: Option<String>,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
48 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
49
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
50 /// Corresponds to the raw (i.e. on disk) structure of config items. Used as
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
51 /// an intermediate step in deserialization.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
52 #[derive(Clone, Debug, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
53 struct RawDefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
54 section: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
55 name: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
56 default: Option<toml::Value>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
57 #[serde(rename = "default-type")]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
58 default_type: Option<String>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
59 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
60 priority: isize,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
61 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
62 generic: bool,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
63 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
64 alias: Vec<(String, String)>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
65 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
66 experimental: bool,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
67 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
68 documentation: String,
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
69 #[serde(default)]
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
70 in_core_extension: Option<String>,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
71 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
72
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
73 impl TryFrom<RawDefaultConfigItem> for DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
74 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
75
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
76 fn try_from(value: RawDefaultConfigItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
77 Ok(Self {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
78 section: value.section,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
79 name: value.name,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
80 default: raw_default_to_concrete(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
81 value.default_type,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
82 value.default,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
83 )?,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
84 priority: if value.generic {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
85 Some(value.priority)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
86 } else {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
87 None
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
88 },
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
89 alias: value.alias,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
90 experimental: value.experimental,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
91 documentation: value.documentation,
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
92 in_core_extension: value.in_core_extension,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
93 })
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
94 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
95 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
96
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
97 impl DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
98 fn is_generic(&self) -> bool {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
99 self.priority.is_some()
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
100 }
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
101
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
102 pub fn in_core_extension(&self) -> Option<&str> {
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
103 self.in_core_extension.as_deref()
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
104 }
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
105
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
106 pub fn section(&self) -> &str {
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
107 self.section.as_ref()
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
108 }
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
109 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
110
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
111 impl<'a> TryFrom<&'a DefaultConfigItem> for Option<&'a str> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
112 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
113
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
114 fn try_from(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
115 value: &'a DefaultConfigItem,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
116 ) -> Result<Option<&'a str>, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
117 match &value.default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
118 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
119 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
120 format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
121 "programming error: wrong query on config item '{}.{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
122 value.section,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
123 value.name
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
124 ),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
125 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
126 Some(format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
127 "asked for '&str', type of default is '{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
128 default.type_str()
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
129 )),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
130 );
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
131 match default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
132 DefaultConfigItemType::Primitive(toml::Value::String(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
133 s,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
134 )) => Ok(Some(s)),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
135 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
136 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
137 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
138 None => Ok(None),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
139 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
140 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
141 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
142
50981
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
143 impl<'a> TryFrom<&'a DefaultConfigItem> for Option<&'a [u8]> {
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
144 type Error = HgError;
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
145
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
146 fn try_from(
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
147 value: &'a DefaultConfigItem,
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
148 ) -> Result<Option<&'a [u8]>, Self::Error> {
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
149 match &value.default {
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
150 Some(default) => {
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
151 let err = HgError::abort(
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
152 format!(
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
153 "programming error: wrong query on config item '{}.{}'",
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
154 value.section,
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
155 value.name
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
156 ),
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
157 exit_codes::ABORT,
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
158 Some(format!(
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
159 "asked for bytes, type of default is '{}', \
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
160 which cannot be interpreted as bytes",
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
161 default.type_str()
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
162 )),
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
163 );
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
164 match default {
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
165 DefaultConfigItemType::Primitive(p) => {
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
166 Ok(p.as_str().map(str::as_bytes))
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
167 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
168 _ => Err(err),
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
169 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
170 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
171 None => Ok(None),
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
172 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
173 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
174 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Raphaël Gomès <rgomes@octobus.net>
parents: 50765
diff changeset
175
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
176 impl TryFrom<&DefaultConfigItem> for Option<bool> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
177 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
178
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
179 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
180 match &value.default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
181 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
182 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
183 format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
184 "programming error: wrong query on config item '{}.{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
185 value.section,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
186 value.name
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
187 ),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
188 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
189 Some(format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
190 "asked for 'bool', type of default is '{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
191 default.type_str()
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
192 )),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
193 );
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
194 match default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
195 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
196 toml::Value::Boolean(b),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
197 ) => Ok(Some(*b)),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
198 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
199 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
200 }
50983
8343947af6a7 rust-config: fix incorrect coercion of null values to false
Raphaël Gomès <rgomes@octobus.net>
parents: 50981
diff changeset
201 None => Ok(None),
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
202 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
203 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
204 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
205
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
206 impl TryFrom<&DefaultConfigItem> for Option<u32> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
207 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
208
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
209 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
210 match &value.default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
211 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
212 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
213 format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
214 "programming error: wrong query on config item '{}.{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
215 value.section,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
216 value.name
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
217 ),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
218 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
219 Some(format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
220 "asked for 'u32', type of default is '{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
221 default.type_str()
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
222 )),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
223 );
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
224 match default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
225 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
226 toml::Value::Integer(b),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
227 ) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
228 Ok(Some((*b).try_into().expect("TOML integer to u32")))
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
229 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
230 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
231 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
232 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
233 None => Ok(None),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
234 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
235 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
236 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
237
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
238 impl TryFrom<&DefaultConfigItem> for Option<u64> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
239 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
240
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
241 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
242 match &value.default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
243 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
244 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
245 format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
246 "programming error: wrong query on config item '{}.{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
247 value.section,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
248 value.name
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
249 ),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
250 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
251 Some(format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
252 "asked for 'u64', type of default is '{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
253 default.type_str()
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
254 )),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
255 );
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
256 match default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
257 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
258 toml::Value::Integer(b),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
259 ) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
260 Ok(Some((*b).try_into().expect("TOML integer to u64")))
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
261 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
262 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
263 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
264 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
265 None => Ok(None),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
266 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
267 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
268 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
269
51851
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
270 impl TryFrom<&DefaultConfigItem> for Option<i64> {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
271 type Error = HgError;
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
272
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
273 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
274 match &value.default {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
275 Some(default) => {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
276 let err = HgError::abort(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
277 format!(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
278 "programming error: wrong query on config item '{}.{}'",
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
279 value.section,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
280 value.name
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
281 ),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
282 exit_codes::ABORT,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
283 Some(format!(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
284 "asked for 'i64', type of default is '{}'",
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
285 default.type_str()
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
286 )),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
287 );
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
288 match default {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
289 DefaultConfigItemType::Primitive(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
290 toml::Value::Integer(b),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
291 ) => Ok(Some(*b)),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
292 _ => Err(err),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
293 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
294 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
295 None => Ok(None),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
296 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
297 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
298 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
299
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
300 impl TryFrom<&DefaultConfigItem> for Option<f64> {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
301 type Error = HgError;
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
302
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
303 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
304 match &value.default {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
305 Some(default) => {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
306 let err = HgError::abort(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
307 format!(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
308 "programming error: wrong query on config item '{}.{}'",
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
309 value.section,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
310 value.name
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
311 ),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
312 exit_codes::ABORT,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
313 Some(format!(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
314 "asked for 'f64', type of default is '{}'",
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
315 default.type_str()
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
316 )),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
317 );
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
318 match default {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
319 DefaultConfigItemType::Primitive(toml::Value::Float(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
320 b,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
321 )) => Ok(Some(*b)),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
322 _ => Err(err),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
323 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
324 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
325 None => Ok(None),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
326 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
327 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
328 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Raphaël Gomès <rgomes@octobus.net>
parents: 50983
diff changeset
329
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
330 /// Allows abstracting over more complex default values than just primitives.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
331 /// The former `configitems.py` contained some dynamic code that is encoded
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
332 /// in this enum.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
333 #[derive(Debug, PartialEq, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
334 pub enum DefaultConfigItemType {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
335 /// Some primitive type (string, integer, boolean)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
336 Primitive(toml::Value),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
337 /// A dynamic value that will be given by the code at runtime
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
338 Dynamic,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
339 /// An lazily-returned array (possibly only relevant in the Python impl)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
340 /// Example: `lambda: [b"zstd", b"zlib"]`
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
341 Lambda(Vec<String>),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
342 /// For now, a special case for `web.encoding` that points to the
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
343 /// `encoding.encoding` module in the Python impl so that local encoding
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
344 /// is correctly resolved at runtime
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
345 LazyModule(String),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
346 ListType,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
347 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
348
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
349 impl DefaultConfigItemType {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
350 pub fn type_str(&self) -> &str {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
351 match self {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
352 DefaultConfigItemType::Primitive(primitive) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
353 primitive.type_str()
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
354 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
355 DefaultConfigItemType::Dynamic => "dynamic",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
356 DefaultConfigItemType::Lambda(_) => "lambda",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
357 DefaultConfigItemType::LazyModule(_) => "lazy_module",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
358 DefaultConfigItemType::ListType => "list_type",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
359 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
360 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
361 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
362
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
363 /// Most of the fields are shared with [`DefaultConfigItem`].
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
364 #[derive(Debug, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
365 #[serde(try_from = "RawTemplateItem")]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
366 struct TemplateItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
367 suffix: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
368 default: Option<DefaultConfigItemType>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
369 priority: Option<isize>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
370 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
371 alias: Vec<(String, String)>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
372 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
373 experimental: bool,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
374 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
375 documentation: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
376 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
377
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
378 /// Corresponds to the raw (i.e. on disk) representation of a template item.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
379 /// Used as an intermediate step in deserialization.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
380 #[derive(Clone, Debug, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
381 struct RawTemplateItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
382 suffix: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
383 default: Option<toml::Value>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
384 #[serde(rename = "default-type")]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
385 default_type: Option<String>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
386 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
387 priority: isize,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
388 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
389 generic: bool,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
390 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
391 alias: Vec<(String, String)>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
392 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
393 experimental: bool,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
394 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
395 documentation: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
396 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
397
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
398 impl TemplateItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
399 fn into_default_item(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
400 self,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
401 application: TemplateApplication,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
402 ) -> DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
403 DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
404 section: application.section,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
405 name: application
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
406 .prefix
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
407 .map(|prefix| format!("{}.{}", prefix, self.suffix))
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
408 .unwrap_or(self.suffix),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
409 default: self.default,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
410 priority: self.priority,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
411 alias: self.alias,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
412 experimental: self.experimental,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
413 documentation: self.documentation,
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
414 in_core_extension: None,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
415 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
416 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
417 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
418
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
419 impl TryFrom<RawTemplateItem> for TemplateItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
420 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
421
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
422 fn try_from(value: RawTemplateItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
423 Ok(Self {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
424 suffix: value.suffix,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
425 default: raw_default_to_concrete(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
426 value.default_type,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
427 value.default,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
428 )?,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
429 priority: if value.generic {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
430 Some(value.priority)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
431 } else {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
432 None
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
433 },
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
434 alias: value.alias,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
435 experimental: value.experimental,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
436 documentation: value.documentation,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
437 })
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
438 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
439 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
440
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
441 /// Transforms the on-disk string-based representation of complex default types
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
442 /// to the concrete [`DefaultconfigItemType`].
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
443 fn raw_default_to_concrete(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
444 default_type: Option<String>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
445 default: Option<toml::Value>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
446 ) -> Result<Option<DefaultConfigItemType>, HgError> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
447 Ok(match default_type.as_deref() {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
448 None => default.as_ref().map(|default| {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
449 DefaultConfigItemType::Primitive(default.to_owned())
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
450 }),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
451 Some("dynamic") => Some(DefaultConfigItemType::Dynamic),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
452 Some("list_type") => Some(DefaultConfigItemType::ListType),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
453 Some("lambda") => match &default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
454 Some(default) => Some(DefaultConfigItemType::Lambda(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
455 default.to_owned().try_into().map_err(|e| {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
456 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
457 e.to_string(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
458 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
459 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
460 )
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
461 })?,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
462 )),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
463 None => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
464 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
465 "lambda defined with no return value".to_string(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
466 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
467 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
468 ))
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
469 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
470 },
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
471 Some("lazy_module") => match &default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
472 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
473 Some(DefaultConfigItemType::LazyModule(match default {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
474 toml::Value::String(module) => module.to_owned(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
475 _ => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
476 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
477 "lazy_module module name should be a string"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
478 .to_string(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
479 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
480 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
481 ))
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
482 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
483 }))
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
484 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
485 None => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
486 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
487 "lazy_module should have a default value".to_string(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
488 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
489 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
490 ))
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
491 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
492 },
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
493 Some(invalid) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
494 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
495 format!("invalid default_type '{}'", invalid),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
496 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
497 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
498 ))
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
499 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
500 })
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
501 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
502
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
503 #[derive(Debug, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
504 struct TemplateApplication {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
505 template: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
506 section: String,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
507 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
508 prefix: Option<String>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
509 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
510
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
511 /// Represents the (dynamic) set of default core Mercurial config items from
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
512 /// `mercurial/configitems.toml`.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
513 #[derive(Clone, Debug, Default)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
514 pub struct DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
515 /// Mapping of section -> (mapping of name -> item)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
516 items: FastHashMap<String, FastHashMap<String, DefaultConfigItem>>,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
517 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
518
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
519 impl DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
520 pub fn empty() -> DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
521 Self {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
522 items: Default::default(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
523 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
524 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
525
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
526 /// Returns `Self`, given the contents of `mercurial/configitems.toml`
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
527 #[logging_timer::time("trace")]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
528 pub fn from_contents(contents: &str) -> Result<Self, HgError> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
529 let mut from_file: ConfigItems =
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
530 toml::from_str(contents).map_err(|e| {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
531 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
532 e.to_string(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
533 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
534 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
535 )
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
536 })?;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
537
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
538 let mut flat_items = from_file.items;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
539
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
540 for application in from_file.template_applications.drain(..) {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
541 match from_file.templates.get(&application.template) {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
542 None => return Err(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
543 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
544 format!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
545 "template application refers to undefined template '{}'",
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
546 application.template
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
547 ),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
548 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
549 Some("Check 'mercurial/configitems.toml'".into())
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
550 )
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
551 ),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
552 Some(template_items) => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
553 for template_item in template_items {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
554 flat_items.push(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
555 template_item
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
556 .clone()
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
557 .into_default_item(application.clone()),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
558 )
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
559 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
560 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
561 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
562 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
563
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
564 let items = flat_items.into_iter().fold(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
565 FastHashMap::default(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
566 |mut acc, item| {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
567 acc.entry(item.section.to_owned())
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
568 .or_insert_with(|| {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
569 let mut section = FastHashMap::default();
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
570 section.insert(item.name.to_owned(), item.to_owned());
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
571 section
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
572 })
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
573 .insert(item.name.to_owned(), item);
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
574 acc
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
575 },
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
576 );
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
577
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
578 Ok(Self { items })
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
579 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
580
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
581 /// Return the default config item that matches `section` and `item`.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
582 pub fn get(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
583 &self,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
584 section: &[u8],
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
585 item: &[u8],
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
586 ) -> Option<&DefaultConfigItem> {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
587 // Core items must be valid UTF-8
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
588 let section = String::from_utf8_lossy(section);
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
589 let section_map = self.items.get(section.as_ref())?;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
590 let item_name_lossy = String::from_utf8_lossy(item);
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
591 match section_map.get(item_name_lossy.as_ref()) {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
592 Some(item) => Some(item),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
593 None => {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
594 for generic_item in section_map
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
595 .values()
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
596 .filter(|item| item.is_generic())
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
597 .sorted_by_key(|item| match item.priority {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
598 Some(priority) => (priority, &item.name),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
599 _ => unreachable!(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
600 })
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
601 {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
602 if regex::bytes::Regex::new(&generic_item.name)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
603 .expect("invalid regex in configitems")
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
604 .is_match(item)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
605 {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
606 return Some(generic_item);
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
607 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
608 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
609 None
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
610 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
611 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
612 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
613 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
614
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
615 #[cfg(test)]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
616 mod tests {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
617 use crate::config::config_items::{
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
618 DefaultConfigItem, DefaultConfigItemType,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
619 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
620
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
621 use super::DefaultConfig;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
622
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
623 #[test]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
624 fn test_config_read() {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
625 let contents = r#"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
626 [[items]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
627 section = "alias"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
628 name = "abcd.*"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
629 default = 3
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
630 generic = true
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
631 priority = -1
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
632
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
633 [[items]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
634 section = "alias"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
635 name = ".*"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
636 default-type = "dynamic"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
637 generic = true
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
638
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
639 [[items]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
640 section = "cmdserver"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
641 name = "track-log"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
642 default-type = "lambda"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
643 default = [ "chgserver", "cmdserver", "repocache",]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
644
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
645 [[items]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
646 section = "chgserver"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
647 name = "idletimeout"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
648 default = 3600
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
649
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
650 [[items]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
651 section = "cmdserver"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
652 name = "message-encodings"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
653 default-type = "list_type"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
654
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
655 [[items]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
656 section = "web"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
657 name = "encoding"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
658 default-type = "lazy_module"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
659 default = "encoding.encoding"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
660
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
661 [[items]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
662 section = "command-templates"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
663 name = "graphnode"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
664 alias = [["ui", "graphnodetemplate"]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
665 documentation = """This is a docstring.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
666 This is another line \
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
667 but this is not."""
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
668
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
669 [[items]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
670 section = "censor"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
671 name = "policy"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
672 default = "abort"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
673 experimental = true
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
674
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
675 [[template-applications]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
676 template = "diff-options"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
677 section = "commands"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
678 prefix = "revert.interactive"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
679
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
680 [[template-applications]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
681 template = "diff-options"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
682 section = "diff"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
683
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
684 [templates]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
685 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
686 suffix = "nodates"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
687 default = false
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
688
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
689 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
690 suffix = "showfunc"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
691 default = false
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
692
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
693 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
694 suffix = "unified"
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
695 "#;
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
696 let res = DefaultConfig::from_contents(contents);
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
697 let config = match res {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
698 Ok(config) => config,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
699 Err(e) => panic!("{}", e),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
700 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
701 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
702 section: "censor".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
703 name: "policy".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
704 default: Some(DefaultConfigItemType::Primitive("abort".into())),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
705 priority: None,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
706 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
707 experimental: true,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
708 documentation: "".into(),
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
709 in_core_extension: None,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
710 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
711 assert_eq!(config.get(b"censor", b"policy"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
712
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
713 // Test generic priority. The `.*` pattern is wider than `abcd.*`, but
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
714 // `abcd.*` has priority, so it should match first.
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
715 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
716 section: "alias".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
717 name: "abcd.*".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
718 default: Some(DefaultConfigItemType::Primitive(3.into())),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
719 priority: Some(-1),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
720 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
721 experimental: false,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
722 documentation: "".into(),
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
723 in_core_extension: None,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
724 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
725 assert_eq!(config.get(b"alias", b"abcdsomething"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
726
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
727 //... but if it doesn't, we should fallback to `.*`
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
728 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
729 section: "alias".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
730 name: ".*".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
731 default: Some(DefaultConfigItemType::Dynamic),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
732 priority: Some(0),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
733 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
734 experimental: false,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
735 documentation: "".into(),
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
736 in_core_extension: None,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
737 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
738 assert_eq!(config.get(b"alias", b"something"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
739
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
740 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
741 section: "chgserver".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
742 name: "idletimeout".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
743 default: Some(DefaultConfigItemType::Primitive(3600.into())),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
744 priority: None,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
745 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
746 experimental: false,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
747 documentation: "".into(),
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
748 in_core_extension: None,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
749 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
750 assert_eq!(config.get(b"chgserver", b"idletimeout"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
751
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
752 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
753 section: "cmdserver".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
754 name: "track-log".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
755 default: Some(DefaultConfigItemType::Lambda(vec![
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
756 "chgserver".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
757 "cmdserver".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
758 "repocache".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
759 ])),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
760 priority: None,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
761 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
762 experimental: false,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
763 documentation: "".into(),
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
764 in_core_extension: None,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
765 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
766 assert_eq!(config.get(b"cmdserver", b"track-log"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
767
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
768 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
769 section: "command-templates".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
770 name: "graphnode".into(),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
771 default: None,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
772 priority: None,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
773 alias: vec![("ui".into(), "graphnodetemplate".into())],
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
774 experimental: false,
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
775 documentation:
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
776 "This is a docstring.\nThis is another line but this is not."
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
777 .into(),
50765
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Raphaël Gomès <rgomes@octobus.net>
parents: 50763
diff changeset
778 in_core_extension: None,
50763
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
779 };
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
780 assert_eq!(
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
781 config.get(b"command-templates", b"graphnode"),
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
782 Some(&expected)
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
783 );
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
784 }
f8412da86d05 rust-config: add support for default config items
Raphaël Gomès <rgomes@octobus.net>
parents:
diff changeset
785 }