#toolbox #utilities #tool #logging #ssh-client

utils-box

一套各种小型RUST工具箱,使我们的生活更轻松

5个版本

0.1.5 2023年10月18日
0.1.4 2023年10月18日
0.1.3 2023年10月16日
0.1.2 2023年10月16日
0.1.1 2023年10月3日

#403数学

每月 下载 35

MIT 协议

310KB
3.5K SLoC

Coverage Status

摘要

一个工具箱库,包含了一系列有用的Rust小工具,使我们在编写Rust应用程序时生活更轻松。

提供工具

数学

一组在各种DSP和其他应用中使用的有用数学方法

存档

从Tar、Gz和Zip文件中提取文件

最小示例

let archive: PathBuf = std::env::current_exe()
    .unwrap()
    .parent()
    .unwrap()
    .join("test_archive.tar.gz");

let file: PathBuf = "treasure.hex".into();

let destination: PathBuf = std::env::current_exe()
    .unwrap()
    .parent()
    .unwrap();

archives::extract_file(archive, ArchiveType::Gz, file, destination).unwrap();

在不同原始比特流表示之间进行转换

最小示例

let received_bit_stream: u64 = 0b110101000100111010110;

let bytes = bits::bits_to_vec(received_bit_stream,21);

println!("Received bit stream: {} ", bits::bit_vec_to_hex_string(&bytes));

配置

通过检查更改、更新等来操作INI样式配置文件

最小示例

    let mut config_changes = ini_compare(
        &old_config_path.to_path_buf(),
        &new_config_path.to_path_buf(),
    )
    .unwrap();

   println!("{:#?}", config_changes);

记录器

快速初始化终端和文件记录器。用于将记录打印到记录或stdout(如果没有初始化全局记录器)的宏

最小示例

    log_info!("INFO Test TO PRINTLN!");
    log_debug!("DEBUG Test TO PRINTLN!");

    terminal_logger_init(LevelFilter::Debug);

    log_info!("INFO Test TO LOGGER!");
    log_debug!("DEBUG Test TO LOGGER!");

路径

在已知或未知路径的目录中搜索特定文件

最小示例

    let paths = IncludePathsBuilder::new()
            .include_exe_dir()
            .include_known("/home/user/")
            .include_unknown("utils-box")
            .build();

        let pattern = "test_*.tar";

        let file_found_in = paths.search_glob(pattern);

计时器和时间跟踪器

在二进制文件中的不同点跟踪执行时间。打印记录。

最小示例

    let mut s = TimeKeeper::init();
    let mut t = TimeKeeper::init();

    s.totals();

    s.lap("init");

    for _ in 0..5 {
        std::thread::sleep(Duration::from_millis(5));
        s.lap("loop");
        t.lap("loop");
    }
    s.lap_totals("loop");
    std::thread::sleep(Duration::from_millis(1234));
    s.lap("after");

    s.totals();
    t.totals();

    s.merge(t);

    s.totals();

版本

使用semver.org表示法从字符串中解析版本

最小示例

   let version = "0.9.2-1e341234";

    let mut expected = Version::new(0, 9, 2);
    expected.pre = Prerelease::new("1e341234").unwrap();

    assert_eq!(semver_parse(version).unwrap(), expected);

SSH客户端

通过SSH连接到服务器以执行命令、上传和下载文件

最小示例

    let ssh = SshClient::local("user".to_string(), "1234".to_string()).unwrap();

    let stdout = ssh.execute_cmd("ls").unwrap();

    println!("{:?}", stdout);

TCP客户端

通过TCP连接到套接字以发送和接收数据

最小示例

    let mut tcp_client = TcpClient::new("192.168.1.17".to_string(), 36457)?;

    let data: Vec<u8> = vec![8, 30, 15, 30, 5, 19, 0, 7];

    tcp_client.send(&data)?;

    // Block and wait for response
    let resp = tcp_client.receive()?;

     println!("{:?}", resp);

TCP客户端

通过UDP连接到套接字以发送和接收数据

最小示例

     let mut udp =
            UdpClient::new("0.0.0.0".to_string(), "192.168.1.31".to_string(), 6123).unwrap();

    udp.send(b"\r").unwrap();

    // Block and wait for response
    let data = udp.receive().unwrap();

    println!("{:?} => {}", data, String::from_utf8_lossy(&data));

ZMQ客户端

连接到ZMQ服务器以发送和接收数据

最小示例

    let zmq_client = ZmqClient::new(("192.168.1.17".to_string(), 36457)?;

    let data: Vec<u8> = vec![8, 30, 15, 30, 5, 19, 0, 7];

    zmq_client.send(&data)?;

    // Block and wait for response
    let resp = zmq_client.receive()?;

    println!("{:?}", resp);

依赖项

~20–37MB
~602K SLoC