use super::{FrameworkDetectionUtils, LanguageFrameworkDetector, TechnologyRule};
use crate::analyzer::{DetectedLanguage, DetectedTechnology, LibraryType, TechnologyCategory};
use crate::error::Result;
pub struct RustFrameworkDetector;
impl LanguageFrameworkDetector for RustFrameworkDetector {
fn detect_frameworks(&self, language: &DetectedLanguage) -> Result<Vec<DetectedTechnology>> {
let rules = get_rust_technology_rules();
let all_deps: Vec<String> = language
.main_dependencies
.iter()
.chain(language.dev_dependencies.iter())
.cloned()
.collect();
let technologies = FrameworkDetectionUtils::detect_technologies_by_dependencies(
&rules,
&all_deps,
language.confidence,
);
Ok(technologies)
}
fn supported_languages(&self) -> Vec<&'static str> {
vec!["Rust"]
}
}
fn get_rust_technology_rules() -> Vec<TechnologyRule> {
vec![
TechnologyRule {
name: "Actix Web".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["actix-web".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["actix".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Axum".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["axum".to_string()],
requires: vec!["Tokio".to_string()],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Rocket".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["rocket".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Warp".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["warp".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Tide".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["tide".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Thruster".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["thruster".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Poem".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["poem".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Rwf".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["rwf".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Salvo".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["salvo".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Gotham".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["gotham".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Iron".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["iron".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Nickel".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["nickel".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Rouille".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["rouille".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Rustful".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["rustful".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Rustless".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["rustless".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Saphir".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.90,
dependency_patterns: vec!["saphir".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Tardis".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["tardis".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Loco".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["loco-rs".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec!["loco".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Trillium".to_string(),
category: TechnologyCategory::BackendFramework,
confidence: 0.95,
dependency_patterns: vec!["trillium".to_string()],
requires: vec!["Tokio".to_string()],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Tokio".to_string(),
category: TechnologyCategory::Runtime,
confidence: 0.90,
dependency_patterns: vec!["tokio".to_string()],
requires: vec![],
conflicts_with: vec!["async-std".to_string()],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "async-std".to_string(),
category: TechnologyCategory::Runtime,
confidence: 0.90,
dependency_patterns: vec!["async-std".to_string()],
requires: vec![],
conflicts_with: vec!["Tokio".to_string()],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "smol".to_string(),
category: TechnologyCategory::Runtime,
confidence: 0.90,
dependency_patterns: vec!["smol".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "reqwest".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["reqwest".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "hyper".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["hyper".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "ureq".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.90,
dependency_patterns: vec!["ureq".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "anyhow".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["anyhow".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "thiserror".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["thiserror".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "eyre".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["eyre".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "color-eyre".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["color-eyre".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Serde".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["serde".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "serde_json".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["serde_json".to_string()],
requires: vec!["Serde".to_string()],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "bincode".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["bincode".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "toml".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["toml".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "ron".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["ron".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "clap".to_string(),
category: TechnologyCategory::Library(LibraryType::CLI),
confidence: 0.85,
dependency_patterns: vec!["clap".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "structopt".to_string(),
category: TechnologyCategory::Library(LibraryType::CLI),
confidence: 0.85,
dependency_patterns: vec!["structopt".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "argh".to_string(),
category: TechnologyCategory::Library(LibraryType::CLI),
confidence: 0.85,
dependency_patterns: vec!["argh".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "bpaf".to_string(),
category: TechnologyCategory::Library(LibraryType::CLI),
confidence: 0.85,
dependency_patterns: vec!["bpaf".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "tracing".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["tracing".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "log".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["log".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "env_logger".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["env_logger".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "slog".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["slog".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "fern".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["fern".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "rstest".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["rstest".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "proptest".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["proptest".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "quickcheck".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["quickcheck".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Criterion".to_string(),
category: TechnologyCategory::Testing,
confidence: 0.85,
dependency_patterns: vec!["criterion".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Diesel".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["diesel".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "SQLx".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["sqlx".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "SeaORM".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec![
"sea-orm".to_string(),
"sea-orm-migration".to_string(),
"sea-orm-cli".to_string(),
],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec!["seaorm".to_string()],
file_indicators: vec![],
},
TechnologyRule {
name: "Rbatis".to_string(),
category: TechnologyCategory::Database,
confidence: 0.90,
dependency_patterns: vec!["rbatis".to_string(), "rbdc".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "ring".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["ring".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "rustls".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["rustls".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "sha2".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["sha2".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "hmac".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["hmac".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "aes".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["aes".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "rsa".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["rsa".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "chrono".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["chrono".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "time".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["time".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "wasm-bindgen".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["wasm-bindgen".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "js-sys".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["js-sys".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "web-sys".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["web-sys".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "Bevy".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.95,
dependency_patterns: vec!["bevy".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "ggez".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.95,
dependency_patterns: vec!["ggez".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: true,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "handlebars".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["handlebars".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "tera".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["tera".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "askama".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["askama".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "ndarray".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["ndarray".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "nalgebra".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["nalgebra".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "image".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["image".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "nom".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["nom".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "pest".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["pest".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "flate2".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["flate2".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
TechnologyRule {
name: "zstd".to_string(),
category: TechnologyCategory::Library(LibraryType::Utility),
confidence: 0.85,
dependency_patterns: vec!["zstd".to_string()],
requires: vec![],
conflicts_with: vec![],
is_primary_indicator: false,
alternative_names: vec![],
file_indicators: vec![],
},
]
}