diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0cd2122a..0b505c91 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,11 +41,11 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Install Rust - uses: dtolnay/rust-toolchain@stable + - name: Install Rust fmt + run: rustup toolchain install nightly --component rustfmt - name: Check formatting - run: cargo fmt --all -- --check + run: cargo +nightly fmt --all -- --check clippy: name: Lint with Clippy diff --git a/Cargo.toml b/Cargo.toml index 34014a74..1faa043a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,5 @@ +cargo-features = ["edition2024"] + [workspace] members = ["crates/rmcp", "crates/rmcp-macros", "examples/*"] resolver = "2" @@ -12,7 +14,7 @@ version = "0.1.5" authors = ["4t145 "] license = "MIT/Apache-2.0" repository = "https://github.com/modelcontextprotocol/rust-sdk/" -description = "Rust SDK for the Model Context Protocol" +description = "Rust SDK for Model Context Protocol" keywords = ["mcp", "sdk", "tokio", "modelcontextprotocol"] homepage = "https://github.com/modelcontextprotocol/rust-sdk" categories = [ diff --git a/crates/rmcp-macros/Cargo.toml b/crates/rmcp-macros/Cargo.toml index 577c39c7..9a277ffe 100644 --- a/crates/rmcp-macros/Cargo.toml +++ b/crates/rmcp-macros/Cargo.toml @@ -1,11 +1,13 @@ +cargo-features = ["edition2024"] + [package] name = "rmcp-macros" -license.workspace = true -version.workspace = true -edition.workspace = true -repository.workspace = true -homepage.workspace = true -readme.workspace = true +license = { workspace = true } +version = { workspace = true } +edition = { workspace = true } +repository = { workspace = true } +homepage = { workspace = true } +readme = { workspace = true } description = "Rust SDK for Model Context Protocol macros library" documentation = "https://docs.rs/rmcp-macros" diff --git a/crates/rmcp/Cargo.toml b/crates/rmcp/Cargo.toml index 9903ee12..ed426a0f 100644 --- a/crates/rmcp/Cargo.toml +++ b/crates/rmcp/Cargo.toml @@ -1,11 +1,13 @@ +cargo-features = ["edition2024"] + [package] name = "rmcp" -license.workspace = true -version.workspace = true -edition.workspace = true -repository.workspace = true -homepage.workspace = true -readme.workspace = true +license = { workspace = true } +version = { workspace = true } +edition = { workspace = true } +repository = { workspace = true } +homepage = { workspace = true } +readme = { workspace = true } description = "Rust SDK for Model Context Protocol" documentation = "https://docs.rs/rmcp" diff --git a/crates/rmcp/src/handler/client.rs b/crates/rmcp/src/handler/client.rs index d0816e95..3443e635 100644 --- a/crates/rmcp/src/handler/client.rs +++ b/crates/rmcp/src/handler/client.rs @@ -1,6 +1,8 @@ -use crate::error::Error as McpError; -use crate::model::*; -use crate::service::{Peer, RequestContext, RoleClient, Service, ServiceRole}; +use crate::{ + error::Error as McpError, + model::*, + service::{Peer, RequestContext, RoleClient, Service, ServiceRole}, +}; impl Service for H { async fn handle_request( diff --git a/crates/rmcp/src/handler/server.rs b/crates/rmcp/src/handler/server.rs index 519e9472..1fa90dd8 100644 --- a/crates/rmcp/src/handler/server.rs +++ b/crates/rmcp/src/handler/server.rs @@ -1,6 +1,8 @@ -use crate::error::Error as McpError; -use crate::model::*; -use crate::service::{Peer, RequestContext, RoleServer, Service, ServiceRole}; +use crate::{ + error::Error as McpError, + model::*, + service::{Peer, RequestContext, RoleServer, Service, ServiceRole}, +}; mod resource; pub mod tool; diff --git a/crates/rmcp/src/lib.rs b/crates/rmcp/src/lib.rs index 277e475a..b01ef2cd 100644 --- a/crates/rmcp/src/lib.rs +++ b/crates/rmcp/src/lib.rs @@ -6,6 +6,10 @@ pub use error::Error; pub mod model; #[cfg(any(feature = "client", feature = "server"))] pub mod service; +#[cfg(feature = "client")] +pub use handler::client::ClientHandler; +#[cfg(feature = "server")] +pub use handler::server::ServerHandler; #[cfg(any(feature = "client", feature = "server"))] pub use service::{Peer, Service, ServiceError, ServiceExt}; #[cfg(feature = "client")] @@ -13,21 +17,15 @@ pub use service::{RoleClient, serve_client}; #[cfg(feature = "server")] pub use service::{RoleServer, serve_server}; -#[cfg(feature = "client")] -pub use handler::client::ClientHandler; -#[cfg(feature = "server")] -pub use handler::server::ServerHandler; - pub mod handler; pub mod transport; -#[cfg(all(feature = "macros", feature = "server"))] -pub use rmcp_macros::tool; - // re-export #[cfg(all(feature = "macros", feature = "server"))] pub use paste::paste; #[cfg(all(feature = "macros", feature = "server"))] +pub use rmcp_macros::tool; +#[cfg(all(feature = "macros", feature = "server"))] pub use schemars; #[cfg(feature = "macros")] pub use serde; diff --git a/crates/rmcp/src/model.rs b/crates/rmcp/src/model.rs index 0f145f23..50adc909 100644 --- a/crates/rmcp/src/model.rs +++ b/crates/rmcp/src/model.rs @@ -11,7 +11,6 @@ pub use capabilities::*; pub use content::*; pub use prompt::*; pub use resource::*; - use serde::{Deserialize, Serialize}; use serde_json::Value; pub use tool::*; @@ -964,9 +963,10 @@ impl From for ClientNotification { #[cfg(test)] mod tests { - use super::*; use serde_json::json; + use super::*; + #[test] fn test_notification_serde() { let raw = json!( { diff --git a/crates/rmcp/src/model/annotated.rs b/crates/rmcp/src/model/annotated.rs index 7a99d351..4401ae04 100644 --- a/crates/rmcp/src/model/annotated.rs +++ b/crates/rmcp/src/model/annotated.rs @@ -1,11 +1,12 @@ use std::ops::{Deref, DerefMut}; +use chrono::{DateTime, Utc}; +use serde::{Deserialize, Serialize}; + use super::{ RawContent, RawEmbeddedResource, RawImageContent, RawResource, RawResourceTemplate, RawTextContent, Role, }; -use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)] #[serde(rename_all = "camelCase")] diff --git a/crates/rmcp/src/model/capabilities.rs b/crates/rmcp/src/model/capabilities.rs index 397452f6..087e4058 100644 --- a/crates/rmcp/src/model/capabilities.rs +++ b/crates/rmcp/src/model/capabilities.rs @@ -1,8 +1,9 @@ -use super::JsonObject; +use std::{collections::BTreeMap, marker::PhantomData}; + use paste::paste; use serde::{Deserialize, Serialize}; -use std::collections::BTreeMap; -use std::marker::PhantomData; + +use super::JsonObject; pub type ExperimentalCapabilities = BTreeMap; #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)] diff --git a/crates/rmcp/src/model/content.rs b/crates/rmcp/src/model/content.rs index 49e79d85..15cf0507 100644 --- a/crates/rmcp/src/model/content.rs +++ b/crates/rmcp/src/model/content.rs @@ -1,11 +1,11 @@ //! Content sent around agents, extensions, and LLMs //! The various content types can be display to humans but also understood by models //! They include optional annotations used to help inform agent usage -use super::resource::ResourceContents; -use super::{AnnotateAble, Annotated}; use serde::{Deserialize, Serialize}; use serde_json::json; +use super::{AnnotateAble, Annotated, resource::ResourceContents}; + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RawTextContent { diff --git a/crates/rmcp/src/model/prompt.rs b/crates/rmcp/src/model/prompt.rs index ebcf363a..43973407 100644 --- a/crates/rmcp/src/model/prompt.rs +++ b/crates/rmcp/src/model/prompt.rs @@ -1,9 +1,12 @@ -use super::content::{EmbeddedResource, ImageContent}; -use super::resource::ResourceContents; -use super::{AnnotateAble, Annotations, RawEmbeddedResource, RawImageContent}; use base64::engine::{Engine, general_purpose::STANDARD as BASE64_STANDARD}; use serde::{Deserialize, Serialize}; +use super::{ + AnnotateAble, Annotations, RawEmbeddedResource, RawImageContent, + content::{EmbeddedResource, ImageContent}, + resource::ResourceContents, +}; + /// A prompt that can be used to generate text from a model #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] diff --git a/crates/rmcp/src/service.rs b/crates/rmcp/src/service.rs index 6888b514..e99ef587 100644 --- a/crates/rmcp/src/service.rs +++ b/crates/rmcp/src/service.rs @@ -1,10 +1,13 @@ -use crate::error::Error as McpError; -use crate::model::{ - CancelledNotification, CancelledNotificationParam, JsonRpcMessage, Message, RequestId, -}; -use crate::transport::IntoTransport; use futures::future::BoxFuture; use thiserror::Error; + +use crate::{ + error::Error as McpError, + model::{ + CancelledNotification, CancelledNotificationParam, JsonRpcMessage, Message, RequestId, + }, + transport::IntoTransport, +}; #[cfg(feature = "client")] mod client; #[cfg(feature = "client")] @@ -15,10 +18,9 @@ mod server; pub use server::*; #[cfg(feature = "tower")] mod tower; +use tokio_util::sync::CancellationToken; #[cfg(feature = "tower")] pub use tower::*; - -use tokio_util::sync::CancellationToken; use tracing::instrument; #[derive(Error, Debug)] #[non_exhaustive] @@ -189,11 +191,12 @@ impl> DynService for S { } } -use std::collections::HashMap; -use std::ops::Deref; -use std::sync::Arc; -use std::sync::atomic::AtomicU32; -use std::time::Duration; +use std::{ + collections::HashMap, + ops::Deref, + sync::{Arc, atomic::AtomicU32}, + time::Duration, +}; use tokio::sync::mpsc; diff --git a/crates/rmcp/src/service/client.rs b/crates/rmcp/src/service/client.rs index 5bbe7bcc..134b2ffb 100644 --- a/crates/rmcp/src/service/client.rs +++ b/crates/rmcp/src/service/client.rs @@ -1,3 +1,6 @@ +use futures::{SinkExt, StreamExt}; + +use super::*; use crate::model::{ CallToolRequest, CallToolRequestParam, CallToolResult, CancelledNotification, CancelledNotificationParam, ClientInfo, ClientMessage, ClientNotification, ClientRequest, @@ -12,9 +15,6 @@ use crate::model::{ UnsubscribeRequest, UnsubscribeRequestParam, }; -use super::*; -use futures::{SinkExt, StreamExt}; - #[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] pub struct RoleClient; diff --git a/crates/rmcp/src/service/server.rs b/crates/rmcp/src/service/server.rs index 754ba51f..41749ada 100644 --- a/crates/rmcp/src/service/server.rs +++ b/crates/rmcp/src/service/server.rs @@ -1,3 +1,6 @@ +use futures::{SinkExt, StreamExt}; + +use super::*; use crate::model::{ CancelledNotification, CancelledNotificationParam, ClientInfo, ClientNotification, ClientRequest, ClientResult, CreateMessageRequest, CreateMessageRequestParam, @@ -8,9 +11,6 @@ use crate::model::{ ServerResult, ToolListChangedNotification, }; -use super::*; -use futures::{SinkExt, StreamExt}; - #[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] pub struct RoleServer; diff --git a/crates/rmcp/src/transport/child_process.rs b/crates/rmcp/src/transport/child_process.rs index a052dc70..640d6414 100644 --- a/crates/rmcp/src/transport/child_process.rs +++ b/crates/rmcp/src/transport/child_process.rs @@ -4,9 +4,8 @@ use tokio::{ process::{ChildStdin, ChildStdout}, }; -use crate::service::{RxJsonRpcMessage, ServiceRole, TxJsonRpcMessage}; - use super::IntoTransport; +use crate::service::{RxJsonRpcMessage, ServiceRole, TxJsonRpcMessage}; pub(crate) fn child_process( mut child: tokio::process::Child, diff --git a/crates/rmcp/src/transport/io.rs b/crates/rmcp/src/transport/io.rs index 7695b2b3..ff38661d 100644 --- a/crates/rmcp/src/transport/io.rs +++ b/crates/rmcp/src/transport/io.rs @@ -4,16 +4,14 @@ use std::marker::PhantomData; use futures::{Sink, SinkExt, Stream, StreamExt}; use serde::{Serialize, de::DeserializeOwned}; use thiserror::Error; - use tokio::io::{AsyncRead, AsyncWrite}; use tokio_util::{ bytes::{Buf, BufMut, BytesMut}, codec::{Decoder, Encoder, FramedRead, FramedWrite}, }; -use crate::service::{RxJsonRpcMessage, ServiceRole, TxJsonRpcMessage}; - use super::IntoTransport; +use crate::service::{RxJsonRpcMessage, ServiceRole, TxJsonRpcMessage}; #[cfg(feature = "transport-io")] /// # StdIO Transport diff --git a/crates/rmcp/src/transport/sse.rs b/crates/rmcp/src/transport/sse.rs index 5a9da642..6854e370 100644 --- a/crates/rmcp/src/transport/sse.rs +++ b/crates/rmcp/src/transport/sse.rs @@ -1,13 +1,15 @@ //! reference: https://html.spec.whatwg.org/multipage/server-sent-events.html -use crate::model::{ClientJsonRpcMessage, ServerJsonRpcMessage}; +use std::{collections::VecDeque, sync::Arc, time::Duration}; + use futures::{FutureExt, Sink, Stream, StreamExt, future::BoxFuture, stream::BoxStream}; use reqwest::{ Client as HttpClient, IntoUrl, Url, header::{ACCEPT, HeaderValue}, }; use sse_stream::{Error as SseError, Sse, SseStream}; -use std::{collections::VecDeque, sync::Arc, time::Duration}; use thiserror::Error; + +use crate::model::{ClientJsonRpcMessage, ServerJsonRpcMessage}; const MIME_TYPE: &str = "text/event-stream"; const HEADER_LAST_EVENT_ID: &str = "Last-Event-ID"; diff --git a/crates/rmcp/src/transport/sse_server.rs b/crates/rmcp/src/transport/sse_server.rs index ef0b0309..e58626d9 100644 --- a/crates/rmcp/src/transport/sse_server.rs +++ b/crates/rmcp/src/transport/sse_server.rs @@ -1,8 +1,5 @@ -use crate::{ - RoleServer, Service, - model::ClientJsonRpcMessage, - service::{RxJsonRpcMessage, TxJsonRpcMessage}, -}; +use std::{collections::HashMap, net::SocketAddr, sync::Arc}; + use axum::{ Json, Router, extract::{Query, State}, @@ -14,13 +11,16 @@ use axum::{ routing::{get, post}, }; use futures::{Sink, SinkExt, Stream, StreamExt}; -use std::{collections::HashMap, net::SocketAddr}; +use tokio::io; use tokio_stream::wrappers::ReceiverStream; use tokio_util::sync::{CancellationToken, PollSender}; use tracing::Instrument; -use std::sync::Arc; -use tokio::io; +use crate::{ + RoleServer, Service, + model::ClientJsonRpcMessage, + service::{RxJsonRpcMessage, TxJsonRpcMessage}, +}; type SessionId = Arc; type TxStore = Arc>>>; diff --git a/crates/rmcp/tests/test_tool_macros.rs b/crates/rmcp/tests/test_tool_macros.rs index 76228677..8bb15e0f 100644 --- a/crates/rmcp/tests/test_tool_macros.rs +++ b/crates/rmcp/tests/test_tool_macros.rs @@ -1,6 +1,5 @@ use rmcp::{ServerHandler, handler::server::tool::ToolCallContext, tool}; use schemars::JsonSchema; - use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, JsonSchema)] diff --git a/examples/clients/Cargo.toml b/examples/clients/Cargo.toml index 8ea930c5..d9c5640f 100644 --- a/examples/clients/Cargo.toml +++ b/examples/clients/Cargo.toml @@ -1,3 +1,5 @@ +cargo-features = ["edition2024"] + [package] name = "mcp-client-examples" version = "0.1.5" diff --git a/examples/clients/src/collection.rs b/examples/clients/src/collection.rs index 6133b81d..f474ea85 100644 --- a/examples/clients/src/collection.rs +++ b/examples/clients/src/collection.rs @@ -1,12 +1,9 @@ use std::collections::HashMap; use anyhow::Result; -use rmcp::service::ServiceExt; -use rmcp::{model::CallToolRequestParam, transport::TokioChildProcess}; - +use rmcp::{model::CallToolRequestParam, service::ServiceExt, transport::TokioChildProcess}; use tokio::process::Command; -use tracing_subscriber::layer::SubscriberExt; -use tracing_subscriber::util::SubscriberInitExt; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] async fn main() -> Result<()> { diff --git a/examples/clients/src/everything_stdio.rs b/examples/clients/src/everything_stdio.rs index 161b8ad0..091e9053 100644 --- a/examples/clients/src/everything_stdio.rs +++ b/examples/clients/src/everything_stdio.rs @@ -5,10 +5,8 @@ use rmcp::{ object, transport::TokioChildProcess, }; - use tokio::process::Command; -use tracing_subscriber::layer::SubscriberExt; -use tracing_subscriber::util::SubscriberInitExt; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] async fn main() -> Result<()> { diff --git a/examples/clients/src/sse.rs b/examples/clients/src/sse.rs index 35db86c7..a4f3df39 100644 --- a/examples/clients/src/sse.rs +++ b/examples/clients/src/sse.rs @@ -1,9 +1,10 @@ use anyhow::Result; -use rmcp::model::{ClientCapabilities, ClientInfo, Implementation}; -use rmcp::{ServiceExt, model::CallToolRequestParam, transport::SseTransport}; - -use tracing_subscriber::layer::SubscriberExt; -use tracing_subscriber::util::SubscriberInitExt; +use rmcp::{ + ServiceExt, + model::{CallToolRequestParam, ClientCapabilities, ClientInfo, Implementation}, + transport::SseTransport, +}; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] async fn main() -> Result<()> { diff --git a/examples/clients/src/std_io.rs b/examples/clients/src/std_io.rs index 3c046935..98741891 100644 --- a/examples/clients/src/std_io.rs +++ b/examples/clients/src/std_io.rs @@ -1,9 +1,7 @@ use anyhow::Result; use rmcp::{model::CallToolRequestParam, service::ServiceExt, transport::TokioChildProcess}; - use tokio::process::Command; -use tracing_subscriber::layer::SubscriberExt; -use tracing_subscriber::util::SubscriberInitExt; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] async fn main() -> Result<()> { diff --git a/examples/rig-integration/Cargo.toml b/examples/rig-integration/Cargo.toml index c80fb3cd..9c21eb7c 100644 --- a/examples/rig-integration/Cargo.toml +++ b/examples/rig-integration/Cargo.toml @@ -1,15 +1,17 @@ +cargo-features = ["edition2024"] + [package] name = "rig-integration" -edition.workspace = true -version.workspace = true -authors.workspace = true -license.workspace = true -repository.workspace = true -description.workspace = true -keywords.workspace = true -homepage.workspace = true -categories.workspace = true -readme.workspace = true +edition = { workspace = true } +version = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +repository = { workspace = true } +description = { workspace = true } +keywords = { workspace = true } +homepage = { workspace = true } +categories = { workspace = true } +readme = { workspace = true } [dependencies] rig-core = "0.10.0" diff --git a/examples/servers/Cargo.toml b/examples/servers/Cargo.toml index 25008b7b..4973871b 100644 --- a/examples/servers/Cargo.toml +++ b/examples/servers/Cargo.toml @@ -1,3 +1,5 @@ +cargo-features = ["edition2024"] + [package] name = "mcp-server-examples" version = "0.1.5" diff --git a/examples/servers/src/axum.rs b/examples/servers/src/axum.rs index 4e76db68..e1146265 100644 --- a/examples/servers/src/axum.rs +++ b/examples/servers/src/axum.rs @@ -1,7 +1,9 @@ use rmcp::transport::sse_server::SseServer; -use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; - -use tracing_subscriber::{self}; +use tracing_subscriber::{ + layer::SubscriberExt, + util::SubscriberInitExt, + {self}, +}; mod common; use common::counter::Counter; diff --git a/examples/servers/src/axum_router.rs b/examples/servers/src/axum_router.rs index d4813b85..fa456935 100644 --- a/examples/servers/src/axum_router.rs +++ b/examples/servers/src/axum_router.rs @@ -1,7 +1,9 @@ use rmcp::transport::sse_server::{SseServer, SseServerConfig}; -use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; - -use tracing_subscriber::{self}; +use tracing_subscriber::{ + layer::SubscriberExt, + util::SubscriberInitExt, + {self}, +}; mod common; use common::counter::Counter; diff --git a/examples/servers/src/common/counter.rs b/examples/servers/src/common/counter.rs index 2e7a8b08..a47be63a 100644 --- a/examples/servers/src/common/counter.rs +++ b/examples/servers/src/common/counter.rs @@ -4,7 +4,6 @@ use rmcp::{ Error as McpError, RoleServer, ServerHandler, const_string, model::*, schemars, service::RequestContext, tool, }; - use serde_json::json; use tokio::sync::Mutex; diff --git a/examples/servers/src/std_io.rs b/examples/servers/src/std_io.rs index 9e5561f4..9339ab86 100644 --- a/examples/servers/src/std_io.rs +++ b/examples/servers/src/std_io.rs @@ -1,7 +1,6 @@ use anyhow::Result; use common::counter::Counter; use rmcp::{ServiceExt, transport::stdio}; - use tracing_subscriber::{self, EnvFilter}; mod common; /// npx @modelcontextprotocol/inspector cargo run -p mcp-server-examples --example std_io diff --git a/examples/transport/Cargo.toml b/examples/transport/Cargo.toml index 1bcd31f8..5c9dc9c0 100644 --- a/examples/transport/Cargo.toml +++ b/examples/transport/Cargo.toml @@ -1,15 +1,17 @@ +cargo-features = ["edition2024"] + [package] name = "transport" -edition.workspace = true -version.workspace = true -authors.workspace = true -license.workspace = true -repository.workspace = true -description.workspace = true -keywords.workspace = true -homepage.workspace = true -categories.workspace = true -readme.workspace = true +edition = { workspace = true } +version = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +repository = { workspace = true } +description = { workspace = true } +keywords = { workspace = true } +homepage = { workspace = true } +categories = { workspace = true } +readme = { workspace = true } [package.metadata.docs.rs] all-features = true diff --git a/examples/transport/src/unix_socket.rs b/examples/transport/src/unix_socket.rs index 949b697c..875ed9bb 100644 --- a/examples/transport/src/unix_socket.rs +++ b/examples/transport/src/unix_socket.rs @@ -1,6 +1,7 @@ +use std::fs; + use common::calculator::Calculator; use rmcp::{serve_client, serve_server}; -use std::fs; use tokio::net::{UnixListener, UnixStream}; mod common; diff --git a/examples/transport/src/websocket.rs b/examples/transport/src/websocket.rs index b493a286..0d0fec72 100644 --- a/examples/transport/src/websocket.rs +++ b/examples/transport/src/websocket.rs @@ -2,7 +2,6 @@ use std::marker::PhantomData; use common::calculator::Calculator; use futures::{Sink, Stream}; - use rmcp::{ RoleClient, RoleServer, ServiceExt, service::{RunningService, RxJsonRpcMessage, ServiceRole, TxJsonRpcMessage}, diff --git a/examples/wasi/Cargo.toml b/examples/wasi/Cargo.toml index d7fac83d..4daa1a3e 100644 --- a/examples/wasi/Cargo.toml +++ b/examples/wasi/Cargo.toml @@ -1,15 +1,17 @@ +cargo-features = ["edition2024"] + [package] name = "wasi" -edition.workspace = true -version.workspace = true -authors.workspace = true -license.workspace = true -repository.workspace = true -description.workspace = true -keywords.workspace = true -homepage.workspace = true -categories.workspace = true -readme.workspace = true +edition = { workspace = true } +version = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +repository = { workspace = true } +description = { workspace = true } +keywords = { workspace = true } +homepage = { workspace = true } +categories = { workspace = true } +readme = { workspace = true } [lib] crate-type = ["cdylib"] diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 00000000..1819716a --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,6 @@ +newline_style = "Unix" +unstable_features = true # Cargo fmt now needs to be called with `cargo +nightly fmt` +group_imports = "StdExternalCrate" # Create 3 groups: std, external crates, and self. +imports_granularity = "Crate" # Merge imports from the same crate into a single use statement +style_edition = "2024" +max_width = 100 \ No newline at end of file