From 0195de365b067be35212fac06a24819403818404 Mon Sep 17 00:00:00 2001 From: Sam Wilson Date: Thu, 20 Jun 2024 09:42:58 -0400 Subject: [PATCH] Make most fields of models::Author optional --- examples/list_forks.rs | 2 +- examples/list_gists_for_token_holder.rs | 2 +- src/models.rs | 54 +++++++++++++++-------- src/models/events/payload/member.rs | 2 +- tests/current_user_orgs_test.rs | 2 +- tests/follow_redirect.rs | 7 ++- tests/org_installations_test.rs | 2 +- tests/org_members_tests.rs | 4 +- tests/projects_project_get_test.rs | 2 +- tests/projects_user_list_projects_test.rs | 2 +- tests/repo_contributors_test.rs | 2 +- tests/repos_stargazers_tests.rs | 12 ++--- tests/team_invitations_tests.rs | 2 +- tests/team_members_tests.rs | 4 +- 14 files changed, 60 insertions(+), 39 deletions(-) diff --git a/examples/list_forks.rs b/examples/list_forks.rs index dc0b9a81..5bbcf3f9 100644 --- a/examples/list_forks.rs +++ b/examples/list_forks.rs @@ -16,7 +16,7 @@ async fn main() -> octocrab::Result<()> { .await?; for f in forks { - println!("fork: {}", f.owner.unwrap().login); + println!("fork: {}", f.owner.unwrap().login.unwrap()); } Ok(()) diff --git a/examples/list_gists_for_token_holder.rs b/examples/list_gists_for_token_holder.rs index 0d774021..5d7d029f 100644 --- a/examples/list_gists_for_token_holder.rs +++ b/examples/list_gists_for_token_holder.rs @@ -21,7 +21,7 @@ async fn main() -> octocrab::Result<()> { println!( "User '{username}' has {count} gists:", - username = current_user_name, + username = current_user_name.unwrap(), count = gists.len() ); println!("id | url | [files...] | description"); diff --git a/src/models.rs b/src/models.rs index 745002a3..83f4c6df 100644 --- a/src/models.rs +++ b/src/models.rs @@ -398,24 +398,42 @@ pub struct IssuePullRequest { #[derive(Debug, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)] #[non_exhaustive] pub struct Author { - pub login: String, - pub id: UserId, - pub node_id: String, - pub avatar_url: Url, - pub gravatar_id: String, - pub url: Url, - pub html_url: Url, - pub followers_url: Url, - pub following_url: Url, - pub gists_url: Url, - pub starred_url: Url, - pub subscriptions_url: Url, - pub organizations_url: Url, - pub repos_url: Url, - pub events_url: Url, - pub received_events_url: Url, - pub r#type: String, - pub site_admin: bool, + #[serde(skip_serializing_if = "Option::is_none")] + pub login: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub id: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub node_id: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub avatar_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub gravatar_id: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub html_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub followers_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub following_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub gists_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub starred_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub subscriptions_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub organizations_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub repos_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub events_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub received_events_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub r#type: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub site_admin: Option, pub patch_url: Option, #[serde(skip_serializing_if = "Option::is_none")] pub email: Option, diff --git a/src/models/events/payload/member.rs b/src/models/events/payload/member.rs index a1333b47..1a7249c6 100644 --- a/src/models/events/payload/member.rs +++ b/src/models/events/payload/member.rs @@ -87,7 +87,7 @@ mod test { event.payload.as_ref().unwrap().specific { assert_eq!(payload.action, MemberEventAction::Added); - assert_eq!(payload.member.id.0, 58522265); + assert_eq!(payload.member.id.unwrap().0, 58522265); } else { panic!("unexpected event payload encountered: {:#?}", event.payload); } diff --git a/tests/current_user_orgs_test.rs b/tests/current_user_orgs_test.rs index 2d9b5ea4..bd0c1c66 100644 --- a/tests/current_user_orgs_test.rs +++ b/tests/current_user_orgs_test.rs @@ -59,7 +59,7 @@ async fn should_return_page_with_invitations() { { assert_eq!(items.len(), 2); assert_eq!(items[0].role, "admin"); - assert_eq!(items[0].user.login, "davidmhewitt"); + assert_eq!(items[0].user.login.as_ref().unwrap(), "davidmhewitt"); assert_eq!(items[0].organization.login, "elementary"); assert_eq!(items[1].organization.login, "EpicGames"); } diff --git a/tests/follow_redirect.rs b/tests/follow_redirect.rs index 0dc53639..505ac7e0 100644 --- a/tests/follow_redirect.rs +++ b/tests/follow_redirect.rs @@ -56,7 +56,7 @@ const REPO: &str = "repo"; async fn should_return_page_with_users() { let star_gazers: Vec = serde_json::from_str(include_str!("resources/stargazers.json")).unwrap(); - let login1: String = star_gazers[0].user.as_ref().unwrap().login.clone(); + let login1: String = star_gazers[0].user.as_ref().unwrap().login.clone().unwrap(); let page_response = FakePage { items: star_gazers }; let template = ResponseTemplate::new(200).set_body_json(&page_response); let mock_server = setup_api(template).await; @@ -71,6 +71,9 @@ async fn should_return_page_with_users() { let Page { items, .. } = result.unwrap(); { assert_eq!(items.len(), 3); - assert_eq!(items[0].user.as_ref().unwrap().login, login1); + assert_eq!( + items[0].user.as_ref().unwrap().login.as_ref().unwrap(), + &login1 + ); } } diff --git a/tests/org_installations_test.rs b/tests/org_installations_test.rs index 75450edd..dc623fb0 100644 --- a/tests/org_installations_test.rs +++ b/tests/org_installations_test.rs @@ -52,6 +52,6 @@ async fn should_return_org_installation() { } = result.unwrap(); { assert_eq!(installation_id, InstallationId(1)); - assert_eq!(login, "github"); + assert_eq!(login.unwrap(), "github"); } } diff --git a/tests/org_members_tests.rs b/tests/org_members_tests.rs index efa1c7dc..18a221d2 100644 --- a/tests/org_members_tests.rs +++ b/tests/org_members_tests.rs @@ -61,7 +61,7 @@ const USERNAME: &str = "mona"; async fn should_return_page_with_users() { let org_members: Author = serde_json::from_str(include_str!("resources/org_members.json")).unwrap(); - let login: String = org_members.login.clone(); + let login: String = org_members.login.clone().unwrap(); let page_response = FakePage { items: vec![org_members], }; @@ -78,7 +78,7 @@ async fn should_return_page_with_users() { let Page { items, .. } = result.unwrap(); { assert_eq!(items.len(), 1); - assert_eq!(items[0].login, login); + assert_eq!(items[0].login.clone().unwrap(), login); } } diff --git a/tests/projects_project_get_test.rs b/tests/projects_project_get_test.rs index ff84075a..07823005 100644 --- a/tests/projects_project_get_test.rs +++ b/tests/projects_project_get_test.rs @@ -56,5 +56,5 @@ async fn should_get_projects_by_its_id() { let result = project.unwrap(); assert_eq!(result.name, "Organization Roadmap"); - assert_eq!(result.creator.login, "octocat"); + assert_eq!(result.creator.login.unwrap(), "octocat"); } diff --git a/tests/projects_user_list_projects_test.rs b/tests/projects_user_list_projects_test.rs index ad973a51..ae86630e 100644 --- a/tests/projects_user_list_projects_test.rs +++ b/tests/projects_user_list_projects_test.rs @@ -58,5 +58,5 @@ async fn should_list_user_projects() { let Page { items, .. } = result.unwrap(); assert_eq!(items[0].name, "My Projects"); - assert_eq!(items[1].creator.login, "octocat"); + assert_eq!(items[1].creator.login.as_ref().unwrap(), "octocat"); } diff --git a/tests/repo_contributors_test.rs b/tests/repo_contributors_test.rs index ced3536c..0a0bbe72 100644 --- a/tests/repo_contributors_test.rs +++ b/tests/repo_contributors_test.rs @@ -65,7 +65,7 @@ async fn should_return_repo_contributors() { } = contributors.items.first().unwrap(); { - assert_eq!(login, "XAMPPRocky"); + assert_eq!(login.as_ref().unwrap(), "XAMPPRocky"); assert!(*contributions > 0); } } diff --git a/tests/repos_stargazers_tests.rs b/tests/repos_stargazers_tests.rs index 4cc7bb11..68ca2196 100644 --- a/tests/repos_stargazers_tests.rs +++ b/tests/repos_stargazers_tests.rs @@ -42,7 +42,7 @@ const REPO: &str = "repo"; async fn should_return_page_with_users() { let star_gazers: Vec = serde_json::from_str(include_str!("resources/stargazers.json")).unwrap(); - let login1: String = star_gazers[0].user.as_ref().unwrap().login.clone(); + let login1: String = star_gazers[0].user.as_ref().unwrap().login.clone().unwrap(); let page_response = FakePage { items: star_gazers }; let template = ResponseTemplate::new(200).set_body_json(&page_response); let mock_server = setup_api(template).await; @@ -57,7 +57,7 @@ async fn should_return_page_with_users() { let Page { items, .. } = result.unwrap(); { assert_eq!(items.len(), 3); - assert_eq!(items[0].user.as_ref().unwrap().login, login1); + assert_eq!(items[0].user.as_ref().unwrap().login, Some(login1)); } } @@ -65,8 +65,8 @@ async fn should_return_page_with_users() { async fn should_return_page_with_all_users() { let star_gazers: Vec = serde_json::from_str(include_str!("resources/stargazers.json")).unwrap(); - let login1: String = star_gazers[0].user.as_ref().unwrap().login.clone(); - let login2: String = star_gazers[1].user.as_ref().unwrap().login.clone(); + let login1: String = star_gazers[0].user.as_ref().unwrap().login.clone().unwrap(); + let login2: String = star_gazers[1].user.as_ref().unwrap().login.clone().unwrap(); let page_response = FakePage { items: star_gazers }; let template = ResponseTemplate::new(200).set_body_json(&page_response); let mock_server = setup_api(template).await; @@ -82,7 +82,7 @@ async fn should_return_page_with_all_users() { let result = client.all_pages(page).await.unwrap(); assert_eq!(result.len(), 3); - assert_eq!(result[0].user.as_ref().unwrap().login, login1); - assert_eq!(result[1].user.as_ref().unwrap().login, login2); + assert_eq!(result[0].user.as_ref().unwrap().login, Some(login1)); + assert_eq!(result[1].user.as_ref().unwrap().login, Some(login2)); assert_eq!(result[2].user, None); } diff --git a/tests/team_invitations_tests.rs b/tests/team_invitations_tests.rs index 4b30b5a5..c90ab4fd 100644 --- a/tests/team_invitations_tests.rs +++ b/tests/team_invitations_tests.rs @@ -61,7 +61,7 @@ async fn should_return_page_with_invitations() { { assert_eq!(items.len(), 1); assert_eq!(items[0].login.clone().unwrap(), String::from("monalisa")); - assert_eq!(items[0].inviter.r#type, String::from("User")); + assert_eq!(items[0].inviter.r#type, Some(String::from("User"))); assert_eq!(items[0].role, String::from("direct_member")); } } diff --git a/tests/team_members_tests.rs b/tests/team_members_tests.rs index 4bb810c8..a77e4253 100644 --- a/tests/team_members_tests.rs +++ b/tests/team_members_tests.rs @@ -60,7 +60,7 @@ async fn should_return_page_with_users() { let Page { items, .. } = result.unwrap(); { assert_eq!(items.len(), 1); - assert_eq!(items[0].login, String::from("octocat")); - assert_eq!(items[0].r#type, String::from("User")); + assert_eq!(items[0].login.clone().unwrap(), String::from("octocat")); + assert_eq!(items[0].r#type.clone().unwrap(), String::from("User")); } }