smcp_computer/desktop/
model.rs1use serde::{Deserialize, Serialize};
11use std::collections::HashMap;
12
13pub use crate::mcp_clients::model::{ReadResourceResult, Resource, ResourceContents};
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 = crate::mcp_clients::model::make_resource(
66 "window://test.mcp.com/window1",
67 "Test Window",
68 Some("Test window".to_string()),
69 None,
70 );
71
72 let read_result = ReadResourceResult {
73 contents: vec![ResourceContents::text(
74 "Test content",
75 "window://test.mcp.com/window1",
76 )],
77 };
78
79 let window_info = WindowInfo::new("test_server".to_string(), resource, read_result);
80
81 assert_eq!(window_info.server_name, "test_server");
82 assert_eq!(window_info.resource.name, "Test Window");
83 assert_eq!(window_info.read_result.contents.len(), 1);
84 }
85
86 #[test]
87 fn test_tool_call_record() {
88 let record = ToolCallRecord {
89 server: "test_server".to_string(),
90 tool: "test_tool".to_string(),
91 timestamp: 1234567890,
92 metadata: HashMap::new(),
93 };
94
95 assert_eq!(record.server, "test_server");
96 assert_eq!(record.tool, "test_tool");
97 assert_eq!(record.timestamp, 1234567890);
98 }
99}