composio_sdk/models/
link.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct ConnectedAccountLinkCreateParams {
8 pub auth_config_id: String,
10 pub user_id: String,
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub callback_url: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub connection_data: Option<serde_json::Value>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct ConnectedAccountLinkCreateResponse {
23 pub connected_account_id: String,
25 pub link_token: String,
27 pub redirect_url: String,
29 #[serde(alias = "expiresAt")]
31 pub expires_at: String,
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn test_connected_account_link_create_params_serialization() {
40 let params = ConnectedAccountLinkCreateParams {
41 auth_config_id: "ac_123".to_string(),
42 user_id: "user_123".to_string(),
43 callback_url: Some("https://example.com/callback".to_string()),
44 connection_data: Some(serde_json::json!({"region":"us"})),
45 };
46
47 let value = serde_json::to_value(¶ms).unwrap();
48 assert_eq!(value["auth_config_id"], "ac_123");
49 assert_eq!(value["user_id"], "user_123");
50 assert_eq!(value["callback_url"], "https://example.com/callback");
51 assert_eq!(value["connection_data"]["region"], "us");
52 }
53
54 #[test]
55 fn test_connected_account_link_create_response_deserialization() {
56 let payload = serde_json::json!({
57 "connected_account_id": "ca_123",
58 "link_token": "lt_123",
59 "redirect_url": "https://connect.example.com",
60 "expires_at": "2026-01-01T00:00:00Z"
61 });
62
63 let response: ConnectedAccountLinkCreateResponse = serde_json::from_value(payload).unwrap();
64 assert_eq!(response.connected_account_id, "ca_123");
65 assert_eq!(response.expires_at, "2026-01-01T00:00:00Z");
66 }
67}