| 433 | } |
| 434 | |
| 435 | fn openclaw_config_get_string_optional_at_path<R: OpenclawRunner>( |
| 436 | runner: &mut R, |
| 437 | path: &str, |
| 438 | approval_mode: OpenclawApprovalMode, |
| 439 | ) -> Result<Option<String>, Box<dyn Error>> { |
| 440 | match openclaw_config_get_json_at_path(runner, path, approval_mode) { |
| 441 | Ok(value) => extract_string_like_value(path, &value), |
| 442 | Err(error) if is_missing_config_path_error(&error.to_string()) => Ok(None), |
| 443 | Err(error) => Err(error), |
| 444 | } |
| 445 | } |
| 446 | |
| 447 | fn extract_string_like_value(path: &str, value: &Value) -> Result<Option<String>, Box<dyn Error>> { |
| 448 | match value { |