Skip to content

Commit d55029b

Browse files
committed
Shared RPC types
1 parent 12a277d commit d55029b

6 files changed

Lines changed: 32 additions & 291 deletions

File tree

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
//! For the complete protocol specification and documentation, visit
3939
//! <https://agentclientprotocol.com>.
4040
41+
pub mod rpc;
4142
mod serde_util;
4243
mod v1;
4344
#[cfg(feature = "unstable_protocol_v2")]

src/v1/rpc.rs renamed to src/rpc.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ use schemars::JsonSchema;
55
use serde::{Deserialize, Serialize};
66
use serde_with::skip_serializing_none;
77

8-
use crate::{Error, Result};
9-
108
/// JSON RPC Request Id
119
///
1210
/// An identifier established by the Client that MUST contain a String, Number, or NULL value if included. If it is not included it is assumed to be a notification. The value SHOULD normally not be Null \[1\] and Numbers SHOULD NOT contain fractional parts \[2\]
@@ -63,14 +61,14 @@ pub struct Request<Params> {
6361
)]
6462
#[serde(untagged)]
6563
#[schemars(rename = "{Result}", extend("x-docs-ignore" = true))]
66-
pub enum Response<Result> {
64+
pub enum Response<Result, Error> {
6765
Result { id: RequestId, result: Result },
6866
Error { id: RequestId, error: Error },
6967
}
7068

71-
impl<R> Response<R> {
69+
impl<R, E> Response<R, E> {
7270
#[must_use]
73-
pub fn new(id: impl Into<RequestId>, result: Result<R>) -> Self {
71+
pub fn new(id: impl Into<RequestId>, result: std::result::Result<R, E>) -> Self {
7472
match result {
7573
Ok(result) => Self::Result {
7674
id: id.into(),

src/v1/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ mod nes;
1212
mod plan;
1313
#[cfg(feature = "unstable_cancel_request")]
1414
mod protocol_level;
15-
mod rpc;
1615
mod tool_call;
1716

17+
pub use crate::rpc::{JsonRpcMessage, Notification, Request, RequestId};
1818
pub use agent::*;
1919
pub use client::*;
2020
pub use content::*;
@@ -28,10 +28,11 @@ pub use nes::*;
2828
pub use plan::*;
2929
#[cfg(feature = "unstable_cancel_request")]
3030
pub use protocol_level::*;
31-
pub use rpc::*;
3231
pub use serde_json::value::RawValue;
3332
pub use tool_call::*;
3433

34+
pub type Response<Result> = crate::rpc::Response<Result, Error>;
35+
3536
use schemars::JsonSchema;
3637
use serde::{Deserialize, Serialize};
3738
use std::sync::Arc;

src/v2/conversion.rs

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,28 @@ macro_rules! identity_conversion {
144144
}
145145

146146
identity_conversion!(
147-
bool, f32, f64, i16, i32, i64, i8, isize, String, u16, u32, u64, u8, usize,
148-
&'static str, Arc<RawValue>, Arc<str>, PathBuf, ProtocolVersion,
149-
serde_json::Map<String, serde_json::Value>, serde_json::Value,
147+
bool,
148+
f32,
149+
f64,
150+
i16,
151+
i32,
152+
i64,
153+
i8,
154+
isize,
155+
String,
156+
u16,
157+
u32,
158+
u64,
159+
u8,
160+
usize,
161+
&'static str,
162+
Arc<RawValue>,
163+
Arc<str>,
164+
PathBuf,
165+
ProtocolVersion,
166+
super::RequestId,
167+
serde_json::Map<String, serde_json::Value>,
168+
serde_json::Value,
150169
);
151170

152171
impl<T> IntoV1 for Option<T>
@@ -9051,30 +9070,6 @@ impl IntoV2 for crate::v1::Role {
90519070
}
90529071
}
90539072

9054-
impl IntoV1 for super::RequestId {
9055-
type Output = crate::v1::RequestId;
9056-
9057-
fn into_v1(self) -> Result<Self::Output> {
9058-
Ok(match self {
9059-
Self::Null => crate::v1::RequestId::Null,
9060-
Self::Number(value) => crate::v1::RequestId::Number(value.into_v1()?),
9061-
Self::Str(value) => crate::v1::RequestId::Str(value.into_v1()?),
9062-
})
9063-
}
9064-
}
9065-
9066-
impl IntoV2 for crate::v1::RequestId {
9067-
type Output = super::RequestId;
9068-
9069-
fn into_v2(self) -> Result<Self::Output> {
9070-
Ok(match self {
9071-
Self::Null => super::RequestId::Null,
9072-
Self::Number(value) => super::RequestId::Number(value.into_v2()?),
9073-
Self::Str(value) => super::RequestId::Str(value.into_v2()?),
9074-
})
9075-
}
9076-
}
9077-
90789073
#[cfg(test)]
90799074
mod tests {
90809075
use super::*;

src/v2/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ mod nes;
2323
mod plan;
2424
#[cfg(feature = "unstable_cancel_request")]
2525
mod protocol_level;
26-
mod rpc;
2726
mod tool_call;
2827

28+
pub use crate::rpc::{JsonRpcMessage, Notification, Request, RequestId};
2929
pub use agent::*;
3030
pub use client::*;
3131
pub use content::*;
@@ -39,10 +39,11 @@ pub use nes::*;
3939
pub use plan::*;
4040
#[cfg(feature = "unstable_cancel_request")]
4141
pub use protocol_level::*;
42-
pub use rpc::*;
4342
pub use serde_json::value::RawValue;
4443
pub use tool_call::*;
4544

45+
pub type Response<Result> = crate::rpc::Response<Result, Error>;
46+
4647
use schemars::JsonSchema;
4748
use serde::{Deserialize, Serialize};
4849
use std::sync::Arc;

0 commit comments

Comments
 (0)