forge_doc/
helpers.rs

1use toml::{value::Table, Value};
2
3/// Merge original toml table with the override.
4pub(crate) fn merge_toml_table(table: &mut Table, override_table: Table) {
5    for (key, override_value) in override_table {
6        match table.get_mut(&key) {
7            Some(Value::Table(inner_table)) => {
8                // Override value must be a table, otherwise discard
9                if let Value::Table(inner_override) = override_value {
10                    merge_toml_table(inner_table, inner_override);
11                }
12            }
13            Some(Value::Array(inner_array)) => {
14                // Override value must be an array, otherwise discard
15                if let Value::Array(inner_override) = override_value {
16                    for entry in inner_override {
17                        if !inner_array.contains(&entry) {
18                            inner_array.push(entry);
19                        }
20                    }
21                }
22            }
23            _ => {
24                table.insert(key, override_value);
25            }
26        };
27    }
28}