1use anyhow::Result;
2use generate::generate;
3
4use crate::opt::{Command, DatabaseCommand, MigrateCommand};
5
6mod database;
7
8mod generate;
9mod migrate;
10mod opt;
11mod prepare;
12
13pub use crate::opt::Opt;
14
15pub async fn run(opt: Opt) -> Result<()> {
16 match opt.command {
17 Command::Migrate(migrate) => match migrate.command {
18 MigrateCommand::Add {
19 description,
20 reversible,
21 } => migrate::add(&migrate.source, &description, reversible).await?,
22 MigrateCommand::Run {
23 dry_run,
24 ignore_missing,
25 database_url,
26 } => migrate::run(&migrate.source, &database_url, dry_run, ignore_missing).await?,
27 MigrateCommand::Revert {
28 dry_run,
29 ignore_missing,
30 database_url,
31 } => migrate::revert(&migrate.source, &database_url, dry_run, ignore_missing).await?,
32 MigrateCommand::Info { database_url } => {
33 migrate::info(&migrate.source, &database_url).await?
34 }
35 MigrateCommand::BuildScript { force } => migrate::build_script(&migrate.source, force)?,
36 MigrateCommand::Generate {
37 database_url,
38 table,
39
40 } => generate(&database_url, table, &migrate.source).await,
41 },
42
43 Command::Database(database) => match database.command {
44 DatabaseCommand::Create { database_url } => database::create(&database_url).await?,
45 DatabaseCommand::Drop { yes, database_url } => {
46 database::drop(&database_url, !yes).await?
47 }
48 DatabaseCommand::Reset {
49 yes,
50 source,
51 database_url,
52 } => database::reset(&source, &database_url, !yes).await?,
53 DatabaseCommand::Setup {
54 source,
55 database_url,
56 } => database::setup(&source, &database_url).await?,
57 },
58
59 Command::Prepare {
60 check: false,
61 merged,
62 args,
63 database_url,
64 } => prepare::run(&database_url, merged, args)?,
65
66 Command::Prepare {
67 check: true,
68 merged,
69 args,
70 database_url,
71 } => prepare::check(&database_url, merged, args)?,
72 };
73
74 Ok(())
75}