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)"
  };
}

貢獻者指南