generated from PlexSheep/baserepo
basic cli interface
This commit is contained in:
parent
f75111ae90
commit
eb1e78be96
|
@ -19,10 +19,11 @@ crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "pt"
|
name = "pt"
|
||||||
path = "src/bin/mod.rs"
|
path = "src/bin/main/mod.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "4.3.11"
|
clap = { version = "4.3.11", features = ["derive"] }
|
||||||
|
clap-verbosity-flag = "2.0.1"
|
||||||
env_logger = "0.10.0"
|
env_logger = "0.10.0"
|
||||||
gag = "1.0.0"
|
gag = "1.0.0"
|
||||||
log = { version = "0.4.19", features = ["max_level_trace", "release_max_level_trace"] }
|
log = { version = "0.4.19", features = ["max_level_trace", "release_max_level_trace"] }
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
//! # args module
|
|
||||||
//!
|
|
||||||
//! The args module of pt is used to parse commandline arguments. For this, it makes use of
|
|
||||||
//! [`clap`].
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
//! # args module
|
||||||
|
//!
|
||||||
|
//! The args module of pt is used to parse commandline arguments. For this, it makes use of
|
||||||
|
//! [`clap`].
|
||||||
|
|
||||||
|
//// ATTRIBUTES ////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// we want docs
|
||||||
|
#![warn(missing_docs)]
|
||||||
|
#![warn(rustdoc::missing_crate_level_docs)]
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// we want Debug everywhere.
|
||||||
|
#![warn(missing_debug_implementations)]
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// enable clippy's extra lints, the pedantic version
|
||||||
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
|
//// IMPORTS ///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
use clap::{Args, Parser, Subcommand};
|
||||||
|
|
||||||
|
use clap_verbosity_flag::Verbosity;
|
||||||
|
|
||||||
|
//// CONSTANTS /////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const ABOUT_ROOT: &'static str = r##"
|
||||||
|
Personal multi tool
|
||||||
|
|
||||||
|
A collection of tools made for personal use
|
||||||
|
"##;
|
||||||
|
static LONG_ABOUT_ROOT: &'static str = r##"
|
||||||
|
|
||||||
|
libpt is a personal general purpose library, offering this executable, a python module and a
|
||||||
|
dynamic library.
|
||||||
|
"##;
|
||||||
|
|
||||||
|
//// STATICS ///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// ## Main struct for parsing CLI arguments
|
||||||
|
#[derive(Debug, Parser)]
|
||||||
|
#[command(
|
||||||
|
author,
|
||||||
|
version,
|
||||||
|
about = ABOUT_ROOT,
|
||||||
|
long_about = format!("{}{}", ABOUT_ROOT ,LONG_ABOUT_ROOT),
|
||||||
|
help_template =
|
||||||
|
r#"libpt: {version}{about-section}Author:
|
||||||
|
{author-with-newline}
|
||||||
|
{usage-heading} {usage}{all-args}{tab}"#
|
||||||
|
)]
|
||||||
|
pub struct Cli {
|
||||||
|
/// set a verbosity, multiple allowed (f.e. -vvv)
|
||||||
|
#[command(flatten)]
|
||||||
|
pub verbose: Verbosity,
|
||||||
|
|
||||||
|
/// choose a subcommand
|
||||||
|
///
|
||||||
|
///
|
||||||
|
#[command(subcommand)]
|
||||||
|
pub command: Commands,
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#[derive(Debug, Args)]
|
||||||
|
pub struct NetMonitorArgs {
|
||||||
|
#[clap(short)]
|
||||||
|
test: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#[derive(Debug, Args)]
|
||||||
|
pub struct NetDiscoverArgs {
|
||||||
|
#[clap(short)]
|
||||||
|
test: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
//// ENUMS /////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// # Top level commands
|
||||||
|
#[derive(Debug, Subcommand)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum Commands {
|
||||||
|
/// networking commands
|
||||||
|
Net {
|
||||||
|
#[command(subcommand)]
|
||||||
|
command: NetCommands,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#[derive(Debug, Subcommand)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub enum NetCommands {
|
||||||
|
/// monitoring
|
||||||
|
Monitor(NetMonitorArgs),
|
||||||
|
///
|
||||||
|
Discover(NetDiscoverArgs),
|
||||||
|
}
|
||||||
|
|
||||||
|
//// STRUCTS ///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// IMPLEMENTATION ////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// PRIVATE FUNCTIONS /////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,75 @@
|
||||||
|
//! # Main executable of pt
|
||||||
|
//!
|
||||||
|
//! This module contains all code specific to the executable version of [`libpt`]: `pt`.
|
||||||
|
|
||||||
|
//// ATTRIBUTES ////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// we want docs
|
||||||
|
#![warn(missing_docs)]
|
||||||
|
#![warn(rustdoc::missing_crate_level_docs)]
|
||||||
|
// we want Debug everywhere.
|
||||||
|
#![warn(missing_debug_implementations)]
|
||||||
|
// enable clippy's extra lints, the pedantic version
|
||||||
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
|
use std::process::exit;
|
||||||
|
|
||||||
|
//// IMPORTS ///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
use libpt::logger;
|
||||||
|
|
||||||
|
use log::{debug, error, info, trace, warn};
|
||||||
|
|
||||||
|
use env_logger;
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
|
|
||||||
|
mod args;
|
||||||
|
use args::*;
|
||||||
|
|
||||||
|
//// CONSTANTS /////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Exit code: Bad command line argument
|
||||||
|
const EXIT_BAD_ARG: i32 = 1;
|
||||||
|
|
||||||
|
//// STATICS ///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// MACROS ////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// ENUMS /////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// STRUCTS ///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// IMPLEMENTATION ////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//// PRIVATE FUNCTIONS /////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// ## Main function of the `pt` binary
|
||||||
|
fn main() {
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
std::env::set_var(logger::LOGGER_ENV_KEY, "trace");
|
||||||
|
|
||||||
|
let cli = Cli::parse();
|
||||||
|
// set up our logger to use the given verbosity
|
||||||
|
env_logger::Builder::new().filter_level(cli.verbose.log_level_filter()).init();
|
||||||
|
|
||||||
|
trace!("started the main function");
|
||||||
|
trace!("{:?}", cli);
|
||||||
|
|
||||||
|
match cli.command {
|
||||||
|
Commands::Net { command } => {
|
||||||
|
net(command)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// ## Process `Net` subcommands
|
||||||
|
fn net(command: NetCommands) {
|
||||||
|
match command {
|
||||||
|
NetCommands::Monitor(args) => {
|
||||||
|
dbg!(args);
|
||||||
|
}
|
||||||
|
NetCommands::Discover(args) => {
|
||||||
|
dbg!(args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +0,0 @@
|
||||||
//! # Main executable of pt
|
|
||||||
//!
|
|
||||||
//! This module contains all code specific to the executable version of `libpt`: `pt`.
|
|
||||||
mod args;
|
|
||||||
|
|
||||||
/// ## Main function of the `pt` binary
|
|
||||||
pub fn main() {
|
|
||||||
println!("hello world");
|
|
||||||
}
|
|
|
@ -7,25 +7,21 @@
|
||||||
//! - python module (with [`PyO3`](pyo3))
|
//! - python module (with [`PyO3`](pyo3))
|
||||||
//! - executable (as `pt`)
|
//! - executable (as `pt`)
|
||||||
//!
|
//!
|
||||||
//! For more info on the linkage types, please refer to the
|
//! For more info on the linkage types, please refer to the
|
||||||
//! [rust reference](https://doc.rust-lang.org/reference/linkage.html).
|
//! [rust reference](https://doc.rust-lang.org/reference/linkage.html).
|
||||||
|
|
||||||
//// ATTRIBUTES ////////////////////////////////////////////////////////////////////////////////////
|
//// ATTRIBUTES ////////////////////////////////////////////////////////////////////////////////////
|
||||||
// we want docs
|
// we want docs
|
||||||
#![warn(missing_docs)]
|
#![warn(missing_docs)]
|
||||||
#![warn(rustdoc::missing_crate_level_docs)]
|
#![warn(rustdoc::missing_crate_level_docs)]
|
||||||
|
|
||||||
// we want Debug everywhere. This is a library and there will be many bugs.
|
// we want Debug everywhere. This is a library and there will be many bugs.
|
||||||
#![warn(missing_debug_implementations)]
|
#![warn(missing_debug_implementations)]
|
||||||
|
|
||||||
// enable clippy's extra lints, the pedantic version
|
// enable clippy's extra lints, the pedantic version
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
//// IMPORTS ///////////////////////////////////////////////////////////////////////////////////////
|
//// IMPORTS ///////////////////////////////////////////////////////////////////////////////////////
|
||||||
/// contains useful code, such as macros, for general use
|
/// contains useful code, such as macros, for general use
|
||||||
pub mod common;
|
pub mod common;
|
||||||
/// contains code specific to the executable
|
|
||||||
pub mod bin;
|
|
||||||
/// logger used by libpt
|
/// logger used by libpt
|
||||||
pub mod logger;
|
pub mod logger;
|
||||||
/// networking tools
|
/// networking tools
|
||||||
|
|
|
@ -12,12 +12,8 @@
|
||||||
// we want docs
|
// we want docs
|
||||||
#![warn(missing_docs)]
|
#![warn(missing_docs)]
|
||||||
#![warn(rustdoc::missing_crate_level_docs)]
|
#![warn(rustdoc::missing_crate_level_docs)]
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// we want Debug everywhere.
|
// we want Debug everywhere.
|
||||||
#![warn(missing_debug_implementations)]
|
#![warn(missing_debug_implementations)]
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// enable clippy's extra lints, the pedantic version
|
// enable clippy's extra lints, the pedantic version
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
|
@ -38,3 +34,5 @@
|
||||||
//// PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////////////////////
|
//// PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
//// PRIVATE FUNCTIONS /////////////////////////////////////////////////////////////////////////////
|
//// PRIVATE FUNCTIONS /////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Reference in New Issue