fix: gate optional dependencies behind feature flags (#672)
This commit is contained in:
parent
98eef440c6
commit
91e208efb7
4 changed files with 23 additions and 4 deletions
|
|
@ -24,7 +24,9 @@ pub use service::{RoleClient, serve_client};
|
|||
pub use service::{RoleServer, serve_server};
|
||||
|
||||
pub mod handler;
|
||||
#[cfg(feature = "server")]
|
||||
pub mod task_manager;
|
||||
#[cfg(any(feature = "client", feature = "server"))]
|
||||
pub mod transport;
|
||||
|
||||
// re-export
|
||||
|
|
@ -32,7 +34,7 @@ pub mod transport;
|
|||
pub use pastey::paste;
|
||||
#[cfg(all(feature = "macros", feature = "server"))]
|
||||
pub use rmcp_macros::*;
|
||||
#[cfg(any(feature = "macros", feature = "server"))]
|
||||
#[cfg(any(feature = "server", feature = "schemars"))]
|
||||
pub use schemars;
|
||||
#[cfg(feature = "macros")]
|
||||
pub use serde;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
use std::{collections::BTreeMap, marker::PhantomData};
|
||||
use std::collections::BTreeMap;
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
use std::marker::PhantomData;
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
use pastey::paste;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
|
@ -300,6 +303,7 @@ pub struct ServerCapabilities {
|
|||
pub tasks: Option<TasksCapability>,
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
macro_rules! builder {
|
||||
($Target: ident {$($f: ident: $T: ty),* $(,)?}) => {
|
||||
paste! {
|
||||
|
|
@ -405,6 +409,7 @@ macro_rules! builder {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
builder! {
|
||||
ServerCapabilities {
|
||||
experimental: ExperimentalCapabilities,
|
||||
|
|
@ -418,6 +423,7 @@ builder! {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
impl<
|
||||
const E: bool,
|
||||
const EXT: bool,
|
||||
|
|
@ -436,6 +442,7 @@ impl<
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
impl<
|
||||
const E: bool,
|
||||
const EXT: bool,
|
||||
|
|
@ -454,6 +461,7 @@ impl<
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
impl<
|
||||
const E: bool,
|
||||
const EXT: bool,
|
||||
|
|
@ -479,6 +487,7 @@ impl<
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
builder! {
|
||||
ClientCapabilities{
|
||||
experimental: ExperimentalCapabilities,
|
||||
|
|
@ -490,6 +499,7 @@ builder! {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
impl<const E: bool, const EXT: bool, const S: bool, const EL: bool, const TASKS: bool>
|
||||
ClientCapabilitiesBuilder<ClientCapabilitiesBuilderState<E, EXT, true, S, EL, TASKS>>
|
||||
{
|
||||
|
|
@ -501,6 +511,7 @@ impl<const E: bool, const EXT: bool, const S: bool, const EL: bool, const TASKS:
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
impl<const E: bool, const EXT: bool, const R: bool, const EL: bool, const TASKS: bool>
|
||||
ClientCapabilitiesBuilder<ClientCapabilitiesBuilderState<E, EXT, R, true, EL, TASKS>>
|
||||
{
|
||||
|
|
@ -521,7 +532,7 @@ impl<const E: bool, const EXT: bool, const R: bool, const EL: bool, const TASKS:
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "elicitation")]
|
||||
#[cfg(all(feature = "elicitation", any(feature = "server", feature = "macros")))]
|
||||
impl<const E: bool, const EXT: bool, const R: bool, const S: bool, const TASKS: bool>
|
||||
ClientCapabilitiesBuilder<ClientCapabilitiesBuilderState<E, EXT, R, S, true, TASKS>>
|
||||
{
|
||||
|
|
@ -539,6 +550,7 @@ impl<const E: bool, const EXT: bool, const R: bool, const S: bool, const TASKS:
|
|||
}
|
||||
|
||||
#[cfg(test)]
|
||||
#[cfg(any(feature = "server", feature = "macros"))]
|
||||
mod test {
|
||||
use super::*;
|
||||
#[test]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use std::{borrow::Cow, sync::Arc};
|
||||
|
||||
#[cfg(feature = "server")]
|
||||
use schemars::JsonSchema;
|
||||
/// Tools represent a routine that a server can execute
|
||||
/// Tool calls represent requests from the client to execute one
|
||||
|
|
@ -240,6 +241,7 @@ impl Tool {
|
|||
/// # Panics
|
||||
///
|
||||
/// Panics if the generated schema does not have root type "object" as required by MCP specification.
|
||||
#[cfg(feature = "server")]
|
||||
pub fn with_output_schema<T: JsonSchema + 'static>(mut self) -> Self {
|
||||
let schema = crate::handler::server::tool::schema_for_output::<T>()
|
||||
.unwrap_or_else(|e| panic!("Invalid output schema for tool '{}': {}", self.name, e));
|
||||
|
|
@ -248,6 +250,7 @@ impl Tool {
|
|||
}
|
||||
|
||||
/// Set the input schema using a type that implements JsonSchema
|
||||
#[cfg(feature = "server")]
|
||||
pub fn with_input_schema<T: JsonSchema + 'static>(mut self) -> Self {
|
||||
self.input_schema = crate::handler::server::tool::schema_for_type::<T>();
|
||||
self
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
use futures::{FutureExt, future::BoxFuture};
|
||||
use thiserror::Error;
|
||||
|
||||
#[cfg(feature = "server")]
|
||||
use crate::model::ServerJsonRpcMessage;
|
||||
use crate::{
|
||||
error::ErrorData as McpError,
|
||||
model::{
|
||||
CancelledNotification, CancelledNotificationParam, Extensions, GetExtensions, GetMeta,
|
||||
JsonRpcError, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse, Meta,
|
||||
NumberOrString, ProgressToken, RequestId, ServerJsonRpcMessage,
|
||||
NumberOrString, ProgressToken, RequestId,
|
||||
},
|
||||
transport::{DynamicTransportError, IntoTransport, Transport},
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue