use serde::Serialize;
use std::path::PathBuf;
use strum::{Display, EnumDiscriminants};
use strum_macros::{AsRefStr, EnumMessage, EnumString, VariantArray};
#[derive(Clone, Debug, clap::Subcommand, EnumDiscriminants, Serialize)]
#[strum_discriminants(derive(AsRefStr, EnumString, EnumMessage, VariantArray, Display))]
#[strum_discriminants(name(StateCommand))]
pub enum State {
#[strum_discriminants(strum(
serialize = "live",
message = "Live",
detailed_message = "Run the migrations on top of live state.",
))]
Live(LiveState),
#[strum_discriminants(strum(
serialize = "snap",
message = "Snapshot",
detailed_message = "Run the migrations on top of a chain snapshot."
))]
Snap {
#[serde(skip_serializing)]
#[clap(short = 'p', long = "path", alias = "snapshot-path")]
path: Option<PathBuf>,
},
}
#[derive(Debug, Default, Clone, clap::Args, Serialize)]
pub struct LiveState {
#[arg(
short,
long,
value_parser = super::parse::url,
)]
pub uri: Option<String>,
#[arg(
short,
long,
value_parser = super::parse::hash,
)]
pub at: Option<String>,
#[arg(short, long, num_args = 1..)]
pub pallet: Vec<String>,
#[arg(long = "prefix", value_parser = super::parse::hash, num_args = 1..)]
pub hashed_prefixes: Vec<String>,
#[arg(long)]
pub child_tree: bool,
}