annotate rust/hg-core/src/config/config_items.rs @ 52664:f5091286b10c

packaging: modernize (compat PEP 517) with less distutils and setup.py calls - setup.py: less distutils imports and setuptools required distutils is deprecated and one should import commands from setuptools to support modern workflows depending on PEP 517 and 518. Moreover, for Python >=3.12, distutils comes from setuptools. It corresponds to old and unmaintain code that do not support PEP 517. The PEP 517 frontends (pip, build, pipx, PDM, UV, etc.) are responsible for creating a venv just for the build. The build dependencies (currently only setuptools) are specified in the pyproject.toml file. Therefore, there is no reason to support building without setuptools. Calling directly setup.py is deprecated and we have to use a PEP 517 frontend. For this commit we use pip with venv. - run-tests.py: install with pip instead of direct call of setup.py Mercurial is then built in an isolated environment. - Makefile: use venv+pip instead of setup.py
author paugier <pierre.augier@univ-grenoble-alpes.fr>
date Wed, 08 Jan 2025 05:07:00 +0100
parents a876ab6c3fd5
children
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.
52306
a876ab6c3fd5 rust: fix `cargo doc` warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents: 51847
diff changeset
28 /// If we're looking for `<pattern>`, then all generic items within the
a876ab6c3fd5 rust: fix `cargo doc` warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents: 51847
diff changeset
29 /// same section will be sorted by order of priority, and the first
a876ab6c3fd5 rust: fix `cargo doc` warnings
Rapha?l Gom?s <rgomes@octobus.net>
parents: 51847
diff changeset
30 /// regex match against `name` is returned.
50760
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
50978
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
143 impl<'a> TryFrom<&'a DefaultConfigItem> for Option<&'a [u8]> {
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
144 type Error = HgError;
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
145
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
146 fn try_from(
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
147 value: &'a DefaultConfigItem,
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
148 ) -> Result<Option<&'a [u8]>, Self::Error> {
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
149 match &value.default {
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
150 Some(default) => {
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
151 let err = HgError::abort(
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
152 format!(
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
153 "programming error: wrong query on config item '{}.{}'",
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
154 value.section,
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
155 value.name
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
156 ),
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
157 exit_codes::ABORT,
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
158 Some(format!(
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
159 "asked for bytes, type of default is '{}', \
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
160 which cannot be interpreted as bytes",
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
161 default.type_str()
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
162 )),
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
163 );
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
164 match default {
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
165 DefaultConfigItemType::Primitive(p) => {
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
166 Ok(p.as_str().map(str::as_bytes))
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
167 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
168 _ => Err(err),
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
169 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
170 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
171 None => Ok(None),
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
172 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
173 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
174 }
58390f59826f rust-config: fix fallback to default not parsing the default value
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50762
diff changeset
175
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
176 impl TryFrom<&DefaultConfigItem> for Option<bool> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
177 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
178
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
179 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
180 match &value.default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
181 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
182 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
183 format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
184 "programming error: wrong query on config item '{}.{}'",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
185 value.section,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
186 value.name
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
187 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
188 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
189 Some(format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
190 "asked for 'bool', type of default is '{}'",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
191 default.type_str()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
192 )),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
193 );
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
194 match default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
195 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
196 toml::Value::Boolean(b),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
197 ) => Ok(Some(*b)),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
198 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
199 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
200 }
50980
8343947af6a7 rust-config: fix incorrect coercion of null values to false
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50978
diff changeset
201 None => Ok(None),
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
202 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
203 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
204 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
205
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
206 impl TryFrom<&DefaultConfigItem> for Option<u32> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
207 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
208
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
209 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
210 match &value.default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
211 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
212 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
213 format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
214 "programming error: wrong query on config item '{}.{}'",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
215 value.section,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
216 value.name
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
217 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
218 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
219 Some(format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
220 "asked for 'u32', type of default is '{}'",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
221 default.type_str()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
222 )),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
223 );
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
224 match default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
225 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
226 toml::Value::Integer(b),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
227 ) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
228 Ok(Some((*b).try_into().expect("TOML integer to u32")))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
229 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
230 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
231 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
232 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
233 None => Ok(None),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
234 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
235 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
236 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
237
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
238 impl TryFrom<&DefaultConfigItem> for Option<u64> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
239 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
240
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
241 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
242 match &value.default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
243 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
244 let err = HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
245 format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
246 "programming error: wrong query on config item '{}.{}'",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
247 value.section,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
248 value.name
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
249 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
250 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
251 Some(format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
252 "asked for 'u64', type of default is '{}'",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
253 default.type_str()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
254 )),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
255 );
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
256 match default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
257 DefaultConfigItemType::Primitive(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
258 toml::Value::Integer(b),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
259 ) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
260 Ok(Some((*b).try_into().expect("TOML integer to u64")))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
261 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
262 _ => Err(err),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
263 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
264 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
265 None => Ok(None),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
266 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
267 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
268 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
269
51847
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
270 impl TryFrom<&DefaultConfigItem> for Option<i64> {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
271 type Error = HgError;
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
272
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
273 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
274 match &value.default {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
275 Some(default) => {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
276 let err = HgError::abort(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
277 format!(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
278 "programming error: wrong query on config item '{}.{}'",
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
279 value.section,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
280 value.name
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
281 ),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
282 exit_codes::ABORT,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
283 Some(format!(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
284 "asked for 'i64', type of default is '{}'",
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
285 default.type_str()
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
286 )),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
287 );
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
288 match default {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
289 DefaultConfigItemType::Primitive(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
290 toml::Value::Integer(b),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
291 ) => Ok(Some(*b)),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
292 _ => Err(err),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
293 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
294 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
295 None => Ok(None),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
296 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
297 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
298 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
299
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
300 impl TryFrom<&DefaultConfigItem> for Option<f64> {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
301 type Error = HgError;
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
302
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
303 fn try_from(value: &DefaultConfigItem) -> Result<Self, Self::Error> {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
304 match &value.default {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
305 Some(default) => {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
306 let err = HgError::abort(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
307 format!(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
308 "programming error: wrong query on config item '{}.{}'",
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
309 value.section,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
310 value.name
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
311 ),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
312 exit_codes::ABORT,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
313 Some(format!(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
314 "asked for 'f64', type of default is '{}'",
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
315 default.type_str()
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
316 )),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
317 );
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
318 match default {
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
319 DefaultConfigItemType::Primitive(toml::Value::Float(
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
320 b,
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
321 )) => Ok(Some(*b)),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
322 _ => Err(err),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
323 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
324 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
325 None => Ok(None),
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
326 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
327 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
328 }
0dbf6a5ccf5f rust-config: add more ways of reading the config
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50980
diff changeset
329
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
330 /// Allows abstracting over more complex default values than just primitives.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
331 /// The former `configitems.py` contained some dynamic code that is encoded
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
332 /// in this enum.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
333 #[derive(Debug, PartialEq, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
334 pub enum DefaultConfigItemType {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
335 /// Some primitive type (string, integer, boolean)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
336 Primitive(toml::Value),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
337 /// A dynamic value that will be given by the code at runtime
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
338 Dynamic,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
339 /// An lazily-returned array (possibly only relevant in the Python impl)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
340 /// Example: `lambda: [b"zstd", b"zlib"]`
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
341 Lambda(Vec<String>),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
342 /// For now, a special case for `web.encoding` that points to the
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
343 /// `encoding.encoding` module in the Python impl so that local encoding
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
344 /// is correctly resolved at runtime
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
345 LazyModule(String),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
346 ListType,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
347 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
348
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
349 impl DefaultConfigItemType {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
350 pub fn type_str(&self) -> &str {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
351 match self {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
352 DefaultConfigItemType::Primitive(primitive) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
353 primitive.type_str()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
354 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
355 DefaultConfigItemType::Dynamic => "dynamic",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
356 DefaultConfigItemType::Lambda(_) => "lambda",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
357 DefaultConfigItemType::LazyModule(_) => "lazy_module",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
358 DefaultConfigItemType::ListType => "list_type",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
359 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
360 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
361 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
362
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
363 /// Most of the fields are shared with [`DefaultConfigItem`].
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
364 #[derive(Debug, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
365 #[serde(try_from = "RawTemplateItem")]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
366 struct TemplateItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
367 suffix: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
368 default: Option<DefaultConfigItemType>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
369 priority: Option<isize>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
370 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
371 alias: Vec<(String, String)>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
372 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
373 experimental: bool,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
374 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
375 documentation: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
376 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
377
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
378 /// Corresponds to the raw (i.e. on disk) representation of a template item.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
379 /// Used as an intermediate step in deserialization.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
380 #[derive(Clone, Debug, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
381 struct RawTemplateItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
382 suffix: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
383 default: Option<toml::Value>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
384 #[serde(rename = "default-type")]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
385 default_type: Option<String>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
386 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
387 priority: isize,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
388 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
389 generic: bool,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
390 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
391 alias: Vec<(String, String)>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
392 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
393 experimental: bool,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
394 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
395 documentation: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
396 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
397
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
398 impl TemplateItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
399 fn into_default_item(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
400 self,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
401 application: TemplateApplication,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
402 ) -> DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
403 DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
404 section: application.section,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
405 name: application
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
406 .prefix
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
407 .map(|prefix| format!("{}.{}", prefix, self.suffix))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
408 .unwrap_or(self.suffix),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
409 default: self.default,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
410 priority: self.priority,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
411 alias: self.alias,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
412 experimental: self.experimental,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
413 documentation: self.documentation,
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
414 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
415 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
416 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
417 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
418
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
419 impl TryFrom<RawTemplateItem> for TemplateItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
420 type Error = HgError;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
421
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
422 fn try_from(value: RawTemplateItem) -> Result<Self, Self::Error> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
423 Ok(Self {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
424 suffix: value.suffix,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
425 default: raw_default_to_concrete(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
426 value.default_type,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
427 value.default,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
428 )?,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
429 priority: if value.generic {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
430 Some(value.priority)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
431 } else {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
432 None
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
433 },
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
434 alias: value.alias,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
435 experimental: value.experimental,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
436 documentation: value.documentation,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
437 })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
438 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
439 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
440
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
441 /// Transforms the on-disk string-based representation of complex default types
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
442 /// to the concrete [`DefaultconfigItemType`].
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
443 fn raw_default_to_concrete(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
444 default_type: Option<String>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
445 default: Option<toml::Value>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
446 ) -> Result<Option<DefaultConfigItemType>, HgError> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
447 Ok(match default_type.as_deref() {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
448 None => default.as_ref().map(|default| {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
449 DefaultConfigItemType::Primitive(default.to_owned())
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
450 }),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
451 Some("dynamic") => Some(DefaultConfigItemType::Dynamic),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
452 Some("list_type") => Some(DefaultConfigItemType::ListType),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
453 Some("lambda") => match &default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
454 Some(default) => Some(DefaultConfigItemType::Lambda(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
455 default.to_owned().try_into().map_err(|e| {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
456 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
457 e.to_string(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
458 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
459 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
460 )
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
461 })?,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
462 )),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
463 None => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
464 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
465 "lambda defined with no return value".to_string(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
466 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
467 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
468 ))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
469 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
470 },
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
471 Some("lazy_module") => match &default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
472 Some(default) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
473 Some(DefaultConfigItemType::LazyModule(match default {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
474 toml::Value::String(module) => module.to_owned(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
475 _ => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
476 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
477 "lazy_module module name should be a string"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
478 .to_string(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
479 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
480 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
481 ))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
482 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
483 }))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
484 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
485 None => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
486 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
487 "lazy_module should have a default value".to_string(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
488 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
489 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
490 ))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
491 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
492 },
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
493 Some(invalid) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
494 return Err(HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
495 format!("invalid default_type '{}'", invalid),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
496 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
497 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
498 ))
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
499 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
500 })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
501 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
502
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
503 #[derive(Debug, Clone, Deserialize)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
504 struct TemplateApplication {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
505 template: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
506 section: String,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
507 #[serde(default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
508 prefix: Option<String>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
509 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
510
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
511 /// Represents the (dynamic) set of default core Mercurial config items from
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
512 /// `mercurial/configitems.toml`.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
513 #[derive(Clone, Debug, Default)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
514 pub struct DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
515 /// Mapping of section -> (mapping of name -> item)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
516 items: FastHashMap<String, FastHashMap<String, DefaultConfigItem>>,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
517 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
518
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
519 impl DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
520 pub fn empty() -> DefaultConfig {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
521 Self {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
522 items: Default::default(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
523 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
524 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
525
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
526 /// Returns `Self`, given the contents of `mercurial/configitems.toml`
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
527 #[logging_timer::time("trace")]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
528 pub fn from_contents(contents: &str) -> Result<Self, HgError> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
529 let mut from_file: ConfigItems =
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
530 toml::from_str(contents).map_err(|e| {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
531 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
532 e.to_string(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
533 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
534 Some("Check 'mercurial/configitems.toml'".into()),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
535 )
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
536 })?;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
537
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
538 let mut flat_items = from_file.items;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
539
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
540 for application in from_file.template_applications.drain(..) {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
541 match from_file.templates.get(&application.template) {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
542 None => return Err(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
543 HgError::abort(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
544 format!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
545 "template application refers to undefined template '{}'",
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
546 application.template
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
547 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
548 exit_codes::ABORT,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
549 Some("Check 'mercurial/configitems.toml'".into())
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
550 )
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
551 ),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
552 Some(template_items) => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
553 for template_item in template_items {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
554 flat_items.push(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
555 template_item
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
556 .clone()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
557 .into_default_item(application.clone()),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
558 )
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
559 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
560 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
561 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
562 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
563
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
564 let items = flat_items.into_iter().fold(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
565 FastHashMap::default(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
566 |mut acc, item| {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
567 acc.entry(item.section.to_owned())
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
568 .or_insert_with(|| {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
569 let mut section = FastHashMap::default();
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
570 section.insert(item.name.to_owned(), item.to_owned());
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
571 section
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
572 })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
573 .insert(item.name.to_owned(), item);
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
574 acc
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
575 },
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
576 );
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
577
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
578 Ok(Self { items })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
579 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
580
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
581 /// Return the default config item that matches `section` and `item`.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
582 pub fn get(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
583 &self,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
584 section: &[u8],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
585 item: &[u8],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
586 ) -> Option<&DefaultConfigItem> {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
587 // Core items must be valid UTF-8
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
588 let section = String::from_utf8_lossy(section);
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
589 let section_map = self.items.get(section.as_ref())?;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
590 let item_name_lossy = String::from_utf8_lossy(item);
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
591 match section_map.get(item_name_lossy.as_ref()) {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
592 Some(item) => Some(item),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
593 None => {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
594 for generic_item in section_map
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
595 .values()
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
596 .filter(|item| item.is_generic())
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
597 .sorted_by_key(|item| match item.priority {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
598 Some(priority) => (priority, &item.name),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
599 _ => unreachable!(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
600 })
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
601 {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
602 if regex::bytes::Regex::new(&generic_item.name)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
603 .expect("invalid regex in configitems")
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
604 .is_match(item)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
605 {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
606 return Some(generic_item);
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
607 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
608 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
609 None
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
610 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
611 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
612 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
613 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
614
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
615 #[cfg(test)]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
616 mod tests {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
617 use crate::config::config_items::{
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
618 DefaultConfigItem, DefaultConfigItemType,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
619 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
620
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
621 use super::DefaultConfig;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
622
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
623 #[test]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
624 fn test_config_read() {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
625 let contents = r#"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
626 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
627 section = "alias"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
628 name = "abcd.*"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
629 default = 3
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
630 generic = true
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
631 priority = -1
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
632
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
633 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
634 section = "alias"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
635 name = ".*"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
636 default-type = "dynamic"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
637 generic = true
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
638
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
639 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
640 section = "cmdserver"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
641 name = "track-log"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
642 default-type = "lambda"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
643 default = [ "chgserver", "cmdserver", "repocache",]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
644
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
645 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
646 section = "chgserver"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
647 name = "idletimeout"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
648 default = 3600
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
649
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
650 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
651 section = "cmdserver"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
652 name = "message-encodings"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
653 default-type = "list_type"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
654
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
655 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
656 section = "web"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
657 name = "encoding"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
658 default-type = "lazy_module"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
659 default = "encoding.encoding"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
660
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
661 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
662 section = "command-templates"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
663 name = "graphnode"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
664 alias = [["ui", "graphnodetemplate"]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
665 documentation = """This is a docstring.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
666 This is another line \
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
667 but this is not."""
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
668
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
669 [[items]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
670 section = "censor"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
671 name = "policy"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
672 default = "abort"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
673 experimental = true
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
674
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
675 [[template-applications]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
676 template = "diff-options"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
677 section = "commands"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
678 prefix = "revert.interactive"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
679
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
680 [[template-applications]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
681 template = "diff-options"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
682 section = "diff"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
683
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
684 [templates]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
685 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
686 suffix = "nodates"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
687 default = false
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
688
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
689 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
690 suffix = "showfunc"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
691 default = false
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
692
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
693 [[templates.diff-options]]
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
694 suffix = "unified"
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
695 "#;
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
696 let res = DefaultConfig::from_contents(contents);
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
697 let config = match res {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
698 Ok(config) => config,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
699 Err(e) => panic!("{}", e),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
700 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
701 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
702 section: "censor".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
703 name: "policy".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
704 default: Some(DefaultConfigItemType::Primitive("abort".into())),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
705 priority: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
706 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
707 experimental: true,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
708 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
709 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
710 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
711 assert_eq!(config.get(b"censor", b"policy"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
712
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
713 // Test generic priority. The `.*` pattern is wider than `abcd.*`, but
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
714 // `abcd.*` has priority, so it should match first.
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
715 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
716 section: "alias".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
717 name: "abcd.*".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
718 default: Some(DefaultConfigItemType::Primitive(3.into())),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
719 priority: Some(-1),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
720 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
721 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
722 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
723 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
724 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
725 assert_eq!(config.get(b"alias", b"abcdsomething"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
726
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
727 //... but if it doesn't, we should fallback to `.*`
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
728 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
729 section: "alias".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
730 name: ".*".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
731 default: Some(DefaultConfigItemType::Dynamic),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
732 priority: Some(0),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
733 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
734 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
735 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
736 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
737 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
738 assert_eq!(config.get(b"alias", b"something"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
739
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
740 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
741 section: "chgserver".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
742 name: "idletimeout".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
743 default: Some(DefaultConfigItemType::Primitive(3600.into())),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
744 priority: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
745 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
746 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
747 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
748 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
749 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
750 assert_eq!(config.get(b"chgserver", b"idletimeout"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
751
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
752 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
753 section: "cmdserver".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
754 name: "track-log".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
755 default: Some(DefaultConfigItemType::Lambda(vec![
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
756 "chgserver".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
757 "cmdserver".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
758 "repocache".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
759 ])),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
760 priority: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
761 alias: vec![],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
762 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
763 documentation: "".into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
764 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
765 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
766 assert_eq!(config.get(b"cmdserver", b"track-log"), Some(&expected));
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
767
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
768 let expected = DefaultConfigItem {
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
769 section: "command-templates".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
770 name: "graphnode".into(),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
771 default: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
772 priority: None,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
773 alias: vec![("ui".into(), "graphnodetemplate".into())],
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
774 experimental: false,
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
775 documentation:
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
776 "This is a docstring.\nThis is another line but this is not."
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
777 .into(),
50762
7f8f6fe13fa9 configitems: move blackbox's config items to the new configitems.toml
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50760
diff changeset
778 in_core_extension: None,
50760
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
779 };
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
780 assert_eq!(
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
781 config.get(b"command-templates", b"graphnode"),
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
782 Some(&expected)
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
783 );
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
784 }
f8412da86d05 rust-config: add support for default config items
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
785 }