difftreelog
perf move ini manifestification to native
in: master
5 files changed
crates/jrsonnet-cli/src/manifest.rsdiffbeforeafterboth--- a/crates/jrsonnet-cli/src/manifest.rs
+++ b/crates/jrsonnet-cli/src/manifest.rs
@@ -4,7 +4,7 @@
use jrsonnet_evaluator::manifest::{
JsonFormat, ManifestFormat, StringFormat, ToStringFormat, YamlStreamFormat,
};
-use jrsonnet_stdlib::{TomlFormat, XmlJsonmlFormat, YamlFormat};
+use jrsonnet_stdlib::{IniFormat, TomlFormat, XmlJsonmlFormat, YamlFormat};
#[derive(Clone, Copy, ValueEnum)]
pub enum ManifestFormatName {
@@ -14,6 +14,7 @@
Yaml,
Toml,
XmlJsonml,
+ Ini,
}
#[derive(Parser)]
@@ -72,6 +73,10 @@
preserve_order,
)),
ManifestFormatName::XmlJsonml => Box::new(XmlJsonmlFormat::cli()),
+ ManifestFormatName::Ini => Box::new(IniFormat::cli(
+ #[cfg(feature = "exp-preserve-order")]
+ preserve_order,
+ )),
}
};
if self.yaml_stream {
crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/lib.rs
+++ b/crates/jrsonnet-stdlib/src/lib.rs
@@ -179,6 +179,7 @@
("manifestPython", builtin_manifest_python::INST),
("manifestPythonVars", builtin_manifest_python_vars::INST),
("manifestXmlJsonml", builtin_manifest_xml_jsonml::INST),
+ ("manifestIni", builtin_manifest_ini::INST),
// Parse
("parseJson", builtin_parse_json::INST),
("parseYaml", builtin_parse_yaml::INST),
crates/jrsonnet-stdlib/src/manifest/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/manifest/mod.rs
+++ b/crates/jrsonnet-stdlib/src/manifest/mod.rs
@@ -1,8 +1,10 @@
+mod ini;
mod python;
mod toml;
mod xml;
mod yaml;
+pub use ini::IniFormat;
use jrsonnet_evaluator::{
function::builtin,
manifest::{escape_string_json, JsonFormat, YamlStreamFormat},
@@ -190,3 +192,17 @@
pub fn builtin_manifest_xml_jsonml(value: Val) -> Result<String> {
value.manifest(XmlJsonmlFormat::std_to_xml())
}
+
+#[builtin]
+pub fn builtin_manifest_ini(
+ ini: Val,
+
+ #[default(false)]
+ #[cfg(feature = "exp-preserve-order")]
+ preserve_order: bool,
+) -> Result<String> {
+ ini.manifest(IniFormat::std(
+ #[cfg(feature = "exp-preserve-order")]
+ preserve_order,
+ ))
+}
crates/jrsonnet-stdlib/src/manifest/toml.rsdiffbeforeafterboth196 #[cfg(feature = "exp-preserve-order")]196 #[cfg(feature = "exp-preserve-order")]197 options.preserve_order,197 options.preserve_order,198 ) {198 ) {199 let value = value?;199 let value = value.with_description(|| format!("field <{key}> evaluation"))?;200 if is_section(&value)? {200 if is_section(&value)? {201 sections.push((key, value));201 sections.push((key, value));202 } else {202 } else {crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/std.jsonnet
+++ b/crates/jrsonnet-stdlib/src/std.jsonnet
@@ -25,26 +25,6 @@
else
error 'Assertion failed. ' + a + ' != ' + b,
- manifestIni(ini)::
- local body_lines(body) =
- std.join([], [
- local value_or_values = body[k];
- if std.isArray(value_or_values) then
- ['%s = %s' % [k, value] for value in value_or_values]
- else
- ['%s = %s' % [k, value_or_values]]
-
- for k in std.objectFields(body)
- ]);
-
- local section_lines(sname, sbody) = ['[%s]' % [sname]] + body_lines(sbody),
- main_body = if std.objectHas(ini, 'main') then body_lines(ini.main) else [],
- all_sections = [
- section_lines(k, ini.sections[k])
- for k in std.objectFields(ini.sections)
- ];
- std.join('\n', main_body + std.flattenArrays(all_sections) + ['']),
-
mergePatch(target, patch)::
if std.isObject(patch) then
local target_object =