1- use std:: { fs, path:: PathBuf , time:: Instant } ;
1+ use std:: { env , fs, path:: Path , process :: ExitCode , time:: Instant } ;
22
33use anyhow:: { bail, Result } ;
44use clap:: Parser ;
@@ -17,30 +17,52 @@ mod pack;
1717mod scraper;
1818mod storage;
1919
20- fn main ( ) -> Result < ( ) > {
20+ fn main ( ) -> ExitCode {
2121 let args = Cli :: parse ( ) ;
2222 env_logger:: Builder :: new ( )
2323 . filter_level ( args. verbose . log_level_filter ( ) )
2424 . init ( ) ;
2525
26- process_args ( args) ?;
27- Ok ( ( ) )
26+ match process_args ( args) {
27+ Ok ( _) => ExitCode :: SUCCESS ,
28+ Err ( e) => {
29+ error ! ( "{}" , e) ;
30+ ExitCode :: FAILURE
31+ }
32+ }
2833}
2934
3035fn process_args ( args : Cli ) -> Result < ( ) > {
36+ let default_config_dir = env:: current_dir ( ) ?. join ( "config" ) ;
37+ let config_dir = args. config_directory_path . unwrap_or ( default_config_dir) ;
38+ info ! ( "using configuration from: {}" , config_dir. display( ) ) ;
39+
3140 match args. command {
32- cli:: Commands :: Packs => list_packs ( args. language ) ,
33- cli:: Commands :: Cards { pack_id } => list_cards ( args. language , & pack_id. to_string_lossy ( ) ) ,
34- cli:: Commands :: Interactive => interactive:: show_interactive ( ) ,
41+ cli:: Commands :: Packs => list_packs ( & config_dir, args. language ) ,
42+ cli:: Commands :: Cards { pack_id } => {
43+ list_cards ( & config_dir, args. language , & pack_id. to_string_lossy ( ) )
44+ }
45+ cli:: Commands :: Interactive => interactive:: show_interactive ( & config_dir) ,
3546 cli:: Commands :: Images {
3647 pack_id,
3748 output_dir,
38- } => download_images ( args. language , & pack_id. to_string_lossy ( ) , output_dir) ,
49+ } => download_images (
50+ & config_dir,
51+ args. language ,
52+ & pack_id. to_string_lossy ( ) ,
53+ & output_dir,
54+ ) ,
55+ cli:: Commands :: TestConfig => Localizer :: find_locales ( & config_dir) ,
3956 }
4057}
4158
42- fn download_images ( language : LanguageCode , pack_id : & str , output_dir : PathBuf ) -> Result < ( ) > {
43- let localizer = Localizer :: load ( language) ?;
59+ fn download_images (
60+ config_dir : & Path ,
61+ language : LanguageCode ,
62+ pack_id : & str ,
63+ output_dir : & Path ,
64+ ) -> Result < ( ) > {
65+ let localizer = Localizer :: load ( config_dir, language) ?;
4466 let scraper = OpTcgScraper :: new ( & localizer) ;
4567
4668 if output_dir. exists ( ) {
@@ -51,7 +73,7 @@ fn download_images(language: LanguageCode, pack_id: &str, output_dir: PathBuf) -
5173 ) ;
5274 }
5375
54- match fs:: create_dir_all ( & output_dir) {
76+ match fs:: create_dir_all ( output_dir) {
5577 Ok ( _) => info ! ( "successfully created `{}`" , output_dir. display( ) ) ,
5678 Err ( e) => bail ! ( "failed to create `{}`: {}" , output_dir. display( ) , e) ,
5779 }
@@ -98,8 +120,8 @@ fn download_images(language: LanguageCode, pack_id: &str, output_dir: PathBuf) -
98120 Ok ( ( ) )
99121}
100122
101- fn list_packs ( language : LanguageCode ) -> Result < ( ) > {
102- let localizer = Localizer :: load ( language) ?;
123+ fn list_packs ( config_dir : & Path , language : LanguageCode ) -> Result < ( ) > {
124+ let localizer = Localizer :: load ( config_dir , language) ?;
103125 let scraper = OpTcgScraper :: new ( & localizer) ;
104126
105127 info ! ( "fetching all pack ids..." ) ;
@@ -117,8 +139,8 @@ fn list_packs(language: LanguageCode) -> Result<()> {
117139 Ok ( ( ) )
118140}
119141
120- fn list_cards ( language : LanguageCode , pack_id : & str ) -> Result < ( ) > {
121- let localizer = Localizer :: load ( language) ?;
142+ fn list_cards ( config_dir : & Path , language : LanguageCode , pack_id : & str ) -> Result < ( ) > {
143+ let localizer = Localizer :: load ( config_dir , language) ?;
122144 let scraper = OpTcgScraper :: new ( & localizer) ;
123145
124146 info ! ( "fetching all cards..." ) ;
0 commit comments