@@ -20,6 +20,12 @@ type Result<T> = std::result::Result<T, GitHubError>;
2020#[ async_trait]
2121pub trait GitHubClient : Send + Sync {
2222 async fn current_user ( & self , auth : & AccessToken ) -> Result < GithubUser > ;
23+ async fn get_repository (
24+ & self ,
25+ owner : & str ,
26+ repo : & str ,
27+ auth : & AccessToken ,
28+ ) -> Result < GitHubRepository > ;
2329 async fn org_by_name ( & self , org_name : & str , auth : & AccessToken ) -> Result < GitHubOrganization > ;
2430 async fn team_by_name (
2531 & self ,
@@ -102,6 +108,16 @@ impl GitHubClient for RealGitHubClient {
102108 self . request ( "/user" , auth) . await
103109 }
104110
111+ async fn get_repository (
112+ & self ,
113+ owner : & str ,
114+ repo : & str ,
115+ auth : & AccessToken ,
116+ ) -> Result < GitHubRepository > {
117+ let url = format ! ( "/repos/{owner}/{repo}" ) ;
118+ self . request ( & url, auth) . await
119+ }
120+
105121 async fn org_by_name ( & self , org_name : & str , auth : & AccessToken ) -> Result < GitHubOrganization > {
106122 let url = format ! ( "/orgs/{org_name}" ) ;
107123 self . request ( & url, auth) . await
@@ -191,6 +207,19 @@ pub struct GithubUser {
191207 pub name : Option < String > ,
192208}
193209
210+ #[ derive( Debug , Deserialize ) ]
211+ pub struct GitHubRepository {
212+ pub id : i64 ,
213+ pub name : String ,
214+ pub owner : GitHubRepositoryOwner ,
215+ }
216+
217+ #[ derive( Debug , Deserialize ) ]
218+ pub struct GitHubRepositoryOwner {
219+ pub login : String ,
220+ pub id : i32 ,
221+ }
222+
194223#[ derive( Debug , Deserialize ) ]
195224pub struct GitHubOrganization {
196225 pub id : i32 , // unique GH id (needed for membership queries)
0 commit comments