apache/fory

[Question] Does Apache Fory support field validation inside *.fdl?

开放

#3,904 创建于 2026年7月31日

 (1 条评论) (0 个反应) (0 位负责人)Java (426 个派生)auto 404
good first issuequestion

仓库指标

星标
 (4,419 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

Question

Hi.

Does Apache Fory support field validation inside *.fdl , similar to Protobuf tools (Protovalidate (CEL)/protoc-gen-validate (PGV))

https://fory.apache.org/docs/compiler/protobuf_idl_support/

syntax = "proto3";

package v1.user;

import "buf/validate/validate.proto";

message UserProfile {
  string id = 1 [(buf.validate.field).string.uuid = true];

  // Numeric boundaries
  uint32 age = 2 [(buf.validate.field).uint32.gte = 18, (buf.validate.field).uint32.lte = 120];

  string email = 3 [(buf.validate.field).string.email = true];

  // Length constraints and regex pattern matching
  string username = 4 [
    (buf.validate.field).string.min_len = 3,
    (buf.validate.field).string.max_len = 30,
    (buf.validate.field).string.pattern = "^[a-zA-Z0-9_]+$"
  ];

  // Collection constraint (ensure list contains at least one item)
  repeated string roles = 5 [(buf.validate.field).repeated.min_items = 1];

  // Standard rules handle simple single-field checks.
  uint64 amount = 6 [(buf.validate.field).uint64.gt = 0];
  uint64 balance = 7;

  // CEL produces a dynamic error message with runtime values.
  option (buf.validate.message).cel = {
    id: "transfer.sufficient_balance"
    expression:
      "this.amount <= this.balance ? ''"
      ": 'cannot transfer ' + string(this.amount)"
      "  + ' with a balance of ' + string(this.balance)"
  };
}

贡献者指南