pub struct PlaceholderResolver;Expand description
PlaceholderResolver - プレースホルダー抽出・置換ユーティリティ
依存関係を持たない純粋な文字列処理ユーティリティ。 値の解決は呼び出し側の責務。
設計方針:
- エスケープは不要(${} は予約語、YAML DSLとして割り切る)
- 再帰置換を防止(置換後の値が再度置換されない)
- ドット記法は不要(フラットキーで十分、ParameterBuilderの責務)
Implementations§
Source§impl PlaceholderResolver
impl PlaceholderResolver
Sourcepub fn extract_placeholders(template: &str) -> Vec<String>
pub fn extract_placeholders(template: &str) -> Vec<String>
テンプレート文字列からプレースホルダ名を抽出
ドット記法を含む placeholder にも対応(例: ${connection.tenant})
§Examples
use state_engine::common::placeholder_resolver::PlaceholderResolver;
let template = "user:${sso_user_id}:${tenant_id}";
let result = PlaceholderResolver::extract_placeholders(template);
assert_eq!(result, vec!["sso_user_id", "tenant_id"]);
let template2 = "db:${connection.tenant}";
let result2 = PlaceholderResolver::extract_placeholders(template2);
assert_eq!(result2, vec!["connection.tenant"]);Sourcepub fn replace(template: &str, params: &HashMap<String, String>) -> String
pub fn replace(template: &str, params: &HashMap<String, String>) -> String
プレースホルダを値で置換(再帰置換を防止)
置換は一度のみ実行され、置換後の値が再度置換されることはない。 未定義のプレースホルダーはそのまま残される。
§Examples
use state_engine::common::placeholder_resolver::PlaceholderResolver;
use std::collections::HashMap;
let template = "user:${sso_user_id}:${tenant_id}";
let mut params = HashMap::new();
params.insert("sso_user_id".to_string(), "user001".to_string());
params.insert("tenant_id".to_string(), "1".to_string());
let result = PlaceholderResolver::replace(template, ¶ms);
assert_eq!(result, "user:user001:1");§再帰置換の防止
use state_engine::common::placeholder_resolver::PlaceholderResolver;
use std::collections::HashMap;
let template = "${a}";
let mut params = HashMap::new();
params.insert("a".to_string(), "${b}".to_string());
params.insert("b".to_string(), "final".to_string());
let result = PlaceholderResolver::replace(template, ¶ms);
// 'final' にはならず '${b}' のまま(意図的)
assert_eq!(result, "${b}");Sourcepub fn replace_in_map(value: Value, params: &HashMap<String, String>) -> Value
pub fn replace_in_map(value: Value, params: &HashMap<String, String>) -> Value
配列の値でプレースホルダを一括置換(再帰的)
§Examples
use state_engine::common::placeholder_resolver::PlaceholderResolver;
use std::collections::HashMap;
use serde_yaml_ng::Value;
let mut values = HashMap::new();
values.insert("key1".to_string(), Value::String("${value1}".to_string()));
values.insert("key2".to_string(), Value::String("${value2}".to_string()));
let mut params = HashMap::new();
params.insert("value1".to_string(), "a".to_string());
params.insert("value2".to_string(), "b".to_string());
let result = PlaceholderResolver::replace_in_map(Value::Mapping(
values.into_iter().map(|(k, v)| (Value::String(k), v)).collect()
), ¶ms);
// result["key1"] == "a", result["key2"] == "b"Auto Trait Implementations§
impl Freeze for PlaceholderResolver
impl RefUnwindSafe for PlaceholderResolver
impl Send for PlaceholderResolver
impl Sync for PlaceholderResolver
impl Unpin for PlaceholderResolver
impl UnwindSafe for PlaceholderResolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more