#type-id #prefix #validation #sanitization #user-input

typeid_prefix

一个实现了《TypeID》规范中TypePrefix部分的类型安全版本的Rust库

4个版本

1.3.0-alpha 2024年7月12日
1.2.0-alpha 2024年7月12日

234数据结构

Download history 426/week @ 2024-07-06 213/week @ 2024-07-13 6/week @ 2024-07-20 103/week @ 2024-07-27

748 每月下载次数
mti 中使用

MIT/Apache

31KB
381

TypeID 前缀

Crates.io Documentation License: MIT OR Apache-2.0

一个实现了《TypeID》规范中TypePrefix部分的类型安全版本的Rust库。

TypeIdSuffix crate 结合,构成mti (Magic Type Id) crate

使用mti (Magic Type Id) crate 实现TypeID规范的全面实现。

功能

  • 类型安全:确保TypeID前缀符合规范。
  • 验证:为TypeID前缀提供健壮的验证。
  • 净化:提供将输入字符串清理和净化为有效TypeID前缀的方法。
  • 零成本抽象:设计用于具有最小运行时开销。
  • 可选跟踪:与tracing crate集成以进行日志记录(可选功能)。

安装

将此添加到您的Cargo.toml

[dependencies]
typeid_prefix = "1.1.1-beta.1"

要启用跟踪支持,请添加

[dependencies]
typeid_prefix = { version = "1.1.1-beta.1", features = ["instrument"] }

用法

基本用法

use typeid_prefix::{TypeIdPrefix, Sanitize};
use std::convert::TryFrom;

fn main() {
    // Create a TypeIdPrefix from a valid string
    let prefix = TypeIdPrefix::try_from("user").unwrap();
    println!("Valid prefix: {}", prefix);

    // Attempt to create from an invalid string
    let result = TypeIdPrefix::try_from("Invalid_Prefix");
    assert!(result.is_err());

    // Sanitize an invalid string
    let sanitized = "Invalid_Prefix123".sanitize_and_create();
    println!("Sanitized prefix: {}", sanitized);
}

验证

TypeIdPrefix类型确保所有实例都符合TypeID规范

  • 最大长度为63个字符
  • 只包含小写ASCII字母和下划线
  • 不以下划线开始或结束
  • 以小写字母开始和结束
use typeid_prefix::TypeIdPrefix;
use std::convert::TryFrom;

fn validate_prefix(input: &str) {
    match TypeIdPrefix::try_from(input) {
        Ok(prefix) => println!("Valid prefix: {}", prefix),
        Err(e) => println!("Invalid prefix: {}", e),
    }
}

fn main() {
    validate_prefix("valid_prefix");
    validate_prefix("Invalid_Prefix");
    validate_prefix("_invalid");
    validate_prefix("toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong");
}

净化

Sanitize trait提供了一个从任何字符串创建有效TypeIdPrefix的方法

use typeid_prefix::Sanitize;

fn main() {
    let sanitized = "Invalid String 123!@#".sanitize_and_create();
    println!("Sanitized: {}", sanitized); // Outputs: invalidstring
}

可选跟踪

当启用instrument功能时,该crate将使用tracing crate记录验证错误

[dependencies]
typeid_prefix = { version = "1.0.0", features = ["instrument"] }
use typeid_prefix::Sanitize;

fn main() {
    // Set up your tracing subscriber here
    let _sanitized = "Invalid_Prefix!@#".sanitize_and_create();
    // Validation errors will be logged via tracing
}

用例

  • 数据库系统:使用TypeIdPrefix确保数据库模式或ORM映射中类型前缀的一致性和有效性。
  • API开发:验证和净化需要类型前缀的API端点的用户输入。
  • 代码生成:为代码生成工具或宏生成有效的类型前缀。
  • 配置管理:确保配置键或标识符符合一致的格式。

安全性和正确性

此软件包已经经过彻底测试和验证

  • 全面单元测试
  • 使用 proptest 的属性测试
  • 模糊测试
  • 使用 Kani 的形式验证

这些措施确保软件包在正常使用情况下行为正确且不会崩溃。

最低支持的 Rust 版本 (MSRV)

此软件包保证可以在 Rust 1.60.0 及更高版本上编译。

许可证

本项目采用以下任一许可证:

任由您选择。

贡献

欢迎贡献!请随时提交拉取请求。

致谢

此软件包实现了 Jetpack.io 创建的 TypeID 规范 的一部分。

依赖项

~215KB