vv-agent 0.4.8

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use base64::Engine as _;
use serde_json::Value;

pub(super) fn decode_rg_field(field: Option<&Value>) -> String {
    let Some(field) = field.and_then(Value::as_object) else {
        return String::new();
    };
    if let Some(text) = field.get("text").and_then(Value::as_str) {
        return text.to_string();
    }
    let Some(raw) = field.get("bytes").and_then(Value::as_str) else {
        return String::new();
    };
    base64::engine::general_purpose::STANDARD
        .decode(raw)
        .ok()
        .map(|bytes| String::from_utf8_lossy(&bytes).to_string())
        .unwrap_or_default()
}

pub(super) fn if_empty(value: String, fallback: &str) -> String {
    if value.is_empty() {
        fallback.to_string()
    } else {
        value
    }
}

pub(super) fn substring_by_byte_range(text: &str, start: usize, end: usize) -> Option<String> {
    if start > end
        || end > text.len()
        || !text.is_char_boundary(start)
        || !text.is_char_boundary(end)
    {
        return None;
    }
    Some(text[start..end].to_string())
}