moon run examples/validatelet rules = [
Rule::int_range("db.port", 1L, 65535L),
Rule::string_len("db.user", 1, 64),
Rule::one_of("log.level", ["debug", "info", "warn", "error"]),
Rule::allowed_keys("db", ["host", "port", "user"]),
]
cfg.validate(rules) // 遇到第一个错误就停
cfg.validate_all(rules) // 返回 Array[ConfigError],一次列全impl @config.Validate for DbCfg with fn validate(self, prefix) {
@config.check_int_range(prefix.add("port"), self.port.to_int64(), 1L, 65535L)
@config.check_string_len(prefix.add("user"), self.user, 1, 64)
}
let db : DbCfg = extract_validated_from(cfg, "db")Rule::allowed_keys("db", ["host", "port", "user"])Rule::custom("db.host", "non-empty and without spaces", fn(value) {
match value.kind {
ValueKind::Str(text) => if text.length() > 0 && !text.contains(" ") { None } else { Some(text) }
_ => Some(value.kind.name())
}
})== 1. Validate by key: stop at the first error ==
invalid value for key 'db.port': expected 1..65535, got 70000
== 2. Validate by key: list every error ==
invalid value for key 'db.port': expected 1..65535, got 70000
invalid value for key 'db.user': expected 1..64 characters, got 0 characters
invalid value for key 'log.level': expected debug / info / warn / error, got verbose
key 'db.extra' is not allowed
== 3. Extract into a struct: constraints follow the fields ==
invalid value for key 'db.port': expected 1..65535, got 70000
== 4. Custom rules ==
passedInstall
Download zipMoonBit 原生配置库:一处声明,多来源汇入。