apache/fory

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

Aperta

#3904 aperta il 31 lug 2026

 (1 commento) (0 reazioni) (0 assegnatari)Java (426 fork)auto 404
good first issuequestion

Metriche repository

Star
 (4419 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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

Guida contributor