11use std:: { fmt, future:: Future , pin:: Pin } ;
22
33use anyhow:: { Ok , anyhow, ensure} ;
4+ use octocrab:: Octocrab ;
45use serde:: Deserialize ;
56
67use crate :: {
78 config:: { Accessor , Validator } ,
9+ helper:: TIMEOUT ,
810 platform:: { PlatformMetadata , PlatformTraitStatic } ,
911 source:: { Article , Articles , FetcherTrait , Status , StatusKind , StatusSource , User } ,
1012} ;
@@ -35,6 +37,7 @@ impl fmt::Display for ConfigParams {
3537
3638pub struct Fetcher {
3739 params : Accessor < ConfigParams > ,
40+ instance : Octocrab ,
3841}
3942
4043impl PlatformTraitStatic for Fetcher {
@@ -59,11 +62,18 @@ impl fmt::Display for Fetcher {
5962
6063impl Fetcher {
6164 pub fn new ( params : Accessor < ConfigParams > ) -> Self {
62- Self { params }
65+ let instance = Octocrab :: builder ( )
66+ . set_connect_timeout ( Some ( TIMEOUT ) )
67+ . set_read_timeout ( Some ( TIMEOUT ) )
68+ . set_write_timeout ( Some ( TIMEOUT ) )
69+ . build ( )
70+ . map_err ( |err| anyhow ! ( "failed to build Octocrab instance: {err}" ) )
71+ . unwrap ( ) ;
72+ Self { params, instance }
6373 }
6474
6575 async fn fetch_status_impl ( & self ) -> anyhow:: Result < Status > {
66- let issues_prs = fetch ( & self . params . repo , & self . params . query ) . await ?;
76+ let issues_prs = fetch ( & self . instance , & self . params . repo , & self . params . query ) . await ?;
6777
6878 Ok ( Status :: new (
6979 StatusKind :: Articles ( issues_prs) ,
@@ -75,8 +85,8 @@ impl Fetcher {
7585 }
7686}
7787
78- async fn fetch ( repo : & str , query : & str ) -> anyhow:: Result < Articles > {
79- let results = octocrab :: instance ( )
88+ async fn fetch ( instance : & Octocrab , repo : & str , query : & str ) -> anyhow:: Result < Articles > {
89+ let results = instance
8090 . search ( )
8191 . issues_and_pull_requests ( & format ! ( "repo:{repo} {query}" ) )
8292 . sort ( "created" )
0 commit comments