pub mod counting;
pub mod extraction;
pub use counting::{AiModel, TokenCount, TokenCounter};
pub use extraction::{TokenExtractor, TokenStats};
use crate::traits::TokenExtraction;
pub fn get_token_counter_for_profile(profile: &str) -> TokenCounter {
counting::get_token_counter_for_profile(profile)
}
impl TokenExtraction for TokenExtractor {
fn extract_tokens(&self, content: &str, file_path: &str) -> Vec<String> {
TokenExtractor::extract_tokens(content, file_path)
}
fn count_tokens(&self, content: &str) -> usize {
TokenExtractor::extract_tokens(content, "").len()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_unified_token_module_exports() {
let counter = TokenCounter::new(AiModel::Generic);
let count = counter.count_tokens("hello world");
assert!(count.tokens > 0);
let tokens = TokenExtractor::extract_tokens("fn main() {}", "test.rs");
assert!(!tokens.is_empty());
}
#[test]
fn test_profile_integration() {
let counter = get_token_counter_for_profile("claude");
assert_eq!(counter.model(), AiModel::Claude);
}
}