apache/fory

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

オープン

#3,904 opened on 2026/07/31

 (1 件のコメント) (0 件のリアクション) (0 人の担当者)Java (426 件のフォーク)auto 404
good first issuequestion

Repository metrics

Stars
 (4,419 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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

コントリビューターガイド