Skip to content

Commit a6bb83b

Browse files
authored
Merge pull request #120 from lsytj0413/replace-fxhash-by-rustc_hash
opt: replace unmaintained fxhash by rustc_hash crate
2 parents 52e40b0 + c58f4e7 commit a6bb83b

8 files changed

Lines changed: 36 additions & 21 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ hyper = "1.0"
5353
boxfnonce = "0.1.1"
5454
chrono = "0.4"
5555
futures = "0.3.31"
56-
fxhash = "0.2.1"
56+
rustc-hash = "2.1.1"
5757
jsonrpcmsg = "0.1.2"
5858

5959
# Testing

src/sacp-conductor/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ tracing-appender.workspace = true
4040
tracing-subscriber.workspace = true
4141
uuid.workspace = true
4242
async-stream = "0.3.6"
43-
fxhash.workspace = true
43+
rustc-hash.workspace = true
4444
futures-concurrency = "7.6.3"
4545

4646
[dev-dependencies]

src/sacp-conductor/src/conductor/mcp_bridge/http.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use axum::{
88
use futures::{SinkExt, StreamExt as _, channel::mpsc, future::Either, stream::Stream};
99
use futures_concurrency::future::FutureExt as _;
1010
use futures_concurrency::stream::StreamExt as _;
11-
use fxhash::FxHashMap;
11+
use rustc_hash::FxHashMap;
1212
use sacp::{BoxFuture, Channel, ConnectTo, jsonrpcmsg::Message, role::mcp};
1313
use std::{collections::VecDeque, pin::pin, sync::Arc};
1414
use tokio::net::TcpListener;

src/sacp-conductor/src/trace.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ use std::io::{BufWriter, Write};
88
use std::path::Path;
99
use std::time::Instant;
1010

11-
use fxhash::FxHashMap;
11+
use rustc_hash::FxHashMap;
1212
use sacp::schema::{McpOverAcpMessage, SuccessorMessage};
13-
use sacp::{jsonrpcmsg, DynConnectTo, JsonRpcMessage, Role, UntypedMessage};
13+
use sacp::{DynConnectTo, JsonRpcMessage, Role, UntypedMessage, jsonrpcmsg};
1414
use serde::{Deserialize, Serialize};
1515

1616
use crate::ComponentIndex;

src/sacp/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ anyhow.workspace = true
1515
boxfnonce.workspace = true
1616
futures.workspace = true
1717
futures-concurrency = "7.6.3"
18-
fxhash.workspace = true
18+
rustc-hash.workspace = true
1919
jsonrpcmsg.workspace = true
2020
rmcp = { workspace = true, features = ["server"] }
2121
schemars.workspace = true

src/sacp/src/jsonrpc/incoming_actor.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use futures::StreamExt as _;
55
use futures::channel::mpsc;
66
use futures::channel::oneshot;
77
use futures_concurrency::stream::StreamExt as _;
8-
use fxhash::FxHashMap;
8+
use rustc_hash::FxHashMap;
99
use uuid::Uuid;
1010

1111
use crate::Dispatch;
@@ -150,8 +150,7 @@ pub(super) async fn incoming_protocol_actor<Counterpart: Role>(
150150
let id_json = serde_json::to_value(&id).unwrap();
151151
if let Some(pending_reply) = pending_replies.remove(&id_json) {
152152
// Route the response through the handler chain
153-
let dispatch =
154-
dispatch_from_response(id, pending_reply, result);
153+
let dispatch = dispatch_from_response(id, pending_reply, result);
155154
dispatch_dispatch(
156155
counterpart.clone(),
157156
connection,

src/sacp/src/mcp_server/active_session.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use futures::channel::mpsc;
22
use futures::{SinkExt, StreamExt};
3-
use fxhash::FxHashMap;
3+
use rustc_hash::FxHashMap;
44

55
use crate::mcp_server::{McpConnectionTo, McpServerConnect};
66
use crate::role;
@@ -10,8 +10,8 @@ use crate::schema::{
1010
};
1111
use crate::util::MatchDispatchFrom;
1212
use crate::{
13-
Agent, Channel, ConnectionTo, HandleDispatchFrom, Handled, Dispatch, Responder, Role, ConnectTo,
14-
UntypedMessage,
13+
Agent, Channel, ConnectTo, ConnectionTo, Dispatch, HandleDispatchFrom, Handled, Responder,
14+
Role, UntypedMessage,
1515
};
1616
use std::sync::Arc;
1717

@@ -72,7 +72,8 @@ where
7272
let connection_id = connection_id.clone();
7373
let acp_connection = acp_connection.clone();
7474

75-
role::mcp::Client.builder()
75+
role::mcp::Client
76+
.builder()
7677
.on_receive_dispatch(
7778
async move |message: Dispatch, _mcp_connection| {
7879
// Wrap the message in McpOverAcp{Request,Notification} and forward to successor

src/sacp/src/mcp_server/builder.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use futures::{
88
future::{BoxFuture, Either},
99
};
1010
use futures_concurrency::future::TryJoin;
11-
use fxhash::FxHashMap;
11+
use rustc_hash::FxHashMap;
1212

1313
/// Tracks which tools are enabled.
1414
///
@@ -48,7 +48,7 @@ use tokio_util::compat::{TokioAsyncReadCompatExt, TokioAsyncWriteCompatExt};
4848

4949
use super::{McpConnectionTo, McpTool};
5050
use crate::{
51-
ByteStreams, DynConnectTo, ConnectTo,
51+
ByteStreams, ConnectTo, DynConnectTo,
5252
jsonrpc::run::{ChainRun, NullRun, RunWithConnectionTo},
5353
mcp_server::{
5454
McpServer, McpServerConnect,
@@ -350,7 +350,10 @@ impl<'scope, Counterpart: Role> McpServerConnect<Counterpart> for McpServerBuilt
350350
self.name.clone()
351351
}
352352

353-
fn connect(&self, mcp_connection: McpConnectionTo<Counterpart>) -> DynConnectTo<role::mcp::Client> {
353+
fn connect(
354+
&self,
355+
mcp_connection: McpConnectionTo<Counterpart>,
356+
) -> DynConnectTo<role::mcp::Client> {
354357
DynConnectTo::new(McpServerConnection {
355358
data: self.data.clone(),
356359
mcp_connection,
@@ -365,7 +368,10 @@ pub(crate) struct McpServerConnection<Counterpart: Role> {
365368
}
366369

367370
impl<Counterpart: Role> ConnectTo<role::mcp::Client> for McpServerConnection<Counterpart> {
368-
async fn connect_to(self, client: impl ConnectTo<role::mcp::Server>) -> Result<(), crate::Error> {
371+
async fn connect_to(
372+
self,
373+
client: impl ConnectTo<role::mcp::Server>,
374+
) -> Result<(), crate::Error> {
369375
// Create tokio byte streams that rmcp expects
370376
let (mcp_server_stream, mcp_client_stream) = tokio::io::duplex(8192);
371377
let (mcp_server_read, mcp_server_write) = tokio::io::split(mcp_server_stream);
@@ -375,8 +381,11 @@ impl<Counterpart: Role> ConnectTo<role::mcp::Client> for McpServerConnection<Cou
375381
// Connect byte_streams to the provided client
376382
let byte_streams =
377383
ByteStreams::new(mcp_client_write.compat_write(), mcp_client_read.compat());
378-
let _ =
379-
<ByteStreams<_, _> as ConnectTo<role::mcp::Client>>::connect_to(byte_streams, client).await;
384+
let _ = <ByteStreams<_, _> as ConnectTo<role::mcp::Client>>::connect_to(
385+
byte_streams,
386+
client,
387+
)
388+
.await;
380389
Ok(())
381390
};
382391

@@ -427,7 +436,9 @@ impl<R: Role> ServerHandler for McpServerConnection<R> {
427436
// Execute the user's tool, unless cancellation occurs
428437
let has_structured_output = registered.has_structured_output;
429438
match futures::future::select(
430-
registered.tool.call_tool(serde_value, self.mcp_connection.clone()),
439+
registered
440+
.tool
441+
.call_tool(serde_value, self.mcp_connection.clone()),
431442
pin!(context.ct.cancelled()),
432443
)
433444
.await
@@ -572,7 +583,11 @@ where
572583
self.description.clone()
573584
}
574585

575-
async fn call_tool(&self, params: P, mcp_connection: McpConnectionTo<R>) -> Result<Ret, crate::Error> {
586+
async fn call_tool(
587+
&self,
588+
params: P,
589+
mcp_connection: McpConnectionTo<R>,
590+
) -> Result<Ret, crate::Error> {
576591
let (result_tx, result_rx) = oneshot::channel();
577592

578593
self.call_tx

0 commit comments

Comments
 (0)