rebase from main

This commit is contained in:
Christopher Valerio 2024-04-28 17:04:40 -06:00
parent 945a3f743b
commit 949f16f34a
No known key found for this signature in database
GPG Key ID: 56368034522CF3A9
5 changed files with 348 additions and 247 deletions

447
Cargo.lock generated vendored

File diff suppressed because it is too large Load Diff

View File

@ -39,3 +39,4 @@ inquire = "0.6.2"
num-bigint = "0.4.3"
ordinal = "0.3.2"
rand = "0.8.5"
xdg = "2.5.2"

View File

@ -1,33 +0,0 @@
use clap::{Command, Subcommand};
use clap_complete::{generate, Shell};
use crate::cmd::Cmd as MainCmd;
/// Generates shell completion scripts
#[derive(Subcommand)]
pub enum Cmd {
Bash,
Zsh,
Fish,
}
pub fn exec(sub_cmd: Cmd) -> miette::Result<()> {
let shell = match sub_cmd {
Cmd::Bash => Shell::Bash,
Cmd::Zsh => Shell::Zsh,
Cmd::Fish => Shell::Fish,
};
let cli = Command::new("aiken").disable_version_flag(true);
let mut main = MainCmd::augment_subcommands(cli);
generate(
shell,
&mut main,
"aiken".to_string(),
&mut std::io::stdout(),
);
Ok(())
}

View File

@ -0,0 +1,92 @@
use std::{fs::File, io::Write};
use clap::{Command, Subcommand};
use clap_complete::{generate, Shell};
use crate::cmd::Cmd as MainCmd;
use std::fs::OpenOptions;
/// Generates shell completion scripts
#[derive(clap::Args)]
pub struct Args {
#[arg(short, long, default_value_t = false)]
install: bool,
}
fn generate_wrapper(shell: Shell, buf: &mut dyn Write) {
let cli = Command::new("aiken").disable_version_flag(true);
let mut main = MainCmd::augment_subcommands(cli);
generate(
shell,
&mut main,
"aiken".to_string(),
buf,
);
}
fn zsh() -> miette::Result<()> {
//if oh-my-zsh
//if zsh-completions in data_dir
let xdg_dirs = xdg::BaseDirectories::with_prefix("zsh-completions").unwrap();
let data_home = xdg_dirs.get_data_home();
let home = std::env::var("HOME").expect("Cannot find your home directory");
let mut completion_file : File;
if data_home.exists() {
let completion_path = xdg_dirs.place_data_file("_aiken").expect("cannot create directory");
completion_file = File::create(completion_path).expect("cannot open file");
} else {
let completion_path = xdg_dirs.place_data_file("_aiken").expect("cannot create directory");
completion_file = File::create(completion_path).expect("cannot open file");
let mut zshrc = OpenOptions::new().write(true).append(true).open(format!("{}/.zshrc",home)).expect(".zshrc file not found");
if let Some(home) = data_home.to_str() {
let fpath: String = format!(r#"fpath=($fpath "{}")"#, home);
if let Err(e) = writeln!(zshrc,"{}", fpath ) {
eprintln!("Couldn't write to file: {}", e);
}
}
}
generate_wrapper(Shell::Zsh, &mut completion_file);
Ok(())
}
fn completions_to_file(shell: Shell) -> miette::Result<()> {
match shell {
Shell::Bash => {
todo!()
},
Shell::Fish => {
todo!()
},
Shell::Zsh => {
zsh()?;
},
_ => eprintln!("Shell not supported"),
}
Ok(())
}
pub fn exec(cmd_args: Args, shell: Shell) -> miette::Result<()>{
if cmd_args.install {
completions_to_file(shell)?;
}else {
generate_wrapper(
shell,
&mut std::io::stdout(),
);
}
Ok(())
}

View File

@ -0,0 +1,22 @@
pub mod completion;
use clap::Subcommand;
use clap_complete::Shell;
/// Commands for working with transactions
#[derive(Subcommand)]
pub enum Cmd {
Bash(completion::Args),
Zsh(completion::Args),
Fish(completion::Args),
}
pub fn exec(cmd: Cmd) -> miette::Result<()> {
match cmd {
Cmd::Bash(args) => completion::exec(args,Shell::Bash),
Cmd::Zsh(args) => completion::exec(args,Shell::Zsh),
Cmd::Fish(args) => completion::exec(args,Shell::Fish),
}
}