diff --git a/crates/crates_io_github/src/lib.rs b/crates/crates_io_github/src/lib.rs index eb7c05a5b4d..ec5555dc8cc 100644 --- a/crates/crates_io_github/src/lib.rs +++ b/crates/crates_io_github/src/lib.rs @@ -206,12 +206,24 @@ pub struct GitHubTeamMembership { pub state: String, } +impl GitHubTeamMembership { + pub fn is_active(&self) -> bool { + self.state == "active" + } +} + #[derive(Debug, Deserialize)] pub struct GitHubOrgMembership { pub state: String, pub role: String, } +impl GitHubOrgMembership { + pub fn is_active_admin(&self) -> bool { + self.state == "active" && self.role == "admin" + } +} + #[derive(Debug, Deserialize, Clone, Eq, Hash, PartialEq)] pub struct GitHubPublicKey { pub key_identifier: String, diff --git a/src/models/team.rs b/src/models/team.rs index d8606b93271..e9a040b30be 100644 --- a/src/models/team.rs +++ b/src/models/team.rs @@ -217,7 +217,7 @@ async fn is_gh_org_owner( token: &AccessToken, ) -> Result { let membership = gh_client.org_membership(org_id, gh_login, token).await?; - Ok(membership.is_some_and(|m| m.state == "active" && m.role == "admin")) + Ok(membership.is_some_and(|m| m.is_active_admin())) } async fn team_with_gh_id_contains_user( @@ -236,5 +236,5 @@ async fn team_with_gh_id_contains_user( // There is also `state: pending` for which we could possibly give // some feedback, but it's not obvious how that should work. - Ok(membership.is_some_and(|m| m.state == "active")) + Ok(membership.is_some_and(|m| m.is_active())) }