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
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)]