smcp_computer/desktop/
model.rs1use serde::{Deserialize, Serialize};
11use std::collections::HashMap;
12
13pub use crate::mcp_clients::model::{ReadResourceResult, Resource, TextResourceContents};
15
16pub type ServerName = String;
18
19#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
21pub struct ToolCallRecord {
22 pub server: ServerName,
24 pub tool: String,
26 pub timestamp: i64,
28 #[serde(skip_serializing_if = "HashMap::is_empty")]
30 pub metadata: HashMap<String, serde_json::Value>,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
35pub struct WindowInfo {
36 pub server_name: ServerName,
38 pub resource: Resource,
40 pub read_result: ReadResourceResult,
42}
43
44impl WindowInfo {
45 pub fn new(
47 server_name: ServerName,
48 resource: Resource,
49 read_result: ReadResourceResult,
50 ) -> Self {
51 Self {
52 server_name,
53 resource,
54 read_result,
55 }
56 }
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 #[test]
64 fn test_window_info() {
65 let resource = Resource {
66 uri: "window://test.mcp.com/window1".to_string(),
67 name: "Test Window".to_string(),
68 description: Some("Test window".to_string()),
69 mime_type: None,
70 };
71
72 let read_result = ReadResourceResult {
73 contents: vec![TextResourceContents {
74 uri: "window://test.mcp.com/window1".to_string(),
75 text: "Test content".to_string(),
76 mime_type: None,
77 }],
78 };
79
80 let window_info = WindowInfo::new("test_server".to_string(), resource, read_result);
81
82 assert_eq!(window_info.server_name, "test_server");
83 assert_eq!(window_info.resource.name, "Test Window");
84 assert_eq!(window_info.read_result.contents.len(), 1);
85 }
86
87 #[test]
88 fn test_tool_call_record() {
89 let record = ToolCallRecord {
90 server: "test_server".to_string(),
91 tool: "test_tool".to_string(),
92 timestamp: 1234567890,
93 metadata: HashMap::new(),
94 };
95
96 assert_eq!(record.server, "test_server");
97 assert_eq!(record.tool, "test_tool");
98 assert_eq!(record.timestamp, 1234567890);
99 }
100}