use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConnectedAccountLinkCreateParams {
pub auth_config_id: String,
pub user_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub connection_data: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConnectedAccountLinkCreateResponse {
pub connected_account_id: String,
pub link_token: String,
pub redirect_url: String,
#[serde(alias = "expiresAt")]
pub expires_at: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_connected_account_link_create_params_serialization() {
let params = ConnectedAccountLinkCreateParams {
auth_config_id: "ac_123".to_string(),
user_id: "user_123".to_string(),
callback_url: Some("https://example.com/callback".to_string()),
connection_data: Some(serde_json::json!({"region":"us"})),
};
let value = serde_json::to_value(¶ms).unwrap();
assert_eq!(value["auth_config_id"], "ac_123");
assert_eq!(value["user_id"], "user_123");
assert_eq!(value["callback_url"], "https://example.com/callback");
assert_eq!(value["connection_data"]["region"], "us");
}
#[test]
fn test_connected_account_link_create_response_deserialization() {
let payload = serde_json::json!({
"connected_account_id": "ca_123",
"link_token": "lt_123",
"redirect_url": "https://connect.example.com",
"expires_at": "2026-01-01T00:00:00Z"
});
let response: ConnectedAccountLinkCreateResponse = serde_json::from_value(payload).unwrap();
assert_eq!(response.connected_account_id, "ca_123");
assert_eq!(response.expires_at, "2026-01-01T00:00:00Z");
}
}