refactor: derive GooseMode string conversions with strum (#7706)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
@@ -66,6 +66,7 @@ keyring = { version = "3.6.2", features = [
|
||||
"vendored",
|
||||
] }
|
||||
serde_yaml = { workspace = true }
|
||||
strum = { workspace = true }
|
||||
once_cell = { workspace = true }
|
||||
etcetera = { workspace = true }
|
||||
rand = { workspace = true }
|
||||
|
||||
@@ -1,26 +1,24 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use strum::{Display, EnumString, IntoStaticStr, VariantNames};
|
||||
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
|
||||
#[derive(
|
||||
Copy,
|
||||
Clone,
|
||||
Debug,
|
||||
Eq,
|
||||
PartialEq,
|
||||
Serialize,
|
||||
Deserialize,
|
||||
Display,
|
||||
EnumString,
|
||||
IntoStaticStr,
|
||||
VariantNames,
|
||||
)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
#[strum(serialize_all = "snake_case")]
|
||||
pub enum GooseMode {
|
||||
Auto,
|
||||
Approve,
|
||||
SmartApprove,
|
||||
Chat,
|
||||
}
|
||||
|
||||
impl FromStr for GooseMode {
|
||||
type Err = String;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
match s {
|
||||
"auto" => Ok(GooseMode::Auto),
|
||||
"approve" => Ok(GooseMode::Approve),
|
||||
"smart_approve" => Ok(GooseMode::SmartApprove),
|
||||
"chat" => Ok(GooseMode::Chat),
|
||||
_ => Err(format!("invalid mode: {}", s)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -424,14 +424,8 @@ impl ProviderTester {
|
||||
message: &str,
|
||||
label: &str,
|
||||
) -> Result<()> {
|
||||
let mode_str = match mode {
|
||||
GooseMode::Approve => "approve",
|
||||
GooseMode::SmartApprove => "smart_approve",
|
||||
GooseMode::Auto => "auto",
|
||||
GooseMode::Chat => "chat",
|
||||
};
|
||||
// Guard must live through agent.reply() — providers read GOOSE_MODE at spawn time.
|
||||
let _guard = env_lock::lock_env([("GOOSE_MODE", Some(mode_str))]);
|
||||
let _guard = env_lock::lock_env([("GOOSE_MODE", Some(<&str>::from(mode)))]);
|
||||
let provider = if self.is_cli_provider {
|
||||
create_with_named_model(
|
||||
&self.name.to_lowercase(),
|
||||
|
||||
Reference in New Issue
Block a user