karton/src/args.rs

93 lines
2.3 KiB
Rust
Raw Normal View History

2022-10-25 12:51:59 +03:00
use clap::Parser;
use lazy_static::lazy_static;
use std::convert::Infallible;
use std::fmt;
use std::net::IpAddr;
use std::str::FromStr;
lazy_static! {
pub static ref ARGS: Args = Args::parse();
}
#[derive(Parser, Debug, Clone)]
#[clap(author, version, about, long_about = None)]
pub struct Args {
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_AUTH_USERNAME")]
pub auth_username: Option<String>,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_AUTH_PASSWORD")]
pub auth_password: Option<String>,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_EDITABLE")]
pub editable: bool,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_FOOTER_TEXT")]
pub footer_text: Option<String>,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_HIDE_FOOTER")]
pub hide_footer: bool,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_HIDE_HEADER")]
pub hide_header: bool,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_HIDE_LOGO")]
pub hide_logo: bool,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_NO_LISTING")]
pub no_listing: bool,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_HIGHLIGHTSYNTAX")]
pub highlightsyntax: bool,
2022-10-25 12:51:59 +03:00
#[clap(short, long, env = "MICROBIN_PORT", default_value_t = 8080)]
pub port: u16,
#[clap(short, long, env="MICROBIN_BIND", default_value_t = IpAddr::from([0, 0, 0, 0]))]
pub bind: IpAddr,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_PRIVATE")]
pub private: bool,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_PURE_HTML")]
pub pure_html: bool,
#[clap(long, env="MICROBIN_PUBLIC_PATH", default_value_t = PublicUrl(String::from("")))]
pub public_path: PublicUrl,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_READONLY")]
pub readonly: bool,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_TITLE")]
pub title: Option<String>,
2022-10-25 12:51:59 +03:00
#[clap(short, long, env = "MICROBIN_THREADS", default_value_t = 1)]
pub threads: u8,
2022-10-25 12:51:59 +03:00
#[clap(long, env = "MICROBIN_WIDE")]
pub wide: bool,
2022-10-25 12:51:59 +03:00
#[clap(short, long, env = "MICROBIN_NO_FILE_UPLOAD")]
2022-09-30 22:10:43 -08:00
pub no_file_upload: bool,
2022-11-01 21:15:13 +08:00
#[clap(long, env = "MICROBIN_HASH_IDS")]
pub hash_ids: bool,
}
#[derive(Debug, Clone)]
pub struct PublicUrl(pub String);
impl fmt::Display for PublicUrl {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
impl FromStr for PublicUrl {
type Err = Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let uri = s.strip_suffix('/').unwrap_or(s).to_owned();
Ok(PublicUrl(uri))
}
2022-10-25 12:51:59 +03:00
}