1. ValueEnum 当我们需要使用自定义的枚举类型作为参数时,我们可以使用 clap::clap_derive::ValueEnum。 1.1 derive 方式 直接上例子: use clap::{clap_derive::ValueEnum…
1. axum middleware axum crate 本身也有一些基础的 middleware 机制,在实现简单的逻辑时可以不用接入 tower。 1.1. 调用顺序 根据这篇文章的介绍,原生 axum middleware 的声明层级和调用顺…
1. 命令行运行特定单测 总有需要用命令行跑单测的场景,比如 vscode 上的 rust-analyzer 插件突然坏掉。。这个时候我们需要: cargo test --package my_project --bin test -- api::h…
1. 业务逻辑中的异步日志 在应用的初期版本,所有日志可能都是通过 tracing 输出到外部文件的,这是非常正常的情况;等到开始进行可观测能力建设后,就需要引入一些日志中间件,比如将一些重要日志输出到 SLS 。这些逻辑往往会穿插在我们业务函数中,…
1. 在 tokio::main 宏中指定 runtime 的线程个数 默认是多线程 runtime,worker 个数为 CPU 的核心数。可以通过在 tokio::main 中增加如下内容来制定 worker 个数: #[tokio::main(…
1. 换中科大镜像 rustup 安装方式不知从何时起被墙了 = = 换用国内镜像,加环境变量: export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static export RUS…
1. 共性与区别 写异步 rust 时,我们经常需要一种一次性的通知手段,用于实现线程同步。tokio 提供了两种满足上述需求的同步工具:tokio::sync::oneshot::channel 和 tokio::sync::Notify。 二者主…
Pin 是一个结构 struct,Unpin 是一个特征 trait。 Pin 唯一的结构体成员就是一个指针(例如引用和 Box)。它能保证这个指针指向的数据不被移动。 Unpin 代表数据可以被安全地移动,!Unpin 代表数据不可以被安全移动。通…
1. 基本结构 入口类型 ConnectionPool 由一个 Hashmap pool 和一个 lru Lru 组成。 /// Connection pool /// /// [ConnectionPool] holds reusable conn…
1. String, &str 和 str 想要搞清楚这三者的差别,要从 str 开始说起。 1.1. str 和 &str str 是字符串切片(string slice),是对部分连续的 UTF8 字符序列的引用。 所有的切片类型…