Skip to content

Commit 31f625d

Browse files
authored
fix(emails): visibility can be null (#756)
According to the [`/user/emails` schema](https://docs.github.com/en/rest/users/emails?apiVersion=2022-11-28#list-email-addresses-for-the-authenticated-user), the `visibility` field in the response can be `null`. The `UserEmailInfo` made it mandatory, causing deserialization failures during requests against real GitHub APIs like this: ``` invalid type: null, expected string or map ```
1 parent ce8c885 commit 31f625d

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

src/models.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1106,7 +1106,7 @@ pub struct UserEmailInfo {
11061106
pub email: String,
11071107
pub primary: bool,
11081108
pub verified: bool,
1109-
pub visibility: EmailVisibilityState,
1109+
pub visibility: Option<EmailVisibilityState>,
11101110
}
11111111

11121112
#[derive(Debug, Clone, Serialize, Deserialize)]

tests/resources/user_emails.json

+6
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,11 @@
44
"primary": true,
55
"verified": true,
66
"visibility": "private"
7+
},
8+
{
9+
"email": "[email protected]",
10+
"primary": true,
11+
"verified": true,
12+
"visibility": null
713
}
814
]

tests/user_emails_tests.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ async fn should_respond_to_primary_email_visibility() {
5454
);
5555
let response = result.unwrap();
5656
let visibility = response.first().unwrap().visibility;
57-
assert_eq!(visibility, EmailVisibilityState::Private);
57+
assert_eq!(visibility, Some(EmailVisibilityState::Private));
5858
}
5959

6060
#[tokio::test]
@@ -78,7 +78,10 @@ async fn should_respond_to_email_list() {
7878
);
7979
let response = result.unwrap();
8080
let visibility = response.items.first().unwrap().visibility;
81-
assert_eq!(visibility, EmailVisibilityState::Private);
81+
assert_eq!(visibility, Some(EmailVisibilityState::Private));
82+
83+
let visibility = response.items[1].visibility;
84+
assert_eq!(visibility, None);
8285
}
8386

8487
#[tokio::test]
@@ -102,7 +105,7 @@ async fn should_respond_to_public_email_list() {
102105
);
103106
let response = result.unwrap();
104107
let visibility = response.items.first().unwrap().visibility;
105-
assert_eq!(visibility, EmailVisibilityState::Private);
108+
assert_eq!(visibility, Some(EmailVisibilityState::Private));
106109
}
107110

108111
#[tokio::test]

0 commit comments

Comments
 (0)