< 返回版块

Mike Tang 发表于 2024-09-09 02:17

popusk - 一个终端下的电子书管理器

https://github.com/davudMagomedov/popusk

Nutype - 给你的newtype类型加上自定义错误处理

use nutype::nutype;

// Define a newtype `Name` with custom validation logic and a custom error type `NameError`.
// If validation fails, `Name` cannot be instantiated.
#[nutype(
    validate(with = validate_name, error = NameError),
    derive(Debug, AsRef, PartialEq),
)]
struct Name(String);

// Custom error type for `Name` validation.
// You can use `thiserror` or similar crates to provide more detailed error messages.
#[derive(Debug, PartialEq)]
enum NameError {
    TooShort { min: usize, length: usize },
    TooLong { max: usize, length: usize },
}

// Validation function for `Name` that checks its length.
fn validate_name(name: &str) -> Result<(), NameError> {
    const MIN: usize = 3;
    const MAX: usize = 10;
    let length = name.encode_utf16().count();

    if length < MIN {
        Err(NameError::TooShort { min: MIN, length })
    } else if length > MAX {
        Err(NameError::TooLong { max: MAX, length })
    } else {
        Ok(())
    }
}

fn main() {
    // Example usage: attempt to create a `Name` instance with an invalid value.
    assert_eq!(Name::try_new("Fo"), Err(NameError::TooShort { min: 3, length: 2 }));
}

https://github.com/greyblake/nutype

我们是否需要被封印(sealed)的trait

  1. 文章讨论了Rust中向trait添加新项目是否会破坏语义化版本(SemVer)的问题。

  2. 关键在于判断trait是否为"sealed"(封闭的)。如果trait是sealed,则下游crate无法实现它,因此添加新项目不会造成破坏性更改。

  3. 判断trait是否sealed涉及多个复杂因素:

    • 新添加的项目是否有默认实现
    • trait的函数签名是否使用了私有类型
    • trait本身是否可以被命名
    • trait的supertrait是否sealed
    • 是否存在blanket实现(泛型实现)
  4. 手动判断一个trait是否sealed非常耗时且容易出错。

  5. cargo-semver-checks工具(v0.35版本)能够自动、快速、准确地进行这种判断,大大简化了开发者的工作。

  6. 作者呼吁更多人使用和支持cargo-semver-checks,以改善Rust生态系统的SemVer合规性。

这篇文章强调了在Rust开发中自动化工具的重要性,特别是在处理复杂的语言特性和版本控制规则时。

https://predr.ag/blog/is-this-trait-sealed-or-not-sealed/

如何用一个Mutex就造成Tokio应用程序死锁

作者构造了一个小示例,演示了如何用一个Mutex就造成Tokio应用程序死锁。很适合学习。

https://turso.tech/blog/how-to-deadlock-tokio-application-in-rust-with-just-a-single-mutex

--

From 日报小组 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页