feat: add command to gen shell completions
This commit is contained in:
parent
f4ad03cee0
commit
d1d09ac912
2 changed files with 32 additions and 0 deletions
|
@ -12,6 +12,7 @@ mod opts;
|
||||||
use crate::error::StdResult;
|
use crate::error::StdResult;
|
||||||
use config::Config;
|
use config::Config;
|
||||||
use opts::{AppOpt, Command, StructOpt};
|
use opts::{AppOpt, Command, StructOpt};
|
||||||
|
use std::io;
|
||||||
|
|
||||||
fn main() -> StdResult<()> {
|
fn main() -> StdResult<()> {
|
||||||
let opt = AppOpt::from_args();
|
let opt = AppOpt::from_args();
|
||||||
|
@ -40,6 +41,13 @@ fn main() -> StdResult<()> {
|
||||||
let config = Config::read(opt.config)?;
|
let config = Config::read(opt.config)?;
|
||||||
commands::downgrade_applied_migrations(config)?;
|
commands::downgrade_applied_migrations(config)?;
|
||||||
}
|
}
|
||||||
|
Command::Completions(opts) => {
|
||||||
|
AppOpt::clap().gen_completions_to(
|
||||||
|
env!("CARGO_BIN_NAME"),
|
||||||
|
opts.into(),
|
||||||
|
&mut io::stdout(),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use structopt::clap;
|
||||||
pub use structopt::StructOpt;
|
pub use structopt::StructOpt;
|
||||||
|
|
||||||
#[derive(Debug, StructOpt)]
|
#[derive(Debug, StructOpt)]
|
||||||
|
@ -27,6 +28,8 @@ pub(crate) enum Command {
|
||||||
|
|
||||||
#[structopt(name = "downgrade", visible_alias = "down")]
|
#[structopt(name = "downgrade", visible_alias = "down")]
|
||||||
Downgrade,
|
Downgrade,
|
||||||
|
|
||||||
|
Completions(CompletionsShell),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, StructOpt)]
|
#[derive(Debug, StructOpt)]
|
||||||
|
@ -40,3 +43,24 @@ pub(crate) struct MakeCommandOpt {
|
||||||
#[structopt(parse(from_str))]
|
#[structopt(parse(from_str))]
|
||||||
pub migration_name: String,
|
pub migration_name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, StructOpt)]
|
||||||
|
pub(crate) enum CompletionsShell {
|
||||||
|
Bash,
|
||||||
|
Fish,
|
||||||
|
Zsh,
|
||||||
|
PowerShell,
|
||||||
|
Elvish,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<CompletionsShell> for clap::Shell {
|
||||||
|
fn from(shell: CompletionsShell) -> Self {
|
||||||
|
match shell {
|
||||||
|
CompletionsShell::Bash => Self::Bash,
|
||||||
|
CompletionsShell::Fish => Self::Fish,
|
||||||
|
CompletionsShell::Zsh => Self::Zsh,
|
||||||
|
CompletionsShell::PowerShell => Self::PowerShell,
|
||||||
|
CompletionsShell::Elvish => Self::Elvish,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in a new issue