pub trait SessionView: Send + Sync {
// Required methods
fn session_id(&self) -> &str;
fn get_state<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Value>, String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn set_state<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
value: Value,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn get_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Value>, String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn set_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
value: Value,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
}
Expand description
Minimal session interface for middleware access
This trait provides a read-write view of session state for middleware without exposing the full SessionContext implementation details.
§Silent Write Failures
IMPORTANT: set_state
and set_metadata
currently always return Ok(())
.
The underlying storage may log errors but does not propagate them to middleware.
This design prevents middleware from blocking request processing due to storage issues.
§Example
use turul_mcp_session_storage::SessionView;
use serde_json::json;
async fn middleware_example(session: &dyn SessionView) {
// Read session state
if let Ok(Some(counter)) = session.get_state("request_count").await {
println!("Session {}: {} requests", session.session_id(), counter);
}
// Write session state
let _ = session.set_state("last_access", json!("2025-10-05")).await;
}
Required Methods§
Sourcefn session_id(&self) -> &str
fn session_id(&self) -> &str
Get the unique session identifier
§Returns
The session ID as a string reference. Typically a UUID v7 for temporal ordering.
Sourcefn get_state<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Value>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_state<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Value>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Sourcefn set_state<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
value: Value,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_state<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
value: Value,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Set a state value in the session
§Parameters
key
: The state key to setvalue
: The JSON value to store
§Returns
Ok(())
: State was successfully set (or error was logged silently)Err(error)
: Storage error occurred
Note: Current implementation always returns Ok(())
even if underlying
storage fails. Errors are logged but not propagated.
Sourcefn get_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Value>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Value>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Get a metadata value from the session
Metadata is typically set during session initialization and provides context about the session (client version, capabilities, etc.).
§Parameters
key
: The metadata key to retrieve
§Returns
Ok(Some(value))
: Metadata value existsOk(None)
: Metadata key not foundErr(error)
: Storage error occurred
Sourcefn set_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
value: Value,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
value: Value,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Set a metadata value in the session
§Parameters
key
: The metadata key to setvalue
: The JSON value to store
§Returns
Ok(())
: Metadata was successfully set (or error was logged silently)Err(error)
: Storage error occurred
Note: Current implementation always returns Ok(())
even if underlying
storage fails. Errors are logged but not propagated.