composio_sdk/models/
cli.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
7#[serde(rename_all = "snake_case")]
8pub enum CliSessionStatus {
9 Pending,
11 Linked,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
17pub struct CliLinkedAccount {
18 pub id: String,
20 pub email: String,
22 pub name: String,
24}
25
26#[derive(Debug, Clone, Serialize, PartialEq, Eq)]
28pub struct CliGetSessionParams {
29 pub id: String,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
35pub struct CliCreateSessionResponse {
36 pub id: String,
38 pub code: String,
40 #[serde(rename = "expiresAt", alias = "expires_at")]
42 pub expires_at: String,
43 pub status: CliSessionStatus,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
49pub struct CliGetSessionResponse {
50 pub id: String,
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub account: Option<CliLinkedAccount>,
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub api_key: Option<String>,
58 pub code: String,
60 #[serde(rename = "expiresAt", alias = "expires_at")]
62 pub expires_at: String,
63 pub status: CliSessionStatus,
65}
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70
71 #[test]
72 fn test_cli_get_session_params_serialization() {
73 let params = CliGetSessionParams {
74 id: "ABC123".to_string(),
75 };
76
77 let value = serde_json::to_value(¶ms).unwrap();
78 assert_eq!(value["id"], "ABC123");
79 }
80
81 #[test]
82 fn test_cli_create_session_response_deserialization_with_expires_alias() {
83 let payload = r#"{
84 "id": "2f3f9f6b-7d13-4d8e-9a2f-b5ebbd8b1832",
85 "code": "ABC123",
86 "expiresAt": "2026-01-01T00:00:00.000Z",
87 "status": "pending"
88 }"#;
89
90 let response: CliCreateSessionResponse = serde_json::from_str(payload).unwrap();
91 assert_eq!(response.code, "ABC123");
92 assert_eq!(response.status, CliSessionStatus::Pending);
93 assert_eq!(response.expires_at, "2026-01-01T00:00:00.000Z");
94 }
95
96 #[test]
97 fn test_cli_get_session_response_deserialization_with_linked_account() {
98 let payload = r#"{
99 "id": "2f3f9f6b-7d13-4d8e-9a2f-b5ebbd8b1832",
100 "code": "ABC123",
101 "expiresAt": "2026-01-01T00:00:00.000Z",
102 "status": "linked",
103 "api_key": "cmp_test_key",
104 "account": {
105 "id": "user_123",
106 "email": "demo@example.com",
107 "name": "Demo User"
108 }
109 }"#;
110
111 let response: CliGetSessionResponse = serde_json::from_str(payload).unwrap();
112 assert_eq!(response.status, CliSessionStatus::Linked);
113 assert_eq!(response.api_key.as_deref(), Some("cmp_test_key"));
114 assert_eq!(response.account.unwrap().email, "demo@example.com");
115 }
116}