//! MCP transport implementations
//!
//! Provides different transport mechanisms for MCP communication:
//!
//! - **stdio**: Standard input/output transport (default feature)
//! - **inprocess**: In-memory channel transport for embedded/server-thread use
//! - **http**: HTTP Streamable transport per MCP spec (optional feature)
//!
//! ## Transport Trait
//!
//! The [`Transport`] trait defines the interface for bidirectional MCP communication.
//! See [`traits`] module for details.
//!
//! ## STDIO Transport
//!
//! The stdio transport is enabled by default with the `stdio` feature flag.
//! It implements JSON-RPC over stdin/stdout, commonly used for CLI tools and
//! local MCP servers.
//!
//! ## HTTP Streamable Transport
//!
//! The HTTP transport is enabled with the `http` feature flag. It implements
//! the MCP Streamable HTTP specification using the Rama framework.
//!
//! Unlike stdio, HTTP transport does NOT implement the `Transport` trait because
//! HTTP has a request/response model with multiple concurrent connections per session,
//! which doesn't map to the streaming model.
//!
//! See the [`http`] module documentation for usage examples.

pub mod inprocess;
pub mod traits;

#[cfg(feature = "stdio")]
pub mod stdio;

#[cfg(feature = "http")]
pub mod http;

// Re-export common types
pub use inprocess::InProcessTransport;
pub use traits::{IncomingMessage, JsonRpcNotification, Transport, TransportError};

#[cfg(feature = "stdio")]
pub use stdio::StdioTransport;

#[cfg(feature = "http")]
pub use http::{HttpTransport, HttpTransportConfig, HttpTransportError};
