Skip to main content

ultrafast_mcp_core/protocol/
metadata.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4/// Implementation metadata
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct ImplementationMetadata {
7    /// Implementation name
8    pub name: String,
9    /// Implementation version
10    pub version: String,
11    /// Optional additional metadata
12    #[serde(flatten)]
13    pub additional: HashMap<String, serde_json::Value>,
14}
15
16/// Protocol metadata
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct ProtocolMetadata {
19    /// Protocol version
20    pub version: String,
21    /// Supported features
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub features: Option<Vec<String>>,
24    /// Optional additional metadata
25    #[serde(flatten)]
26    pub additional: HashMap<String, serde_json::Value>,
27}
28
29/// Request metadata
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct RequestMetadata {
32    /// Request ID for correlation
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub request_id: Option<String>,
35    /// Timestamp
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub timestamp: Option<String>,
38    /// User agent
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub user_agent: Option<String>,
41    /// Optional additional metadata
42    #[serde(flatten)]
43    pub additional: HashMap<String, serde_json::Value>,
44}
45
46/// Response metadata
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct ResponseMetadata {
49    /// Processing time in milliseconds
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub processing_time_ms: Option<u64>,
52    /// Server information
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub server: Option<ImplementationMetadata>,
55    /// Optional additional metadata
56    #[serde(flatten)]
57    pub additional: HashMap<String, serde_json::Value>,
58}