fix: trait replace vars uses pre-parsed map

This commit is contained in:
əlemi 2024-10-25 17:30:02 +02:00
parent 492226f56a
commit b3fe8faaba

View file

@ -1,6 +1,4 @@
use std::sync::OnceLock; use std::{collections::HashMap, sync::OnceLock};
use crate::PostWomanError;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(untagged)] #[serde(untagged)]
@ -55,7 +53,7 @@ pub struct FillError(pub String);
pub trait FillableFromEnvironment: Sized { pub trait FillableFromEnvironment: Sized {
fn fill(self, env: &toml::Table) -> Result<Self, FillError>; fn fill(self, env: &toml::Table) -> Result<Self, FillError>;
fn replace(mut from: String, env: &toml::Table) -> Result<String, FillError> { fn replace(mut from: String, env: &HashMap<String, String>) -> Result<String, FillError> {
let placeholders: Vec<(String, String)> = var_matcher() let placeholders: Vec<(String, String)> = var_matcher()
.captures_iter(&from) .captures_iter(&from)
.map(|m| m.extract()) .map(|m| m.extract())
@ -67,7 +65,7 @@ pub trait FillableFromEnvironment: Sized {
for (txt, var) in placeholders { for (txt, var) in placeholders {
let value = env.get(&var).ok_or(FillError(var.to_string()))?; let value = env.get(&var).ok_or(FillError(var.to_string()))?;
from = from.replace(&txt, &stringify_toml(value)); from = from.replace(&txt, value);
} }
Ok(from) Ok(from)