Skip to content

Commit d2a0e14

Browse files
committed
chore: reuse acp success responses in client
1 parent a60ecca commit d2a0e14

3 files changed

Lines changed: 13 additions & 43 deletions

File tree

crates/client/src/acp_fs.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use devo_protocol::ACP_FS_WRITE_TEXT_FILE_METHOD;
55
use devo_protocol::AcpFsReadTextFileParams;
66
use devo_protocol::AcpFsReadTextFileResult;
77
use devo_protocol::AcpFsWriteTextFileParams;
8-
use devo_protocol::AcpSuccessResponse;
8+
use devo_protocol::acp_success_response;
99

1010
pub(crate) async fn handle_acp_fs_request(
1111
request_id: serde_json::Value,
@@ -17,7 +17,7 @@ pub(crate) async fn handle_acp_fs_request(
1717
let params = serde_json::from_value::<AcpFsReadTextFileParams>(params)
1818
.map_err(|error| format!("invalid fs/read_text_file params: {error}"))?;
1919
let content = read_acp_text_file(&params.path, params.line, params.limit).await?;
20-
Ok(acp_fs_success_response(
20+
Ok(acp_success_response(
2121
request_id,
2222
AcpFsReadTextFileResult {
2323
content,
@@ -29,7 +29,7 @@ pub(crate) async fn handle_acp_fs_request(
2929
let params = serde_json::from_value::<AcpFsWriteTextFileParams>(params)
3030
.map_err(|error| format!("invalid fs/write_text_file params: {error}"))?;
3131
write_acp_text_file(&params.path, params.content).await?;
32-
Ok(acp_fs_success_response(request_id, serde_json::Value::Null))
32+
Ok(acp_success_response(request_id, serde_json::Value::Null))
3333
}
3434
_ => Err(format!("unknown ACP filesystem method {method}")),
3535
}
@@ -82,20 +82,13 @@ fn select_text_lines(
8282
Ok(selected)
8383
}
8484

85-
fn acp_fs_success_response<T: serde::Serialize>(
86-
id: serde_json::Value,
87-
result: T,
88-
) -> serde_json::Value {
89-
serde_json::to_value(AcpSuccessResponse::new(id, result))
90-
.expect("serialize ACP filesystem success response")
91-
}
92-
9385
#[cfg(test)]
9486
mod tests {
9587
use std::path::PathBuf;
9688
use std::sync::atomic::AtomicU64;
9789
use std::sync::atomic::Ordering;
9890

91+
use devo_protocol::AcpSuccessResponse;
9992
use pretty_assertions::assert_eq;
10093

10194
use super::*;

crates/client/src/acp_terminal.rs

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ use devo_protocol::ACP_TERMINAL_KILL_METHOD;
1010
use devo_protocol::ACP_TERMINAL_OUTPUT_METHOD;
1111
use devo_protocol::ACP_TERMINAL_RELEASE_METHOD;
1212
use devo_protocol::ACP_TERMINAL_WAIT_FOR_EXIT_METHOD;
13-
use devo_protocol::AcpSuccessResponse;
1413
use devo_protocol::AcpTerminalCreateParams;
1514
use devo_protocol::AcpTerminalCreateResult;
1615
use devo_protocol::AcpTerminalExitStatus;
1716
use devo_protocol::AcpTerminalOutputResult;
1817
use devo_protocol::AcpTerminalParams;
1918
use devo_protocol::AcpTerminalWaitForExitResult;
19+
use devo_protocol::acp_success_response;
2020
use tokio::io::AsyncRead;
2121
use tokio::io::AsyncReadExt;
2222
use tokio::process::Child;
@@ -95,7 +95,7 @@ pub(crate) async fn handle_acp_terminal_request(
9595
let params = serde_json::from_value::<AcpTerminalCreateParams>(params)
9696
.map_err(|error| format!("invalid terminal/create params: {error}"))?;
9797
let terminal_id = create_acp_terminal(params, terminals, notifications_tx).await?;
98-
Ok(acp_terminal_success_response(
98+
Ok(acp_success_response(
9999
request_id,
100100
AcpTerminalCreateResult {
101101
terminal_id,
@@ -107,13 +107,13 @@ pub(crate) async fn handle_acp_terminal_request(
107107
let params = serde_json::from_value::<AcpTerminalParams>(params)
108108
.map_err(|error| format!("invalid terminal/output params: {error}"))?;
109109
let result = acp_terminal_output(&params.terminal_id, terminals).await?;
110-
Ok(acp_terminal_success_response(request_id, result))
110+
Ok(acp_success_response(request_id, result))
111111
}
112112
ACP_TERMINAL_WAIT_FOR_EXIT_METHOD => {
113113
let params = serde_json::from_value::<AcpTerminalParams>(params)
114114
.map_err(|error| format!("invalid terminal/wait_for_exit params: {error}"))?;
115115
let status = wait_for_acp_terminal_exit(&params.terminal_id, terminals).await?;
116-
Ok(acp_terminal_success_response(
116+
Ok(acp_success_response(
117117
request_id,
118118
AcpTerminalWaitForExitResult {
119119
exit_code: status.exit_code,
@@ -126,19 +126,13 @@ pub(crate) async fn handle_acp_terminal_request(
126126
let params = serde_json::from_value::<AcpTerminalParams>(params)
127127
.map_err(|error| format!("invalid terminal/kill params: {error}"))?;
128128
kill_acp_terminal(&params.terminal_id, terminals).await?;
129-
Ok(acp_terminal_success_response(
130-
request_id,
131-
serde_json::json!({}),
132-
))
129+
Ok(acp_success_response(request_id, serde_json::json!({})))
133130
}
134131
ACP_TERMINAL_RELEASE_METHOD => {
135132
let params = serde_json::from_value::<AcpTerminalParams>(params)
136133
.map_err(|error| format!("invalid terminal/release params: {error}"))?;
137134
release_acp_terminal(&params.terminal_id, terminals).await?;
138-
Ok(acp_terminal_success_response(
139-
request_id,
140-
serde_json::json!({}),
141-
))
135+
Ok(acp_success_response(request_id, serde_json::json!({})))
142136
}
143137
_ => Err(format!("unknown ACP terminal method {method}")),
144138
}
@@ -450,16 +444,9 @@ fn acp_terminal_exit_status_from_process_status(status: ExitStatus) -> AcpTermin
450444
}
451445
}
452446

453-
fn acp_terminal_success_response<T: serde::Serialize>(
454-
id: serde_json::Value,
455-
result: T,
456-
) -> serde_json::Value {
457-
serde_json::to_value(AcpSuccessResponse::new(id, result))
458-
.expect("serialize ACP terminal success response")
459-
}
460-
461447
#[cfg(test)]
462448
mod tests {
449+
use devo_protocol::AcpSuccessResponse;
463450
use pretty_assertions::assert_eq;
464451
use tokio::sync::mpsc;
465452
use tokio::time::Duration;

crates/client/src/stdio.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ use devo_protocol::TurnStartParams;
145145
use devo_protocol::TurnStartResult;
146146
use devo_protocol::TurnSteerParams;
147147
use devo_protocol::TurnSteerResult;
148+
use devo_protocol::acp_success_response;
148149
use devo_protocol::devo_extension_inner_method;
149150
use devo_protocol::devo_extension_method;
150151
use devo_protocol::original_event_from_acp_notification;
@@ -656,7 +657,7 @@ impl StdioServerClient {
656657
let decision = acp_permission_response_from_approval(&params, &pending);
657658
write_acp_client_response(
658659
Arc::clone(&self.stdin),
659-
acp_client_success_response(pending.request_id.clone(), decision),
660+
acp_success_response(pending.request_id.clone(), decision),
660661
)
661662
.await
662663
.context("write ACP permission response")?;
@@ -1326,17 +1327,6 @@ fn acp_approval_scope_label(scope: &ApprovalScopeValue) -> &'static str {
13261327
}
13271328
}
13281329

1329-
fn acp_client_success_response(
1330-
id: serde_json::Value,
1331-
result: serde_json::Value,
1332-
) -> serde_json::Value {
1333-
serde_json::json!({
1334-
"jsonrpc": "2.0",
1335-
"id": id,
1336-
"result": result
1337-
})
1338-
}
1339-
13401330
fn acp_client_error_response(
13411331
id: serde_json::Value,
13421332
code: i64,

0 commit comments

Comments
 (0)