21 lines
		
	
	
		
			619 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
		
		
			
		
	
	
			21 lines
		
	
	
		
			619 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| 
								 | 
							
								use clap::CommandFactory;
							 | 
						||
| 
								 | 
							
								use clap_complete::Shell;
							 | 
						||
| 
								 | 
							
								use std::{fs, path::Path};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								include!("src/cli.rs");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fn main() -> Result<(), Box<dyn std::error::Error>> {
							 | 
						||
| 
								 | 
							
								    let outdir = std::env::var_os("SHELL_COMPLETIONS_DIR")
							 | 
						||
| 
								 | 
							
								        .or_else(|| std::env::var_os("OUT_DIR"))
							 | 
						||
| 
								 | 
							
								        .expect("OUT_DIR not found");
							 | 
						||
| 
								 | 
							
								    let outdir_path = Path::new(&outdir);
							 | 
						||
| 
								 | 
							
								    let app = &mut App::command();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for shell in Shell::value_variants() {
							 | 
						||
| 
								 | 
							
								        let dir = outdir_path.join(shell.to_string());
							 | 
						||
| 
								 | 
							
								        fs::create_dir_all(&dir)?;
							 | 
						||
| 
								 | 
							
								        clap_complete::generate_to(*shell, app, app.get_name().to_string(), &dir)?;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    Ok(())
							 | 
						||
| 
								 | 
							
								}
							 |