senno 0.2.0

Wits for your backend: provider-agnostic LLM client and streaming tool-calling agent engine, Vertex AI first (Gemini + Claude on Vertex), with built-in history compaction.
Documentation
use std::str::FromStr;

pub(crate) fn resolve_with_default<T>(param: Option<T>, env_var: &str, default: T) -> T
where
    T: FromStr,
{
    if let Some(value) = param {
        return value;
    }

    std::env::var(env_var)
        .ok()
        .and_then(|v| v.parse::<T>().ok())
        .unwrap_or(default)
}

pub(crate) fn resolve_optional<T>(param: Option<T>, env_var: &str) -> Option<T>
where
    T: FromStr,
{
    if param.is_some() {
        return param;
    }

    std::env::var(env_var)
        .ok()
        .and_then(|v| v.parse::<T>().ok())
}