ai-agent 0.13.4

Idiomatic agent sdk inspired by the claude code source leak
Documentation
use regex::Regex;

pub fn is_match(pattern: &str, text: &str) -> bool {
    Regex::new(pattern)
        .map(|re| re.is_match(text))
        .unwrap_or(false)
}

pub fn find_match(pattern: &str, text: &str) -> Option<String> {
    Regex::new(pattern)
        .ok()
        .and_then(|re| re.find(text).map(|m| m.as_str().to_string()))
}

pub fn find_all_matches(pattern: &str, text: &str) -> Vec<String> {
    Regex::new(pattern)
        .ok()
        .map(|re| re.find_iter(text).map(|m| m.as_str().to_string()).collect())
        .unwrap_or_default()
}

pub fn replace_all(pattern: &str, text: &str, replacement: &str) -> String {
    Regex::new(pattern)
        .map(|re| re.replace_all(text, replacement).to_string())
        .unwrap_or_else(|_| text.to_string())
}

pub fn capture_groups(pattern: &str, text: &str) -> Vec<Option<String>> {
    Regex::new(pattern)
        .ok()
        .and_then(|re| re.captures(text))
        .map(|caps| {
            caps.iter()
                .skip(1)
                .map(|m| m.map(|m| m.as_str().to_string()))
                .collect()
        })
        .unwrap_or_default()
}

pub fn split_by_pattern(pattern: &str, text: &str) -> Vec<String> {
    Regex::new(pattern)
        .map(|re| re.split(text).map(|s| s.to_string()).collect())
        .unwrap_or_else(|_| vec![text.to_string()])
}