Skip to content

Commit fb19af6

Browse files
committed
comment
1 parent 00d0399 commit fb19af6

File tree

1 file changed

+74
-11
lines changed
  • codex-rs/app-server-protocol/src/protocol

1 file changed

+74
-11
lines changed

codex-rs/app-server-protocol/src/protocol/v2.rs

Lines changed: 74 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use codex_protocol::account::PlanType;
66
use codex_protocol::approvals::ExecPolicyAmendment as CoreExecPolicyAmendment;
77
use codex_protocol::config_types::ForcedLoginMethod;
88
use codex_protocol::config_types::ReasoningSummary;
9+
use codex_protocol::config_types::SandboxMode as CoreSandboxMode;
910
use codex_protocol::config_types::Verbosity;
1011
use codex_protocol::items::AgentMessageContent as CoreAgentMessageContent;
1112
use codex_protocol::items::TurnItem as CoreTurnItem;
@@ -125,17 +126,68 @@ impl From<CoreCodexErrorInfo> for CodexErrorInfo {
125126
}
126127
}
127128

128-
v2_enum_from_core!(
129-
pub enum AskForApproval from codex_protocol::protocol::AskForApproval {
130-
UnlessTrusted, OnFailure, OnRequest, Never
129+
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)]
130+
#[serde(rename_all = "kebab-case")]
131+
#[ts(rename_all = "kebab-case", export_to = "v2/")]
132+
pub enum AskForApproval {
133+
#[serde(rename = "untrusted")]
134+
#[ts(rename = "untrusted")]
135+
UnlessTrusted,
136+
OnFailure,
137+
OnRequest,
138+
Never,
139+
}
140+
141+
impl AskForApproval {
142+
pub fn to_core(self) -> CoreAskForApproval {
143+
match self {
144+
AskForApproval::UnlessTrusted => CoreAskForApproval::UnlessTrusted,
145+
AskForApproval::OnFailure => CoreAskForApproval::OnFailure,
146+
AskForApproval::OnRequest => CoreAskForApproval::OnRequest,
147+
AskForApproval::Never => CoreAskForApproval::Never,
148+
}
131149
}
132-
);
150+
}
133151

134-
v2_enum_from_core!(
135-
pub enum SandboxMode from codex_protocol::config_types::SandboxMode {
136-
ReadOnly, WorkspaceWrite, DangerFullAccess
152+
impl From<CoreAskForApproval> for AskForApproval {
153+
fn from(value: CoreAskForApproval) -> Self {
154+
match value {
155+
CoreAskForApproval::UnlessTrusted => AskForApproval::UnlessTrusted,
156+
CoreAskForApproval::OnFailure => AskForApproval::OnFailure,
157+
CoreAskForApproval::OnRequest => AskForApproval::OnRequest,
158+
CoreAskForApproval::Never => AskForApproval::Never,
159+
}
137160
}
138-
);
161+
}
162+
163+
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)]
164+
#[serde(rename_all = "kebab-case")]
165+
#[ts(rename_all = "kebab-case", export_to = "v2/")]
166+
pub enum SandboxMode {
167+
ReadOnly,
168+
WorkspaceWrite,
169+
DangerFullAccess,
170+
}
171+
172+
impl SandboxMode {
173+
pub fn to_core(self) -> CoreSandboxMode {
174+
match self {
175+
SandboxMode::ReadOnly => CoreSandboxMode::ReadOnly,
176+
SandboxMode::WorkspaceWrite => CoreSandboxMode::WorkspaceWrite,
177+
SandboxMode::DangerFullAccess => CoreSandboxMode::DangerFullAccess,
178+
}
179+
}
180+
}
181+
182+
impl From<CoreSandboxMode> for SandboxMode {
183+
fn from(value: CoreSandboxMode) -> Self {
184+
match value {
185+
CoreSandboxMode::ReadOnly => SandboxMode::ReadOnly,
186+
CoreSandboxMode::WorkspaceWrite => SandboxMode::WorkspaceWrite,
187+
CoreSandboxMode::DangerFullAccess => SandboxMode::DangerFullAccess,
188+
}
189+
}
190+
}
139191

140192
v2_enum_from_core!(
141193
pub enum ReviewDelivery from codex_protocol::protocol::ReviewDelivery {
@@ -240,6 +292,9 @@ pub struct Config {
240292
pub additional: HashMap<String, JsonValue>,
241293
}
242294

295+
/// Keep config read/write compatible with kebab-case values from `config.toml`
296+
/// by round-tripping through the core enum (which is kebab-case) before
297+
/// mapping to the v2 enum.
243298
fn deserialize_approval_policy<'de, D>(deserializer: D) -> Result<Option<AskForApproval>, D::Error>
244299
where
245300
D: serde::Deserializer<'de>,
@@ -248,6 +303,8 @@ where
248303
Ok(value.map(AskForApproval::from))
249304
}
250305

306+
/// Serialize using the kebab-case core enum so config responses match
307+
/// existing `config.toml` values.
251308
fn serialize_approval_policy<S>(
252309
value: &Option<AskForApproval>,
253310
serializer: S,
@@ -257,25 +314,31 @@ where
257314
{
258315
value
259316
.as_ref()
260-
.map(|policy| policy.to_core())
317+
.copied()
318+
.map(AskForApproval::to_core)
261319
.serialize(serializer)
262320
}
263321

322+
/// Preserve kebab-case sandbox_mode values from `config.toml` by deserializing
323+
/// via the core enum before converting to the v2 enum.
264324
fn deserialize_sandbox_mode<'de, D>(deserializer: D) -> Result<Option<SandboxMode>, D::Error>
265325
where
266326
D: serde::Deserializer<'de>,
267327
{
268-
let value = Option::<codex_protocol::config_types::SandboxMode>::deserialize(deserializer)?;
328+
let value = Option::<CoreSandboxMode>::deserialize(deserializer)?;
269329
Ok(value.map(SandboxMode::from))
270330
}
271331

332+
/// Serialize sandbox_mode using the kebab-case core enum so config endpoints
333+
/// emit values that align with `config.toml`.
272334
fn serialize_sandbox_mode<S>(value: &Option<SandboxMode>, serializer: S) -> Result<S::Ok, S::Error>
273335
where
274336
S: serde::Serializer,
275337
{
276338
value
277339
.as_ref()
278-
.map(|mode| mode.to_core())
340+
.copied()
341+
.map(SandboxMode::to_core)
279342
.serialize(serializer)
280343
}
281344

0 commit comments

Comments
 (0)