use clap::Parser;
use clap::ValueEnum;
use serde::Serialize;
#[derive(ValueEnum, Copy, Clone, Debug, PartialEq, Eq)]
pub enum Output {
Card,
Short,
Json,
Binary,
}
#[derive(ValueEnum, Copy, Clone, Debug, PartialEq, Eq)]
pub enum IdFormat {
Uuid,
Shortuuid,
UuidInt,
UuidB64,
Uuid25,
Ulid,
Upid,
Timeflake,
Flake,
Scru128,
Scru64,
Mongodb,
Ksuid,
Xid,
Cuid1,
Cuid2,
Nanoid,
Tsid,
Sqid,
Hashid,
Youtube,
Stripe,
Datadog,
Nuid,
Typeid,
Breezeid,
Puid,
Pushid,
Tid,
Threads,
SfTwitter,
SfMastodon,
SfDiscord,
SfInstagram,
SfLinkedin,
SfSony,
SfSpaceflake,
SfFrostflake,
SfFlakeid,
Unix,
UnixS,
UnixMs,
UnixUs,
UnixNs,
Hash,
Ipfs,
Ipv4,
Ipv6,
Mac,
Imei,
Isbn,
H3,
}
#[derive(Parser, Debug, Clone)]
#[command(version, about, long_about = None)]
pub struct Args {
#[arg(allow_hyphen_values = true)]
pub id: String,
#[arg(short, long, default_value_t = Output::Card)]
pub output: Output,
#[arg(short = 'f', long)]
pub force: Option<IdFormat>,
#[arg(short = 'e', long)]
pub everything: bool,
#[arg(short = 'c', long)]
pub compare: bool,
#[arg(short = 'a', long)]
pub alphabet: Option<String>,
#[arg(long)]
pub salt: Option<String>,
}
impl Default for Args {
fn default() -> Args {
Self {
id: "".to_string(),
output: Output::Card,
force: None,
everything: false,
compare: false,
alphabet: None,
salt: None,
}
}
}
#[derive(Debug)]
pub struct TimestampComparable {
pub timestamp: f64, pub datetime: String, pub name: String, }
#[allow(dead_code)]
#[derive(Default, Clone, Serialize, Debug)]
pub struct IDInfo {
pub id_type: String,
pub version: Option<String>,
pub standard: String,
pub integer: Option<u128>,
pub short_uuid: Option<String>,
pub base64: Option<String>,
pub uuid_wrap: Option<String>,
pub parsed: Option<String>,
pub size: u16,
pub entropy: u16,
pub datetime: Option<String>,
pub timestamp: Option<String>,
pub sequence: Option<u128>,
pub node1: Option<String>,
pub node2: Option<String>,
pub hex: Option<String>,
#[serde(skip_serializing)]
pub bits: Option<String>,
#[serde(skip_serializing)]
pub color_map: Option<String>,
}