@@ -33,13 +33,13 @@ pub trait GitHubClient: Send + Sync {
3333 team_id : i32 ,
3434 username : & str ,
3535 auth : & AccessToken ,
36- ) -> Result < GitHubTeamMembership > ;
36+ ) -> Result < Option < GitHubTeamMembership > > ;
3737 async fn org_membership (
3838 & self ,
3939 org_id : i32 ,
4040 username : & str ,
4141 auth : & AccessToken ,
42- ) -> Result < GitHubOrgMembership > ;
42+ ) -> Result < Option < GitHubOrgMembership > > ;
4343 async fn public_keys ( & self , username : & str , password : & str ) -> Result < Vec < GitHubPublicKey > > ;
4444}
4545
@@ -120,22 +120,28 @@ impl GitHubClient for RealGitHubClient {
120120 team_id : i32 ,
121121 username : & str ,
122122 auth : & AccessToken ,
123- ) -> Result < GitHubTeamMembership > {
123+ ) -> Result < Option < GitHubTeamMembership > > {
124124 let url = format ! ( "/organizations/{org_id}/team/{team_id}/memberships/{username}" ) ;
125- self . request ( & url, auth) . await
125+ match self . request ( & url, auth) . await {
126+ Ok ( membership) => Ok ( Some ( membership) ) ,
127+ // Officially how `false` is returned
128+ Err ( GitHubError :: NotFound ( _) ) => Ok ( None ) ,
129+ Err ( err) => Err ( err) ,
130+ }
126131 }
127132
128133 async fn org_membership (
129134 & self ,
130135 org_id : i32 ,
131136 username : & str ,
132137 auth : & AccessToken ,
133- ) -> Result < GitHubOrgMembership > {
134- self . request (
135- & format ! ( "/organizations/{org_id}/memberships/{username}" ) ,
136- auth,
137- )
138- . await
138+ ) -> Result < Option < GitHubOrgMembership > > {
139+ let url = format ! ( "/organizations/{org_id}/memberships/{username}" ) ;
140+ match self . request ( & url, auth) . await {
141+ Ok ( membership) => Ok ( Some ( membership) ) ,
142+ Err ( GitHubError :: NotFound ( _) ) => Ok ( None ) ,
143+ Err ( err) => Err ( err) ,
144+ }
139145 }
140146
141147 /// Returns the list of public keys that can be used to verify GitHub secret alert signatures
0 commit comments