annotate rust/hg-core/src/config/config_items.rs @ 50762:7f8f6fe13fa9

configitems: move blackbox's config items to the new configitems.toml In order for the Rust code to gain access to default values of in-core extensions that have a Rust implementation, we need to centralize them alongside the core items declarations. This is the first and so far only one of the extensions that have gained Rust support, I don't think it's worth the churn to move the rest of the extension's configitems yet.
author Rapha?l Gom?s <rgomes@octobus.net>
date Wed, 05 Jul 2023 23:59:22 +0200
parents f8412da86d05
children 58390f59826f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50760
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,
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
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: 50760
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: 50760
diff changeset
45 /// behavior.
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
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: 50760
diff changeset
47 in_core_extension: Option<String>,
50760
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,
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
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: 50760
diff changeset
70 in_core_extension: Option<String>,
50760
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,
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
92 in_core_extension: value.in_core_extension,
50760
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 }
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
101
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
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: 50760
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: 50760
diff changeset
104 }
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
105
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
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: 50760
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: 50760
diff changeset
108 }
50760
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
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
143 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
144 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
145
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
146 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
147 match &value.default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
148 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
149 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
150 format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
151 "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
152 value.section,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
153 value.name
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
154 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
155 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
156 Some(format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
157 "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
158 default.type_str()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
159 )),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
160 );
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
161 match default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
162 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
163 toml::Value::Boolean(b),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
164 ) => Ok(Some(*b)),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
165 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
166 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
167 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
168 None => Ok(Some(false)),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
169 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
170 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
171 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
172
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
173 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
174 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
175
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
176 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
177 match &value.default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
178 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
179 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
180 format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
181 "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
182 value.section,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
183 value.name
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
184 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
185 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
186 Some(format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
187 "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
188 default.type_str()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
189 )),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
190 );
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
191 match default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
192 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
193 toml::Value::Integer(b),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
194 ) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
195 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
196 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
197 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
198 }
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 None => Ok(None),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
201 }
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 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
206 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
207
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
208 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
209 match &value.default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
210 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
211 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
212 format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
213 "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
214 value.section,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
215 value.name
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
216 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
217 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
218 Some(format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
219 "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
220 default.type_str()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
221 )),
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 match default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
224 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
225 toml::Value::Integer(b),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
226 ) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
227 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
228 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
229 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
230 }
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 None => Ok(None),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
233 }
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 /// 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
238 /// 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
239 /// in this enum.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
240 #[derive(Debug, PartialEq, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
241 pub enum DefaultConfigItemType {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
242 /// 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
243 Primitive(toml::Value),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
244 /// 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
245 Dynamic,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
246 /// 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
247 /// 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
248 Lambda(Vec<String>),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
249 /// 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
250 /// `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
251 /// is correctly resolved at runtime
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
252 LazyModule(String),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
253 ListType,
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 impl DefaultConfigItemType {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
257 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
258 match self {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
259 DefaultConfigItemType::Primitive(primitive) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
260 primitive.type_str()
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 DefaultConfigItemType::Dynamic => "dynamic",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
263 DefaultConfigItemType::Lambda(_) => "lambda",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
264 DefaultConfigItemType::LazyModule(_) => "lazy_module",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
265 DefaultConfigItemType::ListType => "list_type",
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
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
270 /// 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
271 #[derive(Debug, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
272 #[serde(try_from = "RawTemplateItem")]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
273 struct TemplateItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
274 suffix: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
275 default: Option<DefaultConfigItemType>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
276 priority: Option<isize>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
277 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
278 alias: Vec<(String, String)>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
279 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
280 experimental: bool,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
281 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
282 documentation: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
283 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
284
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
285 /// 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
286 /// 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
287 #[derive(Clone, Debug, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
288 struct RawTemplateItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
289 suffix: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
290 default: Option<toml::Value>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
291 #[serde(rename = "default-type")]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
292 default_type: Option<String>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
293 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
294 priority: isize,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
295 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
296 generic: bool,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
297 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
298 alias: Vec<(String, String)>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
299 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
300 experimental: bool,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
301 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
302 documentation: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
303 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
304
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
305 impl TemplateItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
306 fn into_default_item(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
307 self,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
308 application: TemplateApplication,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
309 ) -> DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
310 DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
311 section: application.section,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
312 name: application
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
313 .prefix
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
314 .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
315 .unwrap_or(self.suffix),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
316 default: self.default,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
317 priority: self.priority,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
318 alias: self.alias,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
319 experimental: self.experimental,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
320 documentation: self.documentation,
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
321 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
322 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
323 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
324 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
325
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
326 impl TryFrom<RawTemplateItem> for TemplateItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
327 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
328
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
329 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
330 Ok(Self {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
331 suffix: value.suffix,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
332 default: raw_default_to_concrete(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
333 value.default_type,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
334 value.default,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
335 )?,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
336 priority: if value.generic {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
337 Some(value.priority)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
338 } else {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
339 None
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
340 },
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
341 alias: value.alias,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
342 experimental: value.experimental,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
343 documentation: value.documentation,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
344 })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
345 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
346 }
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 /// 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
349 /// to the concrete [`DefaultconfigItemType`].
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
350 fn raw_default_to_concrete(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
351 default_type: Option<String>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
352 default: Option<toml::Value>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
353 ) -> Result<Option<DefaultConfigItemType>, HgError> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
354 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
355 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
356 DefaultConfigItemType::Primitive(default.to_owned())
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
357 }),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
358 Some("dynamic") => Some(DefaultConfigItemType::Dynamic),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
359 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
360 Some("lambda") => match &default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
361 Some(default) => Some(DefaultConfigItemType::Lambda(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
362 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
363 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
364 e.to_string(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
365 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
366 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
367 )
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
368 })?,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
369 )),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
370 None => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
371 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
372 "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
373 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
374 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
375 ))
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 Some("lazy_module") => match &default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
379 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
380 Some(DefaultConfigItemType::LazyModule(match default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
381 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
382 _ => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
383 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
384 "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
385 .to_string(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
386 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
387 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
388 ))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
389 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
390 }))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
391 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
392 None => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
393 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
394 "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
395 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
396 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
397 ))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
398 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
399 },
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
400 Some(invalid) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
401 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
402 format!("invalid default_type '{}'", invalid),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
403 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
404 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
405 ))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
406 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
407 })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
408 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
409
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
410 #[derive(Debug, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
411 struct TemplateApplication {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
412 template: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
413 section: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
414 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
415 prefix: Option<String>,
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 /// 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
419 /// `mercurial/configitems.toml`.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
420 #[derive(Clone, Debug, Default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
421 pub struct DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
422 /// 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
423 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
424 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
425
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
426 impl DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
427 pub fn empty() -> DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
428 Self {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
429 items: Default::default(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
430 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
431 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
432
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
433 /// 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
434 #[logging_timer::time("trace")]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
435 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
436 let mut from_file: ConfigItems =
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
437 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
438 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
439 e.to_string(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
440 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
441 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
442 )
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
443 })?;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
444
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
445 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
446
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
447 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
448 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
449 None => return Err(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
450 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
451 format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
452 "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
453 application.template
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
454 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
455 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
456 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
457 )
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
458 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
459 Some(template_items) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
460 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
461 flat_items.push(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
462 template_item
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
463 .clone()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
464 .into_default_item(application.clone()),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
465 )
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
466 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
467 }
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 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
472 FastHashMap::default(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
473 |mut acc, item| {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
474 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
475 .or_insert_with(|| {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
476 let mut section = FastHashMap::default();
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
477 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
478 section
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
479 })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
480 .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
481 acc
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 Ok(Self { items })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
486 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
487
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
488 /// 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
489 pub fn get(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
490 &self,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
491 section: &[u8],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
492 item: &[u8],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
493 ) -> Option<&DefaultConfigItem> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
494 // 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
495 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
496 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
497 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
498 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
499 Some(item) => Some(item),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
500 None => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
501 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
502 .values()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
503 .filter(|item| item.is_generic())
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
504 .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
505 Some(priority) => (priority, &item.name),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
506 _ => unreachable!(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
507 })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
508 {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
509 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
510 .expect("invalid regex in configitems")
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
511 .is_match(item)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
512 {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
513 return Some(generic_item);
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
514 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
515 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
516 None
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 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
520 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
521
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
522 #[cfg(test)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
523 mod tests {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
524 use crate::config::config_items::{
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
525 DefaultConfigItem, DefaultConfigItemType,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
526 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
527
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
528 use super::DefaultConfig;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
529
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
530 #[test]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
531 fn test_config_read() {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
532 let contents = r#"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
533 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
534 section = "alias"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
535 name = "abcd.*"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
536 default = 3
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
537 generic = true
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
538 priority = -1
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 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
541 section = "alias"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
542 name = ".*"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
543 default-type = "dynamic"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
544 generic = true
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
545
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
546 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
547 section = "cmdserver"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
548 name = "track-log"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
549 default-type = "lambda"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
550 default = [ "chgserver", "cmdserver", "repocache",]
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 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
553 section = "chgserver"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
554 name = "idletimeout"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
555 default = 3600
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
556
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
557 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
558 section = "cmdserver"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
559 name = "message-encodings"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
560 default-type = "list_type"
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 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
563 section = "web"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
564 name = "encoding"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
565 default-type = "lazy_module"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
566 default = "encoding.encoding"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
567
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
568 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
569 section = "command-templates"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
570 name = "graphnode"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
571 alias = [["ui", "graphnodetemplate"]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
572 documentation = """This is a docstring.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
573 This is another line \
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
574 but this is not."""
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 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
577 section = "censor"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
578 name = "policy"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
579 default = "abort"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
580 experimental = true
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
581
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
582 [[template-applications]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
583 template = "diff-options"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
584 section = "commands"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
585 prefix = "revert.interactive"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
586
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
587 [[template-applications]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
588 template = "diff-options"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
589 section = "diff"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
590
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
591 [templates]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
592 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
593 suffix = "nodates"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
594 default = false
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
595
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
596 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
597 suffix = "showfunc"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
598 default = false
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
599
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
600 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
601 suffix = "unified"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
602 "#;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
603 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
604 let config = match res {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
605 Ok(config) => config,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
606 Err(e) => panic!("{}", e),
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 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
609 section: "censor".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
610 name: "policy".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
611 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
612 priority: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
613 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
614 experimental: true,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
615 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
616 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
617 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
618 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
619
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
620 // 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
621 // `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
622 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
623 section: "alias".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
624 name: "abcd.*".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
625 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
626 priority: Some(-1),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
627 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
628 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
629 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
630 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
631 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
632 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
633
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
634 //... 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
635 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
636 section: "alias".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
637 name: ".*".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
638 default: Some(DefaultConfigItemType::Dynamic),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
639 priority: Some(0),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
640 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
641 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
642 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
643 in_core_extension: None,
50760
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 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
646
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
647 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
648 section: "chgserver".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
649 name: "idletimeout".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
650 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
651 priority: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
652 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
653 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
654 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
655 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
656 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
657 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
658
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
659 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
660 section: "cmdserver".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
661 name: "track-log".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
662 default: Some(DefaultConfigItemType::Lambda(vec![
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
663 "chgserver".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
664 "cmdserver".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
665 "repocache".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
666 ])),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
667 priority: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
668 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
669 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
670 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
671 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
672 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
673 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
674
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
675 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
676 section: "command-templates".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
677 name: "graphnode".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
678 default: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
679 priority: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
680 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
681 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
682 documentation:
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
683 "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
684 .into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
685 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
686 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
687 assert_eq!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
688 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
689 Some(&expected)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
690 );
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
691 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
692 }