1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//! A library for building Toasty command-line tools.
//!
//! `toasty-cli` provides [`ToastyCli`], a ready-made CLI runner that wraps a
//! [`toasty::Db`] handle and exposes database migration subcommands (generate,
//! apply, drop, reset, snapshot). It uses [clap] for argument parsing and
//! [dialoguer] for interactive prompts.
//!
//! The crate also exposes the underlying configuration and file types so that
//! custom tooling can read and manipulate migration history and snapshots
//! directly.
//!
//! # Main types
//!
//! - [`ToastyCli`] — parses CLI arguments and dispatches to the appropriate
//! migration subcommand.
//! - [`Config`] / [`MigrationConfig`] — configure migration paths, prefix
//! styles, and checksum behavior. Loaded from a `Toasty.toml` file or built
//! programmatically.
//! - [`HistoryFile`] / [`HistoryFileMigration`] — read and write the TOML
//! history that tracks which migrations exist.
//! - [`SnapshotFile`] — read and write schema snapshot TOML files.
//!
//! # Examples
//!
//! ```ignore
//! use toasty_cli::ToastyCli;
//!
//! let db = toasty::Db::builder("sqlite::memory:").build().await?;
//! let cli = ToastyCli::new(db);
//! cli.parse_and_run().await?;
//! ```
pub use *;
pub use *;
use Result;
use Parser;
use Db;
/// A CLI runner that dispatches migration subcommands against a [`Db`].
///
/// `ToastyCli` holds a database connection and a [`Config`]. Call
/// [`parse_and_run`](Self::parse_and_run) to parse `std::env::args` and
/// execute the matching subcommand, or [`parse_from`](Self::parse_from) to
/// parse from an arbitrary iterator (useful for testing).
///
/// # Examples
///
/// ```ignore
/// use toasty_cli::{ToastyCli, Config, MigrationConfig};
///
/// let config = Config::new()
/// .migration(MigrationConfig::new().path("db"));
/// let db = toasty::Db::builder("sqlite::memory:").build().await?;
/// let cli = ToastyCli::with_config(db, config);
/// cli.parse_from(["toasty", "migration", "apply"]).await?;
/// ```