KeiSeiKit-1.0/_primitives/_rust/kei-import-project/src/trait_kind.rs
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

77 lines
2.6 KiB
Rust

//! Trait-kind parsing + enumeration helpers.
//!
//! Extracted from `trait_patterns.rs` to keep that file under the
//! Constructor Pattern 200-LOC ceiling. The 12 patterns + their
//! supporting structs live in `trait_patterns.rs`; this module owns
//! the case-insensitive `from_str_ci` parser and the `all()`
//! enumeration helper.
use crate::trait_patterns::TraitKind;
impl TraitKind {
/// Parse a case-insensitive kebab-case name into a `TraitKind`.
pub fn from_str_ci(s: &str) -> Option<TraitKind> {
match s.to_lowercase().replace('-', "").as_str() {
"computeprovider" | "compute" => Some(TraitKind::ComputeProvider),
"authprovider" | "auth" => Some(TraitKind::AuthProvider),
"notifychannel" | "notify" => Some(TraitKind::NotifyChannel),
"gitbackend" | "git" => Some(TraitKind::GitBackend),
"llmbackend" | "llm" => Some(TraitKind::LlmBackend),
"servicemanager" | "service" => Some(TraitKind::ServiceManager),
"memorybackend" | "memory" => Some(TraitKind::MemoryBackend),
"scheduler" => Some(TraitKind::Scheduler),
"networkmode" | "network" => Some(TraitKind::NetworkMode),
"backup" => Some(TraitKind::Backup),
"costguard" | "cost" => Some(TraitKind::CostGuard),
"observability" => Some(TraitKind::Observability),
_ => None,
}
}
/// All 12 trait kinds in definition order.
pub fn all() -> &'static [TraitKind] {
ALL_KINDS
}
}
static ALL_KINDS: &[TraitKind] = &[
TraitKind::ComputeProvider,
TraitKind::AuthProvider,
TraitKind::NotifyChannel,
TraitKind::GitBackend,
TraitKind::LlmBackend,
TraitKind::ServiceManager,
TraitKind::MemoryBackend,
TraitKind::Scheduler,
TraitKind::NetworkMode,
TraitKind::Backup,
TraitKind::CostGuard,
TraitKind::Observability,
];
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn from_str_ci_kebab() {
assert_eq!(TraitKind::from_str_ci("compute-provider"), Some(TraitKind::ComputeProvider));
assert_eq!(TraitKind::from_str_ci("memory-backend"), Some(TraitKind::MemoryBackend));
}
#[test]
fn from_str_ci_short_alias() {
assert_eq!(TraitKind::from_str_ci("compute"), Some(TraitKind::ComputeProvider));
assert_eq!(TraitKind::from_str_ci("auth"), Some(TraitKind::AuthProvider));
}
#[test]
fn from_str_ci_unknown() {
assert_eq!(TraitKind::from_str_ci("nope"), None);
}
#[test]
fn all_returns_12() {
assert_eq!(TraitKind::all().len(), 12);
}
}