Skip to main content

vfa_tui/models/
harness.rs

1use serde::{Deserialize, Serialize};
2
3/// AI harness platforms that can execute agents and skills.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5#[serde(rename_all = "kebab-case")]
6pub enum Harness {
7    Codex,
8    Copilot,
9    ClaudeCode,
10    Cursor,
11    Gemini,
12    Kiro,
13    Other,
14}
15
16impl std::fmt::Display for Harness {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        let s = serde_json::to_value(self)
19            .ok()
20            .and_then(|v| v.as_str().map(|s| s.to_string()))
21            .unwrap_or_else(|| format!("{:?}", self).to_lowercase());
22        write!(f, "{}", s)
23    }
24}
25
26/// How the catalog entry was created.
27#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
28#[serde(rename_all = "kebab-case")]
29pub enum SourceType {
30    Original,
31    Adapted,
32    ReferenceOnly,
33}
34
35impl std::fmt::Display for SourceType {
36    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37        let s = serde_json::to_value(self)
38            .ok()
39            .and_then(|v| v.as_str().map(|s| s.to_string()))
40            .unwrap_or_else(|| format!("{:?}", self).to_lowercase());
41        write!(f, "{}", s)
42    }
43}