Replace TransportFlag with FromStr on TransportMode
TransportFlag was a clap-only mirror of TransportMode with an identical
variant set. Adding FromStr to TransportMode lets clap parse it directly,
removing the mapping match and the redundant enum entirely.

https://claude.ai/code/session_01X5Jhh2yRc2hdY2kUdapi9h
change
commit 40b444792b2b325f5bbaa8a895f89770743e5984
author Claude <noreply@anthropic.com>
date
parent 435de41e
diff --git a/quire-ci/src/main.rs b/quire-ci/src/main.rs
index 6e9157f..30b2782 100644
--- a/quire-ci/src/main.rs
+++ b/quire-ci/src/main.rs
@@ -95,8 +95,8 @@ struct TransportFlags {
     server_url: String,
 
     /// Transport for CI ↔ server communication.
-    #[arg(long, default_value = "filesystem", value_enum)]
-    transport: TransportFlag,
+    #[arg(long, default_value = "filesystem")]
+    transport: TransportMode,
 }
 
 /// RAII wrapper around a tempdir holding captured sh logs. On drop,
@@ -170,13 +170,6 @@ fn parse_events_target(s: &str) -> Result<EventsTarget, String> {
     }
 }
 
-/// CLI-only transport mode selector for `--transport`.
-#[derive(Clone, Debug, PartialEq, Eq, clap::ValueEnum)]
-enum TransportFlag {
-    Filesystem,
-    Api,
-}
-
 fn main() -> miette::Result<()> {
     miette::set_panic_hook();
     let cli = Cli::parse();
@@ -215,10 +208,7 @@ fn main() -> miette::Result<()> {
                     server_url: transport.server_url,
                     auth_token,
                 },
-                mode: match transport.transport {
-                    TransportFlag::Filesystem => TransportMode::Filesystem,
-                    TransportFlag::Api => TransportMode::Api,
-                },
+                mode: transport.transport,
             };
             let (git_dir, meta, secrets, sentry_handoff) = load_bootstrap(&bootstrap)?;
 
diff --git a/quire-core/src/ci/transport.rs b/quire-core/src/ci/transport.rs
index 1fac832..a302ede 100644
--- a/quire-core/src/ci/transport.rs
+++ b/quire-core/src/ci/transport.rs
@@ -30,6 +30,18 @@ pub enum TransportMode {
     Api,
 }
 
+impl std::str::FromStr for TransportMode {
+    type Err = String;
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        match s {
+            "filesystem" => Ok(Self::Filesystem),
+            "api" => Ok(Self::Api),
+            other => Err(format!("unknown transport mode: {other}")),
+        }
+    }
+}
+
 /// Runtime transport for a single CI run.
 /// Use `None` for local runs where no server is involved.
 #[derive(Clone, Debug)]