use serde::Deserialize; #[derive(Debug, Deserialize)] struct AppResponse { code: i32, message: String, data: Option, } #[derive(Debug, Deserialize)] struct RefreshResponseData { access_token: String, refresh_token: String, token_type: Option, expires_in: usize, } #[test] fn can_decode_iam_refresh_response_snake_case() { let json = r#" { "code": 0, "message": "ok", "data": { "access_token": "a", "refresh_token": "r", "token_type": "Bearer", "expires_in": 7200 } } "#; let parsed: AppResponse = serde_json::from_str(json).unwrap(); let data = parsed.data.unwrap(); assert_eq!(data.access_token, "a"); assert_eq!(data.refresh_token, "r"); assert_eq!(data.token_type.as_deref(), Some("Bearer")); assert_eq!(data.expires_in, 7200); }