Libraries
Articles in Section
- Anyhow Error Handler
Anyhow error-handling library
- clap CLI
Clap CLI library
- Command CLI
CLI Stdin / Stderr commands
- itertools
Itertools library
- rand
Random numbers library
- regex
Regular Expressions library
- serde
Serialization / Deserialization Library
- sysinfo
System Information Library
- Tokio tracing
Observability in Rust with Tokio tracing lib and OpenTelemetry
Одноразовые библиотеки
Если библиотека нужна лишь в 1 функции, можно в ней объявить её использование.
pub fn hash_password(password: &str) -> String {
use sha2::Digest;
// ... тело функции ...
}Library Unit-tests
Примеры:
pub fn greet_user(name: &str) -> String {
format!("Hello {name}")
}
pub fn login(username: &str, password: &str) -> bool {
username == "admin" && password == "P@ssw0rd"
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_greet_user() {
assert_eq!("Hello Alex", greet_user("Alex"));
}
#[test]
fn test_login() {
assert!(login("admin", "P@ssw0rd"));
}
}Запуск тестов - командой cargo test
Паника в процессе тестов
Можно поймать панику во всём тесте с помощью ключа #[should_panic]:
#[test]
#[should_panic(expected = "assertion failed")]
fn test_example() {
let room_nums = [1, 2, 3, 4];
let max_length = room_nums.len();
let index_out_of_bounds = room_nums.get(max_length + 1);
assert!(index_out_of_bounds.is_some()); // паника будет тут
}❗Если паники по факту не будет, тест провалится.
Можно перехватить панику в конкретной команде с помощью std::panic::catch_unwind():
#[test]
fn test_example() {
let room_nums = [1, 2, 3, 4];
let max_length = room_nums.len();
// проверка-перехват паники:
let result = std::panic::catch_unwind(|| room_nums.get(max_length + 1));
}