#validation #constraints #validate #user-input #business-rules

valid

通过组合原始验证函数来验证自定义类型。使用一个通用的 API 验证所有类型的业务规则,包括应用程序状态方面。一种通用的错误类型用于所有类型的约束违规。它旨在帮助提供对应用程序用户有意义的错误消息。

4 个版本 (2 个破坏性更新)

0.3.1 2020年5月24日
0.3.0 2019年9月7日
0.2.0 2019年9月5日
0.1.0 2019年9月4日

#949 in Rust 模式

Download history 1/week @ 2023-11-20 9/week @ 2023-11-27 9/week @ 2023-12-11 99/week @ 2023-12-18 36/week @ 2023-12-25 16/week @ 2024-01-08 25/week @ 2024-01-15 8/week @ 2024-02-12 19/week @ 2024-02-19 70/week @ 2024-02-26 25/week @ 2024-03-04

每月下载量 122
2 个软件包中使用(通过 unftp-auth-jsonfile

MIT/Apache

185KB
3.5K SLoC

valid

Latest Release Documentation License Build Status Test Coverage Rustc Version 1.39+

让业务逻辑只接受有效的值!

  • 通过组合原始验证函数来验证自定义类型。

  • 使用一个通用的 API 验证所有类型的业务规则,包括应用程序状态方面。

  • 所有类型的约束验证有一个通用的错误类型。它旨在帮助提供对应用程序用户有意义的错误消息。

valid 是 Rust 语言的验证库。它允许我们通过现有验证器的组合来编写自定义类型的验证函数。任何自定义编写的验证函数都可以用于构建更复杂类型的验证。

valid 软件包定义了实现验证函数的类型和特性,并使用它们来验证我们的值。此外,它还定义了原始约束。

大多数原始约束验证验证类型的一个属性。例如,Length 约束验证字符串、容器类型或切片的长度属性。如果约束属性没有覆盖 std-lib 的特性,则定义一个相关的特性,我们称之为“属性特性”。

内置约束为实现了相关属性特性的泛型类型 T 实现了。

valid 的一个目标是提供一个通用的 API,可以用于验证所有类型的业务规则。约束被分组到 3 个类别之一

  1. 字段级别约束,例如仅允许一组值
  2. 两个字段的关联,例如两个密码字段必须匹配或两个字段必须定义一个范围
  3. 验证应用程序状态的一些方面的业务规则,例如用户名必须是唯一的

任何违反约束的情况都会返回一个通用的错误类型,无论定义约束的业务规则的类别如何。

本软件包核心功能的一个原则是只依赖std库。对第三方crate类型如 bigdecimalchrono 的支持被实现为可选的crate功能。因此,您可以选择在您的应用程序中需要哪些类型以及您的项目中将有哪些依赖。

功能

  • 用于验证字段值、相关字段上的约束以及应用程序状态的通用验证API
  • 定义基本约束,如 LengthCharCountBoundMustMatch
  • 提供约束的验证函数的泛型实现
  • 组合验证函数以实现复杂类型的验证
  • 适用于所有类型约束验证错误的通用错误类型
  • 累积多个约束违规
  • 验证过程本身与验证错误的展示分离
  • ValidationError 的设计旨在帮助创建详细且对应用程序用户有帮助的错误消息。错误消息的本地化或国际化不是此crate的范围。
  • 核心功能不依赖于第三方crate
  • 错误码与 fluent 项目中的命名约定兼容
  • 错误类型 ValidationError 实现了 std::error::Error 并可以与 failure crate 一起使用
  • 通过 serde (可选crate功能 "serde1") 对 ValidationError 进行序列化和反序列化
  • 通过可选crate功能支持广泛使用的第三方crate类型
  • 支持 bigdecimal crate 的 BigDecimal (可选crate功能 "bigdecimal")
  • 支持 num-bigint crate 的 BigInt (可选crate功能 "num-bigint")
  • 支持 chrono crate 的 DateTimeNaiveDate (可选crate功能 "chrono")

使用方法

有关如何使用 valid 的详细信息,包括大量示例,请参阅 docs.rs 上的 API 文档。

要使用 valid,我们将它添加到我们的 Cargo.toml 文件中作为依赖项

[dependencies]
valid = "0.3"

valid 将其部分功能作为可选的crate功能提供。一些功能启用了对由本crate提供的类型的验证支持。其他功能启用了对附加约束的实现。要使用任何可选功能,我们必须在我们的 Cargo.toml 文件中启用相关的crate功能。所有crate功能都可以任意组合启用。

以下是所有crate功能的概述

crate功能 支持的类型 启用的约束
bigint BigInt
bigdecimal BigDecimal
chrono DateTimeNaiveDate
regex Pattern

此外,"serde1" 功能通过 serde crate 实现对 ValdiationError 的序列化和反序列化

[dependencies]
valid = { version = "0.3", features = ["serde1"] }

依赖关系

~0–1.1MB
~20K SLoC