Skip to content

Commit 58975fd

Browse files
committed
fix: fix adding secrets producing invalid toml
1 parent 29a64ec commit 58975fd

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

src/paths/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub trait DotPaths {
1111
/// Return the target path of a dot entry either absolute or relative to $HOME
1212
fn target(&self) -> Result<PathBuf>;
1313

14-
/// Resolve dot source copy path ({dotfiles/dotsource) against user defined dotfile directory
14+
/// Resolve dot source copy path ({dotfiles}/dotsource) against user defined dotfile directory
1515
/// Check if file exists
1616
fn source(&self) -> Result<PathBuf>;
1717

src/templating.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::settings::GPG;
33
use anyhow::{anyhow, Result};
44
use colored::Colorize;
55
use serde::{Deserialize, Serialize};
6-
use serde_json_merge::{Dfs, Merge, Union};
6+
use serde_json_merge::{Dfs, Merge};
77
use std::fs::File;
88
use std::io::prelude::*;
99
use std::io::BufReader;
@@ -65,15 +65,16 @@ impl Variables {
6565
pub(crate) fn push_secret(&mut self, key: &str, encrypted: &str) {
6666
match self.get_secrets_mut() {
6767
None => {
68-
let mut secrets_inner = tera::Map::new();
69-
secrets_inner.insert(key.to_string(), Value::String(encrypted.to_string()));
7068
let mut secrets = tera::Map::new();
71-
secrets.insert("secrets".to_string(), Value::Object(secrets_inner));
72-
self.inner.union::<Dfs>(&Value::Object(secrets));
69+
secrets.insert(key.to_string(), Value::String(encrypted.to_string()));
70+
let Some(vars) = self.inner.as_object_mut() else {
71+
panic!("Variables should be a Value::Object");
72+
};
73+
74+
vars.insert("secrets".to_string(), Value::Object(secrets));
7375
}
74-
Some(mut secrets) => {
76+
Some(secrets) => {
7577
secrets.insert(key.to_string(), Value::String(encrypted.to_string()));
76-
self.inner.union::<Dfs>(&Value::Object(secrets));
7778
}
7879
};
7980
}
@@ -174,11 +175,10 @@ impl Variables {
174175
Ok(Value::Object(decrypted))
175176
}
176177

177-
fn get_secrets_mut(&mut self) -> Option<Map<String, Value>> {
178+
fn get_secrets_mut(&mut self) -> Option<&mut Map<String, Value>> {
178179
self.inner
179180
.get_mut("secrets")
180-
.and_then(|value| value.as_object())
181-
.cloned()
181+
.and_then(|value| value.as_object_mut())
182182
}
183183
}
184184

@@ -223,6 +223,7 @@ mod test {
223223
};
224224

225225
variables.push_secret("pass", "hunter2");
226+
226227
let dot_content = variables
227228
.to_dot(Path::new("tests/dotfiles_with_secret/template"), &[])
228229
.unwrap();

0 commit comments

Comments
 (0)