restructure
Cargo Check, Format, Fix and Test / cargo CI (push) Failing after 1s Details

This commit is contained in:
Christoph J. Scherr 2024-01-17 13:08:42 +01:00
parent 1100aef59c
commit 4dfb406290
Signed by: cscherrNT
GPG Key ID: 8E2B45BC51A27EA7
9 changed files with 33 additions and 252 deletions

View File

@ -5,12 +5,10 @@ members = [
"members/libpt-core", "members/libpt-core",
"members/libpt-bintols", "members/libpt-bintols",
"members/libpt-math", "members/libpt-math",
"members/libpt-bin",
"members/libpt-log", "members/libpt-log",
"members/libpt-net", "members/libpt-net",
"members/libpt-hedu",
] ]
default-members = [".", "members/libpt-bin", "members/libpt-core"] default-members = [".", "members/libpt-core"]
[workspace.package] [workspace.package]
publish = true publish = true
version = "0.2.5" version = "0.2.5"
@ -36,6 +34,7 @@ libpt-bintols = { version = "0.2.5", ath = "../libpt-bintols" }
[package] [package]
name = "libpt" name = "libpt"
autobins = true
publish.workspace = true publish.workspace = true
version.workspace = true version.workspace = true
edition.workspace = true edition.workspace = true
@ -50,15 +49,13 @@ categories.workspace = true
[features] [features]
default = ["log", "core"] default = ["log", "core"]
all = ["default", "math", "log", "bintols", "net", "ccc", "hedu", "core"]
core = [] core = []
fw = [] math = ["dep:libpt-math"]
math = [] log = ["dep:libpt-log"]
log = [] bintols = ["dep:libpt-bintols"]
bintols = [] net = ["dep:libpt-net"]
net = []
ccc = ["math"] ccc = ["math"]
hedu = ["bintols"] bin = ["bintols", "net", "dep:clap", "dep:clap-num", "dep:clap-verbosity-flag"]
[lib] [lib]
name = "libpt" name = "libpt"
@ -68,13 +65,21 @@ crate-type = [
"rlib", "rlib",
] ]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [[bin]]
name = "ccc"
path = "src/ccc/mod.rs"
[[bin]]
name = "hedu"
path = "src/hedu/mod.rs"
[dependencies] [dependencies]
libpt-bintols = { version = "0.2.5", path = "members/libpt-bintols" } libpt-core = { version = "0.2.0-alpha.2", path = "members/libpt-core", registry = "cscherr" }
libpt-core = { version = "0.2.5", path = "members/libpt-core" } libpt-bintols = { version = "0.2.0-alpha.2", optional = true, path = "members/libpt-bintols", registry = "cscherr" }
libpt-hedu = { version = "0.2.5", path = "members/libpt-hedu" } libpt-log = { version = "0.2.0-alpha.2", optional = true, path = "members/libpt-log", registry = "cscherr" }
libpt-log = { version = "0.2.5", path = "members/libpt-log" } libpt-math = { version = "0.2.0-alpha.2", optional = true, path = "members/libpt-math", registry = "cscherr" }
libpt-math = { version = "0.2.5", path = "members/libpt-math" } libpt-ccc = { version = "0.2.0-alpha.2", optional = true, path = "members/libpt-ccc", registry = "cscherr" }
libpt-ccc = { version = "0.2.5", path = "members/libpt-ccc" } libpt-net = { version = "0.2.0-alpha.2", optional = true, path = "members/libpt-net", registry = "cscherr" }
libpt-net = { version = "0.2.5", path = "members/libpt-net" } clap = { version = "4.4.4", features = ["derive"], optional = true }
clap-num = { version = "1.0.2", optional = true }
clap-verbosity-flag = { version = "2.0.1", optional = true }

View File

@ -1,124 +0,0 @@
//! # args module
//!
//! The args module of libpt 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::{Parser, Subcommand};
use clap_num::number_range;
use clap_verbosity_flag::{InfoLevel, Verbosity};
//// CONSTANTS /////////////////////////////////////////////////////////////////////////////////////
/// short about section displayed in help
const ABOUT_ROOT: &'static str = r##"
Personal multi tool
A collection of tools made for personal use
"##;
/// longer about section displayed in help, is combined with [the short help](ABOUT_ROOT)
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
///
/// This struct describes the complete commandline options/arguments that [pt](crate) can take. It
/// makes use of composition to build a complex system of commands, subcommands, flags and options.
#[derive(Debug, Clone, 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 {
// clap_verbosity_flag seems to make this a global option implicitly
/// set a verbosity, multiple allowed (f.e. -vvv)
#[command(flatten)]
pub verbose: Verbosity<InfoLevel>,
/// show logger meta
#[arg(short, long, global = true)]
pub log_meta: bool,
/// choose a subcommand
#[command(subcommand)]
pub command: Commands,
}
//// ENUMS /////////////////////////////////////////////////////////////////////////////////////////
/// ## defines the top level commands
#[derive(Debug, Clone, Subcommand)]
#[non_exhaustive]
pub enum Commands {
/// networking commands
Net {
/// Networking subcommands
#[command(subcommand)]
command: NetCommands,
},
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/// ## defines the networking commands
#[derive(Debug, Clone, Subcommand)]
#[non_exhaustive]
pub enum NetCommands {
/// monitor your network
Monitor {
/// repeat every N seconds, 0 means no repeat
#[clap(short, long, default_value_t = 0, name = "N")]
repeat: u64,
/// At what percentage should the try be considered successful
#[clap(short, long, default_value_t = 100, value_parser=max100)]
success_ratio: u8,
/// extra URLs to check with
extra_urls: Vec<String>,
/// Don't check for default URLs
#[clap(short, long)]
no_default: bool,
/// set a timeout (in ms)
#[clap(short, long, default_value_t = 100)]
timeout: u64,
},
/// discover hosts in your network
Discover {},
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//// STRUCTS ///////////////////////////////////////////////////////////////////////////////////////
//// IMPLEMENTATION ////////////////////////////////////////////////////////////////////////////////
//// PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////////////////////
//// PRIVATE FUNCTIONS /////////////////////////////////////////////////////////////////////////////
/// custom value parser, only allow 0 to 100
fn max100(s: &str) -> Result<u8, String> {
number_range(s, 0, 100)
}

View File

@ -1,102 +0,0 @@
//! # Main executable of libpt
//!
//! This module contains all code specific to the executable version of [`pt`]: [`pt`](crate).
//!
//!
//// 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 libpt::{log::*, net::monitoring::uptime};
use clap::Parser;
pub mod args;
use args::*;
//// CONSTANTS /////////////////////////////////////////////////////////////////////////////////////
#[allow(dead_code)]
//// STATICS ///////////////////////////////////////////////////////////////////////////////////////
//// MACROS ////////////////////////////////////////////////////////////////////////////////////////
//// ENUMS /////////////////////////////////////////////////////////////////////////////////////////
//// STRUCTS ///////////////////////////////////////////////////////////////////////////////////////
//// IMPLEMENTATION ////////////////////////////////////////////////////////////////////////////////
//// PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////////////////////
/// ## Main function of the [`pt`](crate) binary
pub fn main() {
let cli = Cli::parse();
let ll: Level = match cli.verbose.log_level().unwrap().as_str() {
"TRACE" => Level::TRACE,
"DEBUG" => Level::DEBUG,
"INFO" => Level::INFO,
"WARN" => Level::WARN,
"ERROR" => Level::ERROR,
_ => {
eprintln!("'{}' is not a valid loglevel", cli.verbose.to_string());
std::process::exit(1);
}
};
if cli.log_meta {
Logger::init(None, Some(ll)).expect("could not initialize Logger");
} else {
// less verbose version
Logger::init_mini(Some(ll)).expect("could not initialize Logger");
}
trace!("started the main function");
trace!("{:?}", &cli);
match cli.clone().command {
Commands::Net { command } => net(&cli, command),
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/// ## Process [`Net`](args::NetCommands) subcommands
pub fn net(cli: &Cli, command: NetCommands) {
match command {
NetCommands::Monitor {
repeat,
success_ratio,
extra_urls,
no_default,
timeout,
} => {
let urls: Vec<String>;
if no_default {
urls = extra_urls;
} else {
let mut combined: Vec<String> = Vec::new();
for i in uptime::DEFAULT_CHECK_URLS {
combined.push(i.to_string());
}
combined.extend(extra_urls);
urls = combined;
}
let _verbose = cli.verbose.log_level().is_some();
if repeat > 0 {
uptime::continuous_uptime_monitor(success_ratio, urls, repeat * 1000, timeout);
} else {
let status = uptime::UptimeStatus::new(success_ratio, urls, timeout);
info!("status:\n{}", status);
}
}
NetCommands::Discover {} => {
todo!()
}
}
}
//// PRIVATE FUNCTIONS /////////////////////////////////////////////////////////////////////////////

View File

@ -16,5 +16,7 @@ categories.workspace = true
[dependencies] [dependencies]
num-traits = "0.2.16" num-traits = "0.2.16"
libpt-core = { version = "0.2.3", path = "../libpt-core" } libpt-core = { version = "0.2.0-alpha.2", path = "../libpt-core", registry = "cscherr" }
libpt-log = { version = "0.2.3", path = "../libpt-log" } libpt-log = { version = "0.2.0-alpha.2", path = "../libpt-log", registry = "cscherr" }
anyhow = { workspace = true }
thiserror = { workspace = true }

View File

@ -6,7 +6,7 @@
//! This crate is currently empty. //! This crate is currently empty.
use anyhow::{bail, Result}; use anyhow::{bail, Result};
use libpt_bintols::display::{bytes_to_bin, humanbytes}; use crate::display::{bytes_to_bin, humanbytes};
use libpt_log::{debug, error, info, trace, warn}; use libpt_log::{debug, error, info, trace, warn};
use std::io::{prelude::*, BufReader, Read, SeekFrom}; use std::io::{prelude::*, BufReader, Read, SeekFrom};

View File

@ -22,6 +22,6 @@ pub const ZEBI: u128 = 2u128.pow(70);
/// 2^80 /// 2^80
pub const YOBI: u128 = 2u128.pow(80); pub const YOBI: u128 = 2u128.pow(80);
// use libpt_core;
pub mod datalayout; pub mod datalayout;
pub mod display; pub mod display;
pub mod hedu;

View File

@ -6,6 +6,7 @@
//! expression. //! expression.
//// ATTRIBUTES //////////////////////////////////////////////////////////////////////////////////// //// ATTRIBUTES ////////////////////////////////////////////////////////////////////////////////////
#![cfg(feature = "bin")]
// we want docs // we want docs
#![warn(missing_docs)] #![warn(missing_docs)]
#![warn(rustdoc::missing_crate_level_docs)] #![warn(rustdoc::missing_crate_level_docs)]

View File

@ -3,6 +3,7 @@
//! Dump data to a fancy format. //! Dump data to a fancy format.
//// ATTRIBUTES //////////////////////////////////////////////////////////////////////////////////// //// ATTRIBUTES ////////////////////////////////////////////////////////////////////////////////////
#![cfg(feature = "bin")]
// we want docs // we want docs
#![warn(missing_docs)] #![warn(missing_docs)]
#![warn(rustdoc::missing_crate_level_docs)] #![warn(rustdoc::missing_crate_level_docs)]
@ -13,12 +14,12 @@
//// IMPORTS /////////////////////////////////////////////////////////////////////////////////////// //// IMPORTS ///////////////////////////////////////////////////////////////////////////////////////
use libpt::{hedu::*, log::*}; use libpt::{bintols::hedu::*, log::*};
use clap::Parser; use clap::Parser;
use clap_verbosity_flag::{InfoLevel, Verbosity}; use clap_verbosity_flag::{InfoLevel, Verbosity};
use std::{fs::File, io::IsTerminal}; use std::{fs::File, io::IsTerminal, eprintln};
//// TYPES ///////////////////////////////////////////////////////////////////////////////////////// //// TYPES /////////////////////////////////////////////////////////////////////////////////////////

View File

@ -12,8 +12,6 @@ pub use libpt_bintols as bintols;
pub use libpt_ccc as ccc; pub use libpt_ccc as ccc;
#[cfg(feature = "core")] #[cfg(feature = "core")]
pub use libpt_core as core; pub use libpt_core as core;
#[cfg(feature = "hedu")]
pub use libpt_hedu as hedu;
#[cfg(feature = "log")] #[cfg(feature = "log")]
pub use libpt_log as log; pub use libpt_log as log;
#[cfg(feature = "math")] #[cfg(feature = "math")]