diff --git a/gen/java/de/danet/buf/validate/AnyRules.java b/gen/java/de/danet/buf/validate/AnyRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae0fa118449bcd5f728290af91d426671ba96239
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/AnyRules.java
@@ -0,0 +1,1104 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * AnyRules describe constraints applied exclusively to the `google.protobuf.Any` well-known type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.AnyRules}
+ */
+public final class AnyRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.AnyRules)
+    AnyRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use AnyRules.newBuilder() to construct.
+  private AnyRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private AnyRules() {
+    in_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+    notIn_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new AnyRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_AnyRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_AnyRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.AnyRules.class, de.danet.buf.validate.AnyRules.Builder.class);
+  }
+
+  public static final int IN_FIELD_NUMBER = 2;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.LazyStringArrayList in_ =
+      com.google.protobuf.LazyStringArrayList.emptyList();
+  /**
+   * <pre>
+   * `in` requires the field's `type_url` to be equal to one of the
+   *specified values. If it doesn't match any of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   //  The `value` field must have a `type_url` equal to one of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 2 [json_name = "in"];</code>
+   * @return A list containing the in.
+   */
+  public com.google.protobuf.ProtocolStringList
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field's `type_url` to be equal to one of the
+   *specified values. If it doesn't match any of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   //  The `value` field must have a `type_url` equal to one of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 2 [json_name = "in"];</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field's `type_url` to be equal to one of the
+   *specified values. If it doesn't match any of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   //  The `value` field must have a `type_url` equal to one of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 2 [json_name = "in"];</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public java.lang.String getIn(int index) {
+    return in_.get(index);
+  }
+  /**
+   * <pre>
+   * `in` requires the field's `type_url` to be equal to one of the
+   *specified values. If it doesn't match any of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   //  The `value` field must have a `type_url` equal to one of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 2 [json_name = "in"];</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the in at the given index.
+   */
+  public com.google.protobuf.ByteString
+      getInBytes(int index) {
+    return in_.getByteString(index);
+  }
+
+  public static final int NOT_IN_FIELD_NUMBER = 3;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.LazyStringArrayList notIn_ =
+      com.google.protobuf.LazyStringArrayList.emptyList();
+  /**
+   * <pre>
+   * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   // The field `value` must not have a `type_url` equal to any of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+   * @return A list containing the notIn.
+   */
+  public com.google.protobuf.ProtocolStringList
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   // The field `value` must not have a `type_url` equal to any of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   // The field `value` must not have a `type_url` equal to any of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public java.lang.String getNotIn(int index) {
+    return notIn_.get(index);
+  }
+  /**
+   * <pre>
+   * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   // The field `value` must not have a `type_url` equal to any of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the notIn at the given index.
+   */
+  public com.google.protobuf.ByteString
+      getNotInBytes(int index) {
+    return notIn_.getByteString(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    for (int i = 0; i < in_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, in_.getRaw(i));
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, notIn_.getRaw(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += computeStringSizeNoTag(in_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getInList().size();
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += computeStringSizeNoTag(notIn_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getNotInList().size();
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.AnyRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.AnyRules other = (de.danet.buf.validate.AnyRules) obj;
+
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.AnyRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.AnyRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.AnyRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.AnyRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.AnyRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * AnyRules describe constraints applied exclusively to the `google.protobuf.Any` well-known type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.AnyRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.AnyRules)
+      de.danet.buf.validate.AnyRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_AnyRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_AnyRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.AnyRules.class, de.danet.buf.validate.AnyRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.AnyRules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      in_ =
+          com.google.protobuf.LazyStringArrayList.emptyList();
+      notIn_ =
+          com.google.protobuf.LazyStringArrayList.emptyList();
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_AnyRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.AnyRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.AnyRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.AnyRules build() {
+      de.danet.buf.validate.AnyRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.AnyRules buildPartial() {
+      de.danet.buf.validate.AnyRules result = new de.danet.buf.validate.AnyRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.AnyRules result) {
+      int from_bitField0_ = bitField0_;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.AnyRules) {
+        return mergeFrom((de.danet.buf.validate.AnyRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.AnyRules other) {
+      if (other == de.danet.buf.validate.AnyRules.getDefaultInstance()) return this;
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          bitField0_ |= 0x00000001;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          bitField0_ |= 0x00000002;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+              ensureInIsMutable();
+              in_.add(s);
+              break;
+            } // case 18
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+              ensureNotInIsMutable();
+              notIn_.add(s);
+              break;
+            } // case 26
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private com.google.protobuf.LazyStringArrayList in_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = new com.google.protobuf.LazyStringArrayList(in_);
+      }
+      bitField0_ |= 0x00000001;
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @return A list containing the in.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public java.lang.String getIn(int index) {
+      return in_.get(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the in at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getInBytes(int index) {
+      return in_.getByteString(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureInIsMutable();
+      in_.set(index, value);
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureInIsMutable();
+      in_.add(value);
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<java.lang.String> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+      bitField0_ = (bitField0_ & ~0x00000001);;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field's `type_url` to be equal to one of the
+     *specified values. If it doesn't match any of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   //  The `value` field must have a `type_url` equal to one of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 2 [json_name = "in"];</code>
+     * @param value The bytes of the in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addInBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      ensureInIsMutable();
+      in_.add(value);
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringArrayList notIn_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = new com.google.protobuf.LazyStringArrayList(notIn_);
+      }
+      bitField0_ |= 0x00000002;
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @return A list containing the notIn.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public java.lang.String getNotIn(int index) {
+      return notIn_.get(index);
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the notIn at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getNotInBytes(int index) {
+      return notIn_.getByteString(index);
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureNotInIsMutable();
+      notIn_.set(index, value);
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureNotInIsMutable();
+      notIn_.add(value);
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<java.lang.String> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+      bitField0_ = (bitField0_ & ~0x00000002);;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+     *
+     * ```proto
+     * message MyAny {
+     *   // The field `value` must not have a `type_url` equal to any of the specified values.
+     *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+     * @param value The bytes of the notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotInBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      ensureNotInIsMutable();
+      notIn_.add(value);
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.AnyRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.AnyRules)
+  private static final de.danet.buf.validate.AnyRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.AnyRules();
+  }
+
+  public static de.danet.buf.validate.AnyRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<AnyRules>
+      PARSER = new com.google.protobuf.AbstractParser<AnyRules>() {
+    @java.lang.Override
+    public AnyRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<AnyRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<AnyRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.AnyRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/AnyRulesOrBuilder.java b/gen/java/de/danet/buf/validate/AnyRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3127d2e738ced3cfb83b860c24c728ef0167421
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/AnyRulesOrBuilder.java
@@ -0,0 +1,156 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface AnyRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.AnyRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `in` requires the field's `type_url` to be equal to one of the
+   *specified values. If it doesn't match any of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   //  The `value` field must have a `type_url` equal to one of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 2 [json_name = "in"];</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.String>
+      getInList();
+  /**
+   * <pre>
+   * `in` requires the field's `type_url` to be equal to one of the
+   *specified values. If it doesn't match any of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   //  The `value` field must have a `type_url` equal to one of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 2 [json_name = "in"];</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field's `type_url` to be equal to one of the
+   *specified values. If it doesn't match any of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   //  The `value` field must have a `type_url` equal to one of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 2 [json_name = "in"];</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  java.lang.String getIn(int index);
+  /**
+   * <pre>
+   * `in` requires the field's `type_url` to be equal to one of the
+   *specified values. If it doesn't match any of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   //  The `value` field must have a `type_url` equal to one of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.in = ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 2 [json_name = "in"];</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the in at the given index.
+   */
+  com.google.protobuf.ByteString
+      getInBytes(int index);
+
+  /**
+   * <pre>
+   * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   // The field `value` must not have a `type_url` equal to any of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.String>
+      getNotInList();
+  /**
+   * <pre>
+   * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   // The field `value` must not have a `type_url` equal to any of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   // The field `value` must not have a `type_url` equal to any of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  java.lang.String getNotIn(int index);
+  /**
+   * <pre>
+   * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
+   *
+   * ```proto
+   * message MyAny {
+   *   // The field `value` must not have a `type_url` equal to any of the specified values.
+   *   google.protobuf.Any value = 1 [(buf.validate.field).any.not_in = ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 3 [json_name = "notIn"];</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the notIn at the given index.
+   */
+  com.google.protobuf.ByteString
+      getNotInBytes(int index);
+}
diff --git a/gen/java/de/danet/buf/validate/BoolRules.java b/gen/java/de/danet/buf/validate/BoolRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..004dc81076c80f95e02c55150d0f28e8380a182b
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/BoolRules.java
@@ -0,0 +1,580 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * BoolRules describes the constraints applied to `bool` values. These rules
+ * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.BoolRules}
+ */
+public final class BoolRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.BoolRules)
+    BoolRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use BoolRules.newBuilder() to construct.
+  private BoolRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private BoolRules() {
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new BoolRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BoolRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BoolRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.BoolRules.class, de.danet.buf.validate.BoolRules.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int CONST_FIELD_NUMBER = 1;
+  private boolean const_ = false;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified boolean value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBool {
+   *   // value must equal true
+   *   bool value = 1 [(buf.validate.field).bool.const = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified boolean value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBool {
+   *   // value must equal true
+   *   bool value = 1 [(buf.validate.field).bool.const = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public boolean getConst() {
+    return const_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeBool(1, const_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(1, const_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.BoolRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.BoolRules other = (de.danet.buf.validate.BoolRules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getConst());
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.BoolRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.BoolRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.BoolRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.BoolRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.BoolRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * BoolRules describes the constraints applied to `bool` values. These rules
+   * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.BoolRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.BoolRules)
+      de.danet.buf.validate.BoolRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BoolRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BoolRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.BoolRules.class, de.danet.buf.validate.BoolRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.BoolRules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = false;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BoolRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.BoolRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.BoolRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.BoolRules build() {
+      de.danet.buf.validate.BoolRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.BoolRules buildPartial() {
+      de.danet.buf.validate.BoolRules result = new de.danet.buf.validate.BoolRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.BoolRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.BoolRules) {
+        return mergeFrom((de.danet.buf.validate.BoolRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.BoolRules other) {
+      if (other == de.danet.buf.validate.BoolRules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              const_ = input.readBool();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private boolean const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified boolean value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBool {
+     *   // value must equal true
+     *   bool value = 1 [(buf.validate.field).bool.const = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified boolean value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBool {
+     *   // value must equal true
+     *   bool value = 1 [(buf.validate.field).bool.const = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public boolean getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified boolean value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBool {
+     *   // value must equal true
+     *   bool value = 1 [(buf.validate.field).bool.const = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(boolean value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified boolean value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBool {
+     *   // value must equal true
+     *   bool value = 1 [(buf.validate.field).bool.const = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = false;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.BoolRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.BoolRules)
+  private static final de.danet.buf.validate.BoolRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.BoolRules();
+  }
+
+  public static de.danet.buf.validate.BoolRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<BoolRules>
+      PARSER = new com.google.protobuf.AbstractParser<BoolRules>() {
+    @java.lang.Override
+    public BoolRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<BoolRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<BoolRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.BoolRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/BoolRulesOrBuilder.java b/gen/java/de/danet/buf/validate/BoolRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..6669dc4f55da974631cdd06d5b92a4b62a14754f
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/BoolRulesOrBuilder.java
@@ -0,0 +1,45 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface BoolRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.BoolRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified boolean value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBool {
+   *   // value must equal true
+   *   bool value = 1 [(buf.validate.field).bool.const = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified boolean value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBool {
+   *   // value must equal true
+   *   bool value = 1 [(buf.validate.field).bool.const = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  boolean getConst();
+}
diff --git a/gen/java/de/danet/buf/validate/BytesRules.java b/gen/java/de/danet/buf/validate/BytesRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b15af4d600b62d1be1d153147126f877689a990
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/BytesRules.java
@@ -0,0 +1,3007 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * BytesRules describe the constraints applied to `bytes` values. These rules
+ * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.BytesRules}
+ */
+public final class BytesRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.BytesRules)
+    BytesRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use BytesRules.newBuilder() to construct.
+  private BytesRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private BytesRules() {
+    const_ = com.google.protobuf.ByteString.EMPTY;
+    pattern_ = "";
+    prefix_ = com.google.protobuf.ByteString.EMPTY;
+    suffix_ = com.google.protobuf.ByteString.EMPTY;
+    contains_ = com.google.protobuf.ByteString.EMPTY;
+    in_ = emptyList(com.google.protobuf.ByteString.class);
+    notIn_ = emptyList(com.google.protobuf.ByteString.class);
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new BytesRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BytesRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BytesRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.BytesRules.class, de.danet.buf.validate.BytesRules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int wellKnownCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object wellKnown_;
+  public enum WellKnownCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    IP(10),
+    IPV4(11),
+    IPV6(12),
+    WELLKNOWN_NOT_SET(0);
+    private final int value;
+    private WellKnownCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static WellKnownCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static WellKnownCase forNumber(int value) {
+      switch (value) {
+        case 10: return IP;
+        case 11: return IPV4;
+        case 12: return IPV6;
+        case 0: return WELLKNOWN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public WellKnownCase
+  getWellKnownCase() {
+    return WellKnownCase.forNumber(
+        wellKnownCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private com.google.protobuf.ByteString const_ = com.google.protobuf.ByteString.EMPTY;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified bytes
+   * value. If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be "&#92;x01&#92;x02&#92;x03&#92;x04"
+   *   bytes value = 1 [(buf.validate.field).bytes.const = "&#92;x01&#92;x02&#92;x03&#92;x04"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified bytes
+   * value. If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be "&#92;x01&#92;x02&#92;x03&#92;x04"
+   *   bytes value = 1 [(buf.validate.field).bytes.const = "&#92;x01&#92;x02&#92;x03&#92;x04"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getConst() {
+    return const_;
+  }
+
+  public static final int LEN_FIELD_NUMBER = 13;
+  private long len_ = 0L;
+  /**
+   * <pre>
+   * `len` requires the field value to have the specified length in bytes.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value length must be 4 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len = 13 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the len field is set.
+   */
+  @java.lang.Override
+  public boolean hasLen() {
+    return ((bitField0_ & 0x00000002) != 0);
+  }
+  /**
+   * <pre>
+   * `len` requires the field value to have the specified length in bytes.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value length must be 4 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len = 13 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+   * @return The len.
+   */
+  @java.lang.Override
+  public long getLen() {
+    return len_;
+  }
+
+  public static final int MIN_LEN_FIELD_NUMBER = 2;
+  private long minLen_ = 0L;
+  /**
+   * <pre>
+   * `min_len` requires the field value to have at least the specified minimum
+   * length in bytes.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value length must be at least 2 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minLen field is set.
+   */
+  @java.lang.Override
+  public boolean hasMinLen() {
+    return ((bitField0_ & 0x00000004) != 0);
+  }
+  /**
+   * <pre>
+   * `min_len` requires the field value to have at least the specified minimum
+   * length in bytes.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value length must be at least 2 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minLen.
+   */
+  @java.lang.Override
+  public long getMinLen() {
+    return minLen_;
+  }
+
+  public static final int MAX_LEN_FIELD_NUMBER = 3;
+  private long maxLen_ = 0L;
+  /**
+   * <pre>
+   * `max_len` requires the field value to have at most the specified maximum
+   * length in bytes.
+   * If the field value exceeds the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be at most 6 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxLen field is set.
+   */
+  @java.lang.Override
+  public boolean hasMaxLen() {
+    return ((bitField0_ & 0x00000008) != 0);
+  }
+  /**
+   * <pre>
+   * `max_len` requires the field value to have at most the specified maximum
+   * length in bytes.
+   * If the field value exceeds the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be at most 6 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxLen.
+   */
+  @java.lang.Override
+  public long getMaxLen() {
+    return maxLen_;
+  }
+
+  public static final int PATTERN_FIELD_NUMBER = 4;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object pattern_ = "";
+  /**
+   * <pre>
+   * `pattern` requires the field value to match the specified regular
+   * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+   * The value of the field must be valid UTF-8 or validation will fail with a
+   * runtime error.
+   * If the field value doesn't match the pattern, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+   *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the pattern field is set.
+   */
+  @java.lang.Override
+  public boolean hasPattern() {
+    return ((bitField0_ & 0x00000010) != 0);
+  }
+  /**
+   * <pre>
+   * `pattern` requires the field value to match the specified regular
+   * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+   * The value of the field must be valid UTF-8 or validation will fail with a
+   * runtime error.
+   * If the field value doesn't match the pattern, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+   *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return The pattern.
+   */
+  @java.lang.Override
+  public java.lang.String getPattern() {
+    java.lang.Object ref = pattern_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      pattern_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `pattern` requires the field value to match the specified regular
+   * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+   * The value of the field must be valid UTF-8 or validation will fail with a
+   * runtime error.
+   * If the field value doesn't match the pattern, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+   *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for pattern.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getPatternBytes() {
+    java.lang.Object ref = pattern_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      pattern_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int PREFIX_FIELD_NUMBER = 5;
+  private com.google.protobuf.ByteString prefix_ = com.google.protobuf.ByteString.EMPTY;
+  /**
+   * <pre>
+   * `prefix` requires the field value to have the specified bytes at the
+   * beginning of the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value does not have prefix &#92;x01&#92;x02
+   *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = "&#92;x01&#92;x02"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes prefix = 5 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the prefix field is set.
+   */
+  @java.lang.Override
+  public boolean hasPrefix() {
+    return ((bitField0_ & 0x00000020) != 0);
+  }
+  /**
+   * <pre>
+   * `prefix` requires the field value to have the specified bytes at the
+   * beginning of the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value does not have prefix &#92;x01&#92;x02
+   *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = "&#92;x01&#92;x02"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes prefix = 5 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The prefix.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getPrefix() {
+    return prefix_;
+  }
+
+  public static final int SUFFIX_FIELD_NUMBER = 6;
+  private com.google.protobuf.ByteString suffix_ = com.google.protobuf.ByteString.EMPTY;
+  /**
+   * <pre>
+   * `suffix` requires the field value to have the specified bytes at the end
+   * of the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value does not have suffix &#92;x03&#92;x04
+   *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = "&#92;x03&#92;x04"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes suffix = 6 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the suffix field is set.
+   */
+  @java.lang.Override
+  public boolean hasSuffix() {
+    return ((bitField0_ & 0x00000040) != 0);
+  }
+  /**
+   * <pre>
+   * `suffix` requires the field value to have the specified bytes at the end
+   * of the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value does not have suffix &#92;x03&#92;x04
+   *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = "&#92;x03&#92;x04"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes suffix = 6 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The suffix.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getSuffix() {
+    return suffix_;
+  }
+
+  public static final int CONTAINS_FIELD_NUMBER = 7;
+  private com.google.protobuf.ByteString contains_ = com.google.protobuf.ByteString.EMPTY;
+  /**
+   * <pre>
+   * `contains` requires the field value to have the specified bytes anywhere in
+   * the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value does not contain &#92;x02&#92;x03
+   *   optional bytes value = 1 [(buf.validate.field).bytes.contains = "&#92;x02&#92;x03"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes contains = 7 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the contains field is set.
+   */
+  @java.lang.Override
+  public boolean hasContains() {
+    return ((bitField0_ & 0x00000080) != 0);
+  }
+  /**
+   * <pre>
+   * `contains` requires the field value to have the specified bytes anywhere in
+   * the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value does not contain &#92;x02&#92;x03
+   *   optional bytes value = 1 [(buf.validate.field).bytes.contains = "&#92;x02&#92;x03"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes contains = 7 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The contains.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString getContains() {
+    return contains_;
+  }
+
+  public static final int IN_FIELD_NUMBER = 8;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> in_ =
+      emptyList(com.google.protobuf.ByteString.class);
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified
+   * values. If the field value doesn't match any of the specified values, an
+   * error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<com.google.protobuf.ByteString>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified
+   * values. If the field value doesn't match any of the specified values, an
+   * error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified
+   * values. If the field value doesn't match any of the specified values, an
+   * error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public com.google.protobuf.ByteString getIn(int index) {
+    return in_.get(index);
+  }
+
+  public static final int NOT_IN_FIELD_NUMBER = 9;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> notIn_ =
+      emptyList(com.google.protobuf.ByteString.class);
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the specified
+   * values.
+   * If the field value matches any of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<com.google.protobuf.ByteString>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the specified
+   * values.
+   * If the field value matches any of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the specified
+   * values.
+   * If the field value matches any of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public com.google.protobuf.ByteString getNotIn(int index) {
+    return notIn_.get(index);
+  }
+
+  public static final int IP_FIELD_NUMBER = 10;
+  /**
+   * <pre>
+   * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IP address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip = 10 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ip field is set.
+   */
+  @java.lang.Override
+  public boolean hasIp() {
+    return wellKnownCase_ == 10;
+  }
+  /**
+   * <pre>
+   * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IP address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip = 10 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ip.
+   */
+  @java.lang.Override
+  public boolean getIp() {
+    if (wellKnownCase_ == 10) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IPV4_FIELD_NUMBER = 11;
+  /**
+   * <pre>
+   * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IPv4 address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4 = 11 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv4 field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpv4() {
+    return wellKnownCase_ == 11;
+  }
+  /**
+   * <pre>
+   * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IPv4 address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4 = 11 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv4.
+   */
+  @java.lang.Override
+  public boolean getIpv4() {
+    if (wellKnownCase_ == 11) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IPV6_FIELD_NUMBER = 12;
+  /**
+   * <pre>
+   * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IPv6 address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6 = 12 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv6 field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpv6() {
+    return wellKnownCase_ == 12;
+  }
+  /**
+   * <pre>
+   * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IPv6 address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6 = 12 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv6.
+   */
+  @java.lang.Override
+  public boolean getIpv6() {
+    if (wellKnownCase_ == 12) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeBytes(1, const_);
+    }
+    if (((bitField0_ & 0x00000004) != 0)) {
+      output.writeUInt64(2, minLen_);
+    }
+    if (((bitField0_ & 0x00000008) != 0)) {
+      output.writeUInt64(3, maxLen_);
+    }
+    if (((bitField0_ & 0x00000010) != 0)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pattern_);
+    }
+    if (((bitField0_ & 0x00000020) != 0)) {
+      output.writeBytes(5, prefix_);
+    }
+    if (((bitField0_ & 0x00000040) != 0)) {
+      output.writeBytes(6, suffix_);
+    }
+    if (((bitField0_ & 0x00000080) != 0)) {
+      output.writeBytes(7, contains_);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeBytes(8, in_.get(i));
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeBytes(9, notIn_.get(i));
+    }
+    if (wellKnownCase_ == 10) {
+      output.writeBool(
+          10, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 11) {
+      output.writeBool(
+          11, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 12) {
+      output.writeBool(
+          12, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      output.writeUInt64(13, len_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBytesSize(1, const_);
+    }
+    if (((bitField0_ & 0x00000004) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(2, minLen_);
+    }
+    if (((bitField0_ & 0x00000008) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(3, maxLen_);
+    }
+    if (((bitField0_ & 0x00000010) != 0)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pattern_);
+    }
+    if (((bitField0_ & 0x00000020) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBytesSize(5, prefix_);
+    }
+    if (((bitField0_ & 0x00000040) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBytesSize(6, suffix_);
+    }
+    if (((bitField0_ & 0x00000080) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBytesSize(7, contains_);
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeBytesSizeNoTag(in_.get(i));
+      }
+      size += dataSize;
+      size += 1 * getInList().size();
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeBytesSizeNoTag(notIn_.get(i));
+      }
+      size += dataSize;
+      size += 1 * getNotInList().size();
+    }
+    if (wellKnownCase_ == 10) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            10, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 11) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            11, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 12) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            12, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(13, len_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.BytesRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.BytesRules other = (de.danet.buf.validate.BytesRules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (!getConst()
+          .equals(other.getConst())) return false;
+    }
+    if (hasLen() != other.hasLen()) return false;
+    if (hasLen()) {
+      if (getLen()
+          != other.getLen()) return false;
+    }
+    if (hasMinLen() != other.hasMinLen()) return false;
+    if (hasMinLen()) {
+      if (getMinLen()
+          != other.getMinLen()) return false;
+    }
+    if (hasMaxLen() != other.hasMaxLen()) return false;
+    if (hasMaxLen()) {
+      if (getMaxLen()
+          != other.getMaxLen()) return false;
+    }
+    if (hasPattern() != other.hasPattern()) return false;
+    if (hasPattern()) {
+      if (!getPattern()
+          .equals(other.getPattern())) return false;
+    }
+    if (hasPrefix() != other.hasPrefix()) return false;
+    if (hasPrefix()) {
+      if (!getPrefix()
+          .equals(other.getPrefix())) return false;
+    }
+    if (hasSuffix() != other.hasSuffix()) return false;
+    if (hasSuffix()) {
+      if (!getSuffix()
+          .equals(other.getSuffix())) return false;
+    }
+    if (hasContains() != other.hasContains()) return false;
+    if (hasContains()) {
+      if (!getContains()
+          .equals(other.getContains())) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getWellKnownCase().equals(other.getWellKnownCase())) return false;
+    switch (wellKnownCase_) {
+      case 10:
+        if (getIp()
+            != other.getIp()) return false;
+        break;
+      case 11:
+        if (getIpv4()
+            != other.getIpv4()) return false;
+        break;
+      case 12:
+        if (getIpv6()
+            != other.getIpv6()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst().hashCode();
+    }
+    if (hasLen()) {
+      hash = (37 * hash) + LEN_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getLen());
+    }
+    if (hasMinLen()) {
+      hash = (37 * hash) + MIN_LEN_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMinLen());
+    }
+    if (hasMaxLen()) {
+      hash = (37 * hash) + MAX_LEN_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMaxLen());
+    }
+    if (hasPattern()) {
+      hash = (37 * hash) + PATTERN_FIELD_NUMBER;
+      hash = (53 * hash) + getPattern().hashCode();
+    }
+    if (hasPrefix()) {
+      hash = (37 * hash) + PREFIX_FIELD_NUMBER;
+      hash = (53 * hash) + getPrefix().hashCode();
+    }
+    if (hasSuffix()) {
+      hash = (37 * hash) + SUFFIX_FIELD_NUMBER;
+      hash = (53 * hash) + getSuffix().hashCode();
+    }
+    if (hasContains()) {
+      hash = (37 * hash) + CONTAINS_FIELD_NUMBER;
+      hash = (53 * hash) + getContains().hashCode();
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (wellKnownCase_) {
+      case 10:
+        hash = (37 * hash) + IP_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIp());
+        break;
+      case 11:
+        hash = (37 * hash) + IPV4_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpv4());
+        break;
+      case 12:
+        hash = (37 * hash) + IPV6_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpv6());
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.BytesRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.BytesRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.BytesRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.BytesRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.BytesRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * BytesRules describe the constraints applied to `bytes` values. These rules
+   * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.BytesRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.BytesRules)
+      de.danet.buf.validate.BytesRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BytesRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BytesRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.BytesRules.class, de.danet.buf.validate.BytesRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.BytesRules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = com.google.protobuf.ByteString.EMPTY;
+      len_ = 0L;
+      minLen_ = 0L;
+      maxLen_ = 0L;
+      pattern_ = "";
+      prefix_ = com.google.protobuf.ByteString.EMPTY;
+      suffix_ = com.google.protobuf.ByteString.EMPTY;
+      contains_ = com.google.protobuf.ByteString.EMPTY;
+      in_ = emptyList(com.google.protobuf.ByteString.class);
+      notIn_ = emptyList(com.google.protobuf.ByteString.class);
+      wellKnownCase_ = 0;
+      wellKnown_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_BytesRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.BytesRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.BytesRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.BytesRules build() {
+      de.danet.buf.validate.BytesRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.BytesRules buildPartial() {
+      de.danet.buf.validate.BytesRules result = new de.danet.buf.validate.BytesRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.BytesRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.len_ = len_;
+        to_bitField0_ |= 0x00000002;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        result.minLen_ = minLen_;
+        to_bitField0_ |= 0x00000004;
+      }
+      if (((from_bitField0_ & 0x00000008) != 0)) {
+        result.maxLen_ = maxLen_;
+        to_bitField0_ |= 0x00000008;
+      }
+      if (((from_bitField0_ & 0x00000010) != 0)) {
+        result.pattern_ = pattern_;
+        to_bitField0_ |= 0x00000010;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        result.prefix_ = prefix_;
+        to_bitField0_ |= 0x00000020;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        result.suffix_ = suffix_;
+        to_bitField0_ |= 0x00000040;
+      }
+      if (((from_bitField0_ & 0x00000080) != 0)) {
+        result.contains_ = contains_;
+        to_bitField0_ |= 0x00000080;
+      }
+      if (((from_bitField0_ & 0x00000100) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000200) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.BytesRules result) {
+      result.wellKnownCase_ = wellKnownCase_;
+      result.wellKnown_ = this.wellKnown_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.BytesRules) {
+        return mergeFrom((de.danet.buf.validate.BytesRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.BytesRules other) {
+      if (other == de.danet.buf.validate.BytesRules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (other.hasLen()) {
+        setLen(other.getLen());
+      }
+      if (other.hasMinLen()) {
+        setMinLen(other.getMinLen());
+      }
+      if (other.hasMaxLen()) {
+        setMaxLen(other.getMaxLen());
+      }
+      if (other.hasPattern()) {
+        pattern_ = other.pattern_;
+        bitField0_ |= 0x00000010;
+        onChanged();
+      }
+      if (other.hasPrefix()) {
+        setPrefix(other.getPrefix());
+      }
+      if (other.hasSuffix()) {
+        setSuffix(other.getSuffix());
+      }
+      if (other.hasContains()) {
+        setContains(other.getContains());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000100;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000200;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getWellKnownCase()) {
+        case IP: {
+          setIp(other.getIp());
+          break;
+        }
+        case IPV4: {
+          setIpv4(other.getIpv4());
+          break;
+        }
+        case IPV6: {
+          setIpv6(other.getIpv6());
+          break;
+        }
+        case WELLKNOWN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              const_ = input.readBytes();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 10
+            case 16: {
+              minLen_ = input.readUInt64();
+              bitField0_ |= 0x00000004;
+              break;
+            } // case 16
+            case 24: {
+              maxLen_ = input.readUInt64();
+              bitField0_ |= 0x00000008;
+              break;
+            } // case 24
+            case 34: {
+              pattern_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000010;
+              break;
+            } // case 34
+            case 42: {
+              prefix_ = input.readBytes();
+              bitField0_ |= 0x00000020;
+              break;
+            } // case 42
+            case 50: {
+              suffix_ = input.readBytes();
+              bitField0_ |= 0x00000040;
+              break;
+            } // case 50
+            case 58: {
+              contains_ = input.readBytes();
+              bitField0_ |= 0x00000080;
+              break;
+            } // case 58
+            case 66: {
+              com.google.protobuf.ByteString v = input.readBytes();
+              ensureInIsMutable();
+              in_.add(v);
+              break;
+            } // case 66
+            case 74: {
+              com.google.protobuf.ByteString v = input.readBytes();
+              ensureNotInIsMutable();
+              notIn_.add(v);
+              break;
+            } // case 74
+            case 80: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 10;
+              break;
+            } // case 80
+            case 88: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 11;
+              break;
+            } // case 88
+            case 96: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 12;
+              break;
+            } // case 96
+            case 104: {
+              len_ = input.readUInt64();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 104
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int wellKnownCase_ = 0;
+    private java.lang.Object wellKnown_;
+    public WellKnownCase
+        getWellKnownCase() {
+      return WellKnownCase.forNumber(
+          wellKnownCase_);
+    }
+
+    public Builder clearWellKnown() {
+      wellKnownCase_ = 0;
+      wellKnown_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private com.google.protobuf.ByteString const_ = com.google.protobuf.ByteString.EMPTY;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified bytes
+     * value. If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be "&#92;x01&#92;x02&#92;x03&#92;x04"
+     *   bytes value = 1 [(buf.validate.field).bytes.const = "&#92;x01&#92;x02&#92;x03&#92;x04"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified bytes
+     * value. If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be "&#92;x01&#92;x02&#92;x03&#92;x04"
+     *   bytes value = 1 [(buf.validate.field).bytes.const = "&#92;x01&#92;x02&#92;x03&#92;x04"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified bytes
+     * value. If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be "&#92;x01&#92;x02&#92;x03&#92;x04"
+     *   bytes value = 1 [(buf.validate.field).bytes.const = "&#92;x01&#92;x02&#92;x03&#92;x04"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified bytes
+     * value. If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be "&#92;x01&#92;x02&#92;x03&#92;x04"
+     *   bytes value = 1 [(buf.validate.field).bytes.const = "&#92;x01&#92;x02&#92;x03&#92;x04"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = getDefaultInstance().getConst();
+      onChanged();
+      return this;
+    }
+
+    private long len_ ;
+    /**
+     * <pre>
+     * `len` requires the field value to have the specified length in bytes.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value length must be 4 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len = 13 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the len field is set.
+     */
+    @java.lang.Override
+    public boolean hasLen() {
+      return ((bitField0_ & 0x00000002) != 0);
+    }
+    /**
+     * <pre>
+     * `len` requires the field value to have the specified length in bytes.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value length must be 4 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len = 13 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+     * @return The len.
+     */
+    @java.lang.Override
+    public long getLen() {
+      return len_;
+    }
+    /**
+     * <pre>
+     * `len` requires the field value to have the specified length in bytes.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value length must be 4 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len = 13 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The len to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLen(long value) {
+
+      len_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `len` requires the field value to have the specified length in bytes.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value length must be 4 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len = 13 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLen() {
+      bitField0_ = (bitField0_ & ~0x00000002);
+      len_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long minLen_ ;
+    /**
+     * <pre>
+     * `min_len` requires the field value to have at least the specified minimum
+     * length in bytes.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value length must be at least 2 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the minLen field is set.
+     */
+    @java.lang.Override
+    public boolean hasMinLen() {
+      return ((bitField0_ & 0x00000004) != 0);
+    }
+    /**
+     * <pre>
+     * `min_len` requires the field value to have at least the specified minimum
+     * length in bytes.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value length must be at least 2 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return The minLen.
+     */
+    @java.lang.Override
+    public long getMinLen() {
+      return minLen_;
+    }
+    /**
+     * <pre>
+     * `min_len` requires the field value to have at least the specified minimum
+     * length in bytes.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value length must be at least 2 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The minLen to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMinLen(long value) {
+
+      minLen_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `min_len` requires the field value to have at least the specified minimum
+     * length in bytes.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value length must be at least 2 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMinLen() {
+      bitField0_ = (bitField0_ & ~0x00000004);
+      minLen_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long maxLen_ ;
+    /**
+     * <pre>
+     * `max_len` requires the field value to have at most the specified maximum
+     * length in bytes.
+     * If the field value exceeds the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be at most 6 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the maxLen field is set.
+     */
+    @java.lang.Override
+    public boolean hasMaxLen() {
+      return ((bitField0_ & 0x00000008) != 0);
+    }
+    /**
+     * <pre>
+     * `max_len` requires the field value to have at most the specified maximum
+     * length in bytes.
+     * If the field value exceeds the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be at most 6 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return The maxLen.
+     */
+    @java.lang.Override
+    public long getMaxLen() {
+      return maxLen_;
+    }
+    /**
+     * <pre>
+     * `max_len` requires the field value to have at most the specified maximum
+     * length in bytes.
+     * If the field value exceeds the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be at most 6 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The maxLen to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMaxLen(long value) {
+
+      maxLen_ = value;
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `max_len` requires the field value to have at most the specified maximum
+     * length in bytes.
+     * If the field value exceeds the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be at most 6 bytes.
+     *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMaxLen() {
+      bitField0_ = (bitField0_ & ~0x00000008);
+      maxLen_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object pattern_ = "";
+    /**
+     * <pre>
+     * `pattern` requires the field value to match the specified regular
+     * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+     * The value of the field must be valid UTF-8 or validation will fail with a
+     * runtime error.
+     * If the field value doesn't match the pattern, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+     *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the pattern field is set.
+     */
+    public boolean hasPattern() {
+      return ((bitField0_ & 0x00000010) != 0);
+    }
+    /**
+     * <pre>
+     * `pattern` requires the field value to match the specified regular
+     * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+     * The value of the field must be valid UTF-8 or validation will fail with a
+     * runtime error.
+     * If the field value doesn't match the pattern, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+     *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @return The pattern.
+     */
+    public java.lang.String getPattern() {
+      java.lang.Object ref = pattern_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        pattern_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `pattern` requires the field value to match the specified regular
+     * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+     * The value of the field must be valid UTF-8 or validation will fail with a
+     * runtime error.
+     * If the field value doesn't match the pattern, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+     *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @return The bytes for pattern.
+     */
+    public com.google.protobuf.ByteString
+        getPatternBytes() {
+      java.lang.Object ref = pattern_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        pattern_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `pattern` requires the field value to match the specified regular
+     * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+     * The value of the field must be valid UTF-8 or validation will fail with a
+     * runtime error.
+     * If the field value doesn't match the pattern, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+     *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The pattern to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPattern(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      pattern_ = value;
+      bitField0_ |= 0x00000010;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `pattern` requires the field value to match the specified regular
+     * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+     * The value of the field must be valid UTF-8 or validation will fail with a
+     * runtime error.
+     * If the field value doesn't match the pattern, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+     *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPattern() {
+      pattern_ = getDefaultInstance().getPattern();
+      bitField0_ = (bitField0_ & ~0x00000010);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `pattern` requires the field value to match the specified regular
+     * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+     * The value of the field must be valid UTF-8 or validation will fail with a
+     * runtime error.
+     * If the field value doesn't match the pattern, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+     *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes for pattern to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPatternBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      pattern_ = value;
+      bitField0_ |= 0x00000010;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.ByteString prefix_ = com.google.protobuf.ByteString.EMPTY;
+    /**
+     * <pre>
+     * `prefix` requires the field value to have the specified bytes at the
+     * beginning of the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value does not have prefix &#92;x01&#92;x02
+     *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = "&#92;x01&#92;x02"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes prefix = 5 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the prefix field is set.
+     */
+    @java.lang.Override
+    public boolean hasPrefix() {
+      return ((bitField0_ & 0x00000020) != 0);
+    }
+    /**
+     * <pre>
+     * `prefix` requires the field value to have the specified bytes at the
+     * beginning of the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value does not have prefix &#92;x01&#92;x02
+     *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = "&#92;x01&#92;x02"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes prefix = 5 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The prefix.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString getPrefix() {
+      return prefix_;
+    }
+    /**
+     * <pre>
+     * `prefix` requires the field value to have the specified bytes at the
+     * beginning of the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value does not have prefix &#92;x01&#92;x02
+     *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = "&#92;x01&#92;x02"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes prefix = 5 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The prefix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPrefix(com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      prefix_ = value;
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `prefix` requires the field value to have the specified bytes at the
+     * beginning of the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value does not have prefix &#92;x01&#92;x02
+     *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = "&#92;x01&#92;x02"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes prefix = 5 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPrefix() {
+      bitField0_ = (bitField0_ & ~0x00000020);
+      prefix_ = getDefaultInstance().getPrefix();
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.ByteString suffix_ = com.google.protobuf.ByteString.EMPTY;
+    /**
+     * <pre>
+     * `suffix` requires the field value to have the specified bytes at the end
+     * of the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value does not have suffix &#92;x03&#92;x04
+     *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = "&#92;x03&#92;x04"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes suffix = 6 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the suffix field is set.
+     */
+    @java.lang.Override
+    public boolean hasSuffix() {
+      return ((bitField0_ & 0x00000040) != 0);
+    }
+    /**
+     * <pre>
+     * `suffix` requires the field value to have the specified bytes at the end
+     * of the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value does not have suffix &#92;x03&#92;x04
+     *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = "&#92;x03&#92;x04"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes suffix = 6 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The suffix.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString getSuffix() {
+      return suffix_;
+    }
+    /**
+     * <pre>
+     * `suffix` requires the field value to have the specified bytes at the end
+     * of the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value does not have suffix &#92;x03&#92;x04
+     *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = "&#92;x03&#92;x04"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes suffix = 6 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The suffix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSuffix(com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      suffix_ = value;
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `suffix` requires the field value to have the specified bytes at the end
+     * of the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value does not have suffix &#92;x03&#92;x04
+     *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = "&#92;x03&#92;x04"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes suffix = 6 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearSuffix() {
+      bitField0_ = (bitField0_ & ~0x00000040);
+      suffix_ = getDefaultInstance().getSuffix();
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.ByteString contains_ = com.google.protobuf.ByteString.EMPTY;
+    /**
+     * <pre>
+     * `contains` requires the field value to have the specified bytes anywhere in
+     * the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value does not contain &#92;x02&#92;x03
+     *   optional bytes value = 1 [(buf.validate.field).bytes.contains = "&#92;x02&#92;x03"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes contains = 7 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the contains field is set.
+     */
+    @java.lang.Override
+    public boolean hasContains() {
+      return ((bitField0_ & 0x00000080) != 0);
+    }
+    /**
+     * <pre>
+     * `contains` requires the field value to have the specified bytes anywhere in
+     * the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value does not contain &#92;x02&#92;x03
+     *   optional bytes value = 1 [(buf.validate.field).bytes.contains = "&#92;x02&#92;x03"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes contains = 7 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @return The contains.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString getContains() {
+      return contains_;
+    }
+    /**
+     * <pre>
+     * `contains` requires the field value to have the specified bytes anywhere in
+     * the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value does not contain &#92;x02&#92;x03
+     *   optional bytes value = 1 [(buf.validate.field).bytes.contains = "&#92;x02&#92;x03"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes contains = 7 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The contains to set.
+     * @return This builder for chaining.
+     */
+    public Builder setContains(com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      contains_ = value;
+      bitField0_ |= 0x00000080;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `contains` requires the field value to have the specified bytes anywhere in
+     * the string.
+     * If the field value doesn't meet the requirement, an error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value does not contain &#92;x02&#92;x03
+     *   optional bytes value = 1 [(buf.validate.field).bytes.contains = "&#92;x02&#92;x03"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bytes contains = 7 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearContains() {
+      bitField0_ = (bitField0_ & ~0x00000080);
+      contains_ = getDefaultInstance().getContains();
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> in_ = emptyList(com.google.protobuf.ByteString.class);
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000100;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified
+     * values. If the field value doesn't match any of the specified values, an
+     * error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<com.google.protobuf.ByteString>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified
+     * values. If the field value doesn't match any of the specified values, an
+     * error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified
+     * values. If the field value doesn't match any of the specified values, an
+     * error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public com.google.protobuf.ByteString getIn(int index) {
+      return in_.get(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified
+     * values. If the field value doesn't match any of the specified values, an
+     * error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureInIsMutable();
+      in_.set(index, value);
+      bitField0_ |= 0x00000100;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified
+     * values. If the field value doesn't match any of the specified values, an
+     * error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureInIsMutable();
+      in_.add(value);
+      bitField0_ |= 0x00000100;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified
+     * values. If the field value doesn't match any of the specified values, an
+     * error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000100;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified
+     * values. If the field value doesn't match any of the specified values, an
+     * error message is generated.
+     *
+     * ```protobuf
+     * message MyBytes {
+     *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyList(com.google.protobuf.ByteString.class);
+      bitField0_ = (bitField0_ & ~0x00000100);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> notIn_ = emptyList(com.google.protobuf.ByteString.class);
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000200;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the specified
+     * values.
+     * If the field value matches any of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<com.google.protobuf.ByteString>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the specified
+     * values.
+     * If the field value matches any of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the specified
+     * values.
+     * If the field value matches any of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public com.google.protobuf.ByteString getNotIn(int index) {
+      return notIn_.get(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the specified
+     * values.
+     * If the field value matches any of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureNotInIsMutable();
+      notIn_.set(index, value);
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the specified
+     * values.
+     * If the field value matches any of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureNotInIsMutable();
+      notIn_.add(value);
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the specified
+     * values.
+     * If the field value matches any of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the specified
+     * values.
+     * If the field value matches any of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+     *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyList(com.google.protobuf.ByteString.class);
+      bitField0_ = (bitField0_ & ~0x00000200);
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IP address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip = 10 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ip field is set.
+     */
+    public boolean hasIp() {
+      return wellKnownCase_ == 10;
+    }
+    /**
+     * <pre>
+     * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IP address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip = 10 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ip.
+     */
+    public boolean getIp() {
+      if (wellKnownCase_ == 10) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IP address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip = 10 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ip to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIp(boolean value) {
+
+      wellKnownCase_ = 10;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IP address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip = 10 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIp() {
+      if (wellKnownCase_ == 10) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IPv4 address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4 = 11 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipv4 field is set.
+     */
+    public boolean hasIpv4() {
+      return wellKnownCase_ == 11;
+    }
+    /**
+     * <pre>
+     * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IPv4 address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4 = 11 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipv4.
+     */
+    public boolean getIpv4() {
+      if (wellKnownCase_ == 11) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IPv4 address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4 = 11 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipv4 to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpv4(boolean value) {
+
+      wellKnownCase_ = 11;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     *
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IPv4 address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4 = 11 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpv4() {
+      if (wellKnownCase_ == 11) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IPv6 address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6 = 12 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipv6 field is set.
+     */
+    public boolean hasIpv6() {
+      return wellKnownCase_ == 12;
+    }
+    /**
+     * <pre>
+     * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IPv6 address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6 = 12 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipv6.
+     */
+    public boolean getIpv6() {
+      if (wellKnownCase_ == 12) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IPv6 address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6 = 12 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipv6 to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpv6(boolean value) {
+
+      wellKnownCase_ = 12;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+     * If the field value doesn't meet this constraint, an error message is generated.
+     * ```proto
+     * message MyBytes {
+     *   // value must be a valid IPv6 address
+     *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6 = 12 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpv6() {
+      if (wellKnownCase_ == 12) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.BytesRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.BytesRules)
+  private static final de.danet.buf.validate.BytesRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.BytesRules();
+  }
+
+  public static de.danet.buf.validate.BytesRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<BytesRules>
+      PARSER = new com.google.protobuf.AbstractParser<BytesRules>() {
+    @java.lang.Override
+    public BytesRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<BytesRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<BytesRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.BytesRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/BytesRulesOrBuilder.java b/gen/java/de/danet/buf/validate/BytesRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..0aff31fa4fe7dcce07919ffca434c01a870610c2
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/BytesRulesOrBuilder.java
@@ -0,0 +1,547 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface BytesRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.BytesRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified bytes
+   * value. If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be "&#92;x01&#92;x02&#92;x03&#92;x04"
+   *   bytes value = 1 [(buf.validate.field).bytes.const = "&#92;x01&#92;x02&#92;x03&#92;x04"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified bytes
+   * value. If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be "&#92;x01&#92;x02&#92;x03&#92;x04"
+   *   bytes value = 1 [(buf.validate.field).bytes.const = "&#92;x01&#92;x02&#92;x03&#92;x04"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  com.google.protobuf.ByteString getConst();
+
+  /**
+   * <pre>
+   * `len` requires the field value to have the specified length in bytes.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value length must be 4 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len = 13 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the len field is set.
+   */
+  boolean hasLen();
+  /**
+   * <pre>
+   * `len` requires the field value to have the specified length in bytes.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value length must be 4 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len = 13 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+   * @return The len.
+   */
+  long getLen();
+
+  /**
+   * <pre>
+   * `min_len` requires the field value to have at least the specified minimum
+   * length in bytes.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value length must be at least 2 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minLen field is set.
+   */
+  boolean hasMinLen();
+  /**
+   * <pre>
+   * `min_len` requires the field value to have at least the specified minimum
+   * length in bytes.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value length must be at least 2 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minLen.
+   */
+  long getMinLen();
+
+  /**
+   * <pre>
+   * `max_len` requires the field value to have at most the specified maximum
+   * length in bytes.
+   * If the field value exceeds the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be at most 6 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxLen field is set.
+   */
+  boolean hasMaxLen();
+  /**
+   * <pre>
+   * `max_len` requires the field value to have at most the specified maximum
+   * length in bytes.
+   * If the field value exceeds the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be at most 6 bytes.
+   *   optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxLen.
+   */
+  long getMaxLen();
+
+  /**
+   * <pre>
+   * `pattern` requires the field value to match the specified regular
+   * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+   * The value of the field must be valid UTF-8 or validation will fail with a
+   * runtime error.
+   * If the field value doesn't match the pattern, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+   *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the pattern field is set.
+   */
+  boolean hasPattern();
+  /**
+   * <pre>
+   * `pattern` requires the field value to match the specified regular
+   * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+   * The value of the field must be valid UTF-8 or validation will fail with a
+   * runtime error.
+   * If the field value doesn't match the pattern, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+   *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return The pattern.
+   */
+  java.lang.String getPattern();
+  /**
+   * <pre>
+   * `pattern` requires the field value to match the specified regular
+   * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
+   * The value of the field must be valid UTF-8 or validation will fail with a
+   * runtime error.
+   * If the field value doesn't match the pattern, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must match regex pattern "^[a-zA-Z0-9]+$".
+   *   optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 4 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for pattern.
+   */
+  com.google.protobuf.ByteString
+      getPatternBytes();
+
+  /**
+   * <pre>
+   * `prefix` requires the field value to have the specified bytes at the
+   * beginning of the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value does not have prefix &#92;x01&#92;x02
+   *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = "&#92;x01&#92;x02"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes prefix = 5 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the prefix field is set.
+   */
+  boolean hasPrefix();
+  /**
+   * <pre>
+   * `prefix` requires the field value to have the specified bytes at the
+   * beginning of the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value does not have prefix &#92;x01&#92;x02
+   *   optional bytes value = 1 [(buf.validate.field).bytes.prefix = "&#92;x01&#92;x02"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes prefix = 5 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The prefix.
+   */
+  com.google.protobuf.ByteString getPrefix();
+
+  /**
+   * <pre>
+   * `suffix` requires the field value to have the specified bytes at the end
+   * of the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value does not have suffix &#92;x03&#92;x04
+   *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = "&#92;x03&#92;x04"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes suffix = 6 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the suffix field is set.
+   */
+  boolean hasSuffix();
+  /**
+   * <pre>
+   * `suffix` requires the field value to have the specified bytes at the end
+   * of the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value does not have suffix &#92;x03&#92;x04
+   *   optional bytes value = 1 [(buf.validate.field).bytes.suffix = "&#92;x03&#92;x04"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes suffix = 6 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The suffix.
+   */
+  com.google.protobuf.ByteString getSuffix();
+
+  /**
+   * <pre>
+   * `contains` requires the field value to have the specified bytes anywhere in
+   * the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value does not contain &#92;x02&#92;x03
+   *   optional bytes value = 1 [(buf.validate.field).bytes.contains = "&#92;x02&#92;x03"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes contains = 7 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the contains field is set.
+   */
+  boolean hasContains();
+  /**
+   * <pre>
+   * `contains` requires the field value to have the specified bytes anywhere in
+   * the string.
+   * If the field value doesn't meet the requirement, an error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value does not contain &#92;x02&#92;x03
+   *   optional bytes value = 1 [(buf.validate.field).bytes.contains = "&#92;x02&#92;x03"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bytes contains = 7 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The contains.
+   */
+  com.google.protobuf.ByteString getContains();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified
+   * values. If the field value doesn't match any of the specified values, an
+   * error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<com.google.protobuf.ByteString> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified
+   * values. If the field value doesn't match any of the specified values, an
+   * error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified
+   * values. If the field value doesn't match any of the specified values, an
+   * error message is generated.
+   *
+   * ```protobuf
+   * message MyBytes {
+   *   // value must in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes in = 8 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  com.google.protobuf.ByteString getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the specified
+   * values.
+   * If the field value matches any of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<com.google.protobuf.ByteString> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the specified
+   * values.
+   * If the field value matches any of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the specified
+   * values.
+   * If the field value matches any of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must not in ["&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"]
+   *   optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"&#92;x01&#92;x02", "&#92;x02&#92;x03", "&#92;x03&#92;x04"}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated bytes not_in = 9 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  com.google.protobuf.ByteString getNotIn(int index);
+
+  /**
+   * <pre>
+   * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IP address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip = 10 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ip field is set.
+   */
+  boolean hasIp();
+  /**
+   * <pre>
+   * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IP address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip = 10 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ip.
+   */
+  boolean getIp();
+
+  /**
+   * <pre>
+   * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IPv4 address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4 = 11 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv4 field is set.
+   */
+  boolean hasIpv4();
+  /**
+   * <pre>
+   * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   *
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IPv4 address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4 = 11 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv4.
+   */
+  boolean getIpv4();
+
+  /**
+   * <pre>
+   * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IPv6 address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6 = 12 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv6 field is set.
+   */
+  boolean hasIpv6();
+  /**
+   * <pre>
+   * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
+   * If the field value doesn't meet this constraint, an error message is generated.
+   * ```proto
+   * message MyBytes {
+   *   // value must be a valid IPv6 address
+   *   optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6 = 12 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv6.
+   */
+  boolean getIpv6();
+
+  de.danet.buf.validate.BytesRules.WellKnownCase getWellKnownCase();
+}
diff --git a/gen/java/de/danet/buf/validate/Constraint.java b/gen/java/de/danet/buf/validate/Constraint.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b3ce67381e77d1018a6c8070aa6cf45b37193b9
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Constraint.java
@@ -0,0 +1,983 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/expression.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * `Constraint` represents a validation rule written in the Common Expression
+ * Language (CEL) syntax. Each Constraint includes a unique identifier, an
+ * optional error message, and the CEL expression to evaluate. For more
+ * information on CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+ *
+ * ```proto
+ * message Foo {
+ *   option (buf.validate.message).cel = {
+ *     id: "foo.bar"
+ *     message: "bar must be greater than 0"
+ *     expression: "this.bar &gt; 0"
+ *   };
+ *   int32 bar = 1;
+ * }
+ * ```
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.Constraint}
+ */
+public final class Constraint extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.Constraint)
+    ConstraintOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use Constraint.newBuilder() to construct.
+  private Constraint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private Constraint() {
+    id_ = "";
+    message_ = "";
+    expression_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new Constraint();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Constraint_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Constraint_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.Constraint.class, de.danet.buf.validate.Constraint.Builder.class);
+  }
+
+  public static final int ID_FIELD_NUMBER = 1;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object id_ = "";
+  /**
+   * <pre>
+   * `id` is a string that serves as a machine-readable name for this Constraint.
+   * It should be unique within its scope, which could be either a message or a field.
+   * </pre>
+   *
+   * <code>string id = 1 [json_name = "id"];</code>
+   * @return The id.
+   */
+  @java.lang.Override
+  public java.lang.String getId() {
+    java.lang.Object ref = id_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      id_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `id` is a string that serves as a machine-readable name for this Constraint.
+   * It should be unique within its scope, which could be either a message or a field.
+   * </pre>
+   *
+   * <code>string id = 1 [json_name = "id"];</code>
+   * @return The bytes for id.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getIdBytes() {
+    java.lang.Object ref = id_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      id_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MESSAGE_FIELD_NUMBER = 2;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object message_ = "";
+  /**
+   * <pre>
+   * `message` is an optional field that provides a human-readable error message
+   * for this Constraint when the CEL expression evaluates to false. If a
+   * non-empty message is provided, any strings resulting from the CEL
+   * expression evaluation are ignored.
+   * </pre>
+   *
+   * <code>string message = 2 [json_name = "message"];</code>
+   * @return The message.
+   */
+  @java.lang.Override
+  public java.lang.String getMessage() {
+    java.lang.Object ref = message_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      message_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `message` is an optional field that provides a human-readable error message
+   * for this Constraint when the CEL expression evaluates to false. If a
+   * non-empty message is provided, any strings resulting from the CEL
+   * expression evaluation are ignored.
+   * </pre>
+   *
+   * <code>string message = 2 [json_name = "message"];</code>
+   * @return The bytes for message.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMessageBytes() {
+    java.lang.Object ref = message_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      message_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int EXPRESSION_FIELD_NUMBER = 3;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object expression_ = "";
+  /**
+   * <pre>
+   * `expression` is the actual CEL expression that will be evaluated for
+   * validation. This string must resolve to either a boolean or a string
+   * value. If the expression evaluates to false or a non-empty string, the
+   * validation is considered failed, and the message is rejected.
+   * </pre>
+   *
+   * <code>string expression = 3 [json_name = "expression"];</code>
+   * @return The expression.
+   */
+  @java.lang.Override
+  public java.lang.String getExpression() {
+    java.lang.Object ref = expression_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      expression_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `expression` is the actual CEL expression that will be evaluated for
+   * validation. This string must resolve to either a boolean or a string
+   * value. If the expression evaluates to false or a non-empty string, the
+   * validation is considered failed, and the message is rejected.
+   * </pre>
+   *
+   * <code>string expression = 3 [json_name = "expression"];</code>
+   * @return The bytes for expression.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getExpressionBytes() {
+    java.lang.Object ref = expression_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      expression_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(expression_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, expression_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(expression_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, expression_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.Constraint)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.Constraint other = (de.danet.buf.validate.Constraint) obj;
+
+    if (!getId()
+        .equals(other.getId())) return false;
+    if (!getMessage()
+        .equals(other.getMessage())) return false;
+    if (!getExpression()
+        .equals(other.getExpression())) return false;
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + ID_FIELD_NUMBER;
+    hash = (53 * hash) + getId().hashCode();
+    hash = (37 * hash) + MESSAGE_FIELD_NUMBER;
+    hash = (53 * hash) + getMessage().hashCode();
+    hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
+    hash = (53 * hash) + getExpression().hashCode();
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.Constraint parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.Constraint parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.Constraint parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Constraint parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.Constraint prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * `Constraint` represents a validation rule written in the Common Expression
+   * Language (CEL) syntax. Each Constraint includes a unique identifier, an
+   * optional error message, and the CEL expression to evaluate. For more
+   * information on CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message Foo {
+   *   option (buf.validate.message).cel = {
+   *     id: "foo.bar"
+   *     message: "bar must be greater than 0"
+   *     expression: "this.bar &gt; 0"
+   *   };
+   *   int32 bar = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.Constraint}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.Constraint)
+      de.danet.buf.validate.ConstraintOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Constraint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Constraint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.Constraint.class, de.danet.buf.validate.Constraint.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.Constraint.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      id_ = "";
+      message_ = "";
+      expression_ = "";
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Constraint_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Constraint getDefaultInstanceForType() {
+      return de.danet.buf.validate.Constraint.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Constraint build() {
+      de.danet.buf.validate.Constraint result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Constraint buildPartial() {
+      de.danet.buf.validate.Constraint result = new de.danet.buf.validate.Constraint(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.Constraint result) {
+      int from_bitField0_ = bitField0_;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.id_ = id_;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.message_ = message_;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        result.expression_ = expression_;
+      }
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.Constraint) {
+        return mergeFrom((de.danet.buf.validate.Constraint)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.Constraint other) {
+      if (other == de.danet.buf.validate.Constraint.getDefaultInstance()) return this;
+      if (!other.getId().isEmpty()) {
+        id_ = other.id_;
+        bitField0_ |= 0x00000001;
+        onChanged();
+      }
+      if (!other.getMessage().isEmpty()) {
+        message_ = other.message_;
+        bitField0_ |= 0x00000002;
+        onChanged();
+      }
+      if (!other.getExpression().isEmpty()) {
+        expression_ = other.expression_;
+        bitField0_ |= 0x00000004;
+        onChanged();
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              id_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 10
+            case 18: {
+              message_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 18
+            case 26: {
+              expression_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000004;
+              break;
+            } // case 26
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private java.lang.Object id_ = "";
+    /**
+     * <pre>
+     * `id` is a string that serves as a machine-readable name for this Constraint.
+     * It should be unique within its scope, which could be either a message or a field.
+     * </pre>
+     *
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @return The id.
+     */
+    public java.lang.String getId() {
+      java.lang.Object ref = id_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        id_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `id` is a string that serves as a machine-readable name for this Constraint.
+     * It should be unique within its scope, which could be either a message or a field.
+     * </pre>
+     *
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @return The bytes for id.
+     */
+    public com.google.protobuf.ByteString
+        getIdBytes() {
+      java.lang.Object ref = id_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        id_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `id` is a string that serves as a machine-readable name for this Constraint.
+     * It should be unique within its scope, which could be either a message or a field.
+     * </pre>
+     *
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @param value The id to set.
+     * @return This builder for chaining.
+     */
+    public Builder setId(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      id_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `id` is a string that serves as a machine-readable name for this Constraint.
+     * It should be unique within its scope, which could be either a message or a field.
+     * </pre>
+     *
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearId() {
+      id_ = getDefaultInstance().getId();
+      bitField0_ = (bitField0_ & ~0x00000001);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `id` is a string that serves as a machine-readable name for this Constraint.
+     * It should be unique within its scope, which could be either a message or a field.
+     * </pre>
+     *
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @param value The bytes for id to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIdBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      id_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object message_ = "";
+    /**
+     * <pre>
+     * `message` is an optional field that provides a human-readable error message
+     * for this Constraint when the CEL expression evaluates to false. If a
+     * non-empty message is provided, any strings resulting from the CEL
+     * expression evaluation are ignored.
+     * </pre>
+     *
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @return The message.
+     */
+    public java.lang.String getMessage() {
+      java.lang.Object ref = message_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        message_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `message` is an optional field that provides a human-readable error message
+     * for this Constraint when the CEL expression evaluates to false. If a
+     * non-empty message is provided, any strings resulting from the CEL
+     * expression evaluation are ignored.
+     * </pre>
+     *
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @return The bytes for message.
+     */
+    public com.google.protobuf.ByteString
+        getMessageBytes() {
+      java.lang.Object ref = message_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        message_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `message` is an optional field that provides a human-readable error message
+     * for this Constraint when the CEL expression evaluates to false. If a
+     * non-empty message is provided, any strings resulting from the CEL
+     * expression evaluation are ignored.
+     * </pre>
+     *
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @param value The message to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMessage(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      message_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `message` is an optional field that provides a human-readable error message
+     * for this Constraint when the CEL expression evaluates to false. If a
+     * non-empty message is provided, any strings resulting from the CEL
+     * expression evaluation are ignored.
+     * </pre>
+     *
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMessage() {
+      message_ = getDefaultInstance().getMessage();
+      bitField0_ = (bitField0_ & ~0x00000002);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `message` is an optional field that provides a human-readable error message
+     * for this Constraint when the CEL expression evaluates to false. If a
+     * non-empty message is provided, any strings resulting from the CEL
+     * expression evaluation are ignored.
+     * </pre>
+     *
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @param value The bytes for message to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMessageBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      message_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object expression_ = "";
+    /**
+     * <pre>
+     * `expression` is the actual CEL expression that will be evaluated for
+     * validation. This string must resolve to either a boolean or a string
+     * value. If the expression evaluates to false or a non-empty string, the
+     * validation is considered failed, and the message is rejected.
+     * </pre>
+     *
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @return The expression.
+     */
+    public java.lang.String getExpression() {
+      java.lang.Object ref = expression_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        expression_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `expression` is the actual CEL expression that will be evaluated for
+     * validation. This string must resolve to either a boolean or a string
+     * value. If the expression evaluates to false or a non-empty string, the
+     * validation is considered failed, and the message is rejected.
+     * </pre>
+     *
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @return The bytes for expression.
+     */
+    public com.google.protobuf.ByteString
+        getExpressionBytes() {
+      java.lang.Object ref = expression_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        expression_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `expression` is the actual CEL expression that will be evaluated for
+     * validation. This string must resolve to either a boolean or a string
+     * value. If the expression evaluates to false or a non-empty string, the
+     * validation is considered failed, and the message is rejected.
+     * </pre>
+     *
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @param value The expression to set.
+     * @return This builder for chaining.
+     */
+    public Builder setExpression(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      expression_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `expression` is the actual CEL expression that will be evaluated for
+     * validation. This string must resolve to either a boolean or a string
+     * value. If the expression evaluates to false or a non-empty string, the
+     * validation is considered failed, and the message is rejected.
+     * </pre>
+     *
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearExpression() {
+      expression_ = getDefaultInstance().getExpression();
+      bitField0_ = (bitField0_ & ~0x00000004);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `expression` is the actual CEL expression that will be evaluated for
+     * validation. This string must resolve to either a boolean or a string
+     * value. If the expression evaluates to false or a non-empty string, the
+     * validation is considered failed, and the message is rejected.
+     * </pre>
+     *
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @param value The bytes for expression to set.
+     * @return This builder for chaining.
+     */
+    public Builder setExpressionBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      expression_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.Constraint)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.Constraint)
+  private static final de.danet.buf.validate.Constraint DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.Constraint();
+  }
+
+  public static de.danet.buf.validate.Constraint getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Constraint>
+      PARSER = new com.google.protobuf.AbstractParser<Constraint>() {
+    @java.lang.Override
+    public Constraint parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<Constraint> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Constraint> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.Constraint getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/ConstraintOrBuilder.java b/gen/java/de/danet/buf/validate/ConstraintOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..74a47c7cdaa6210b1fce4520720bd87ad7ef6120
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/ConstraintOrBuilder.java
@@ -0,0 +1,84 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/expression.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface ConstraintOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.Constraint)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `id` is a string that serves as a machine-readable name for this Constraint.
+   * It should be unique within its scope, which could be either a message or a field.
+   * </pre>
+   *
+   * <code>string id = 1 [json_name = "id"];</code>
+   * @return The id.
+   */
+  java.lang.String getId();
+  /**
+   * <pre>
+   * `id` is a string that serves as a machine-readable name for this Constraint.
+   * It should be unique within its scope, which could be either a message or a field.
+   * </pre>
+   *
+   * <code>string id = 1 [json_name = "id"];</code>
+   * @return The bytes for id.
+   */
+  com.google.protobuf.ByteString
+      getIdBytes();
+
+  /**
+   * <pre>
+   * `message` is an optional field that provides a human-readable error message
+   * for this Constraint when the CEL expression evaluates to false. If a
+   * non-empty message is provided, any strings resulting from the CEL
+   * expression evaluation are ignored.
+   * </pre>
+   *
+   * <code>string message = 2 [json_name = "message"];</code>
+   * @return The message.
+   */
+  java.lang.String getMessage();
+  /**
+   * <pre>
+   * `message` is an optional field that provides a human-readable error message
+   * for this Constraint when the CEL expression evaluates to false. If a
+   * non-empty message is provided, any strings resulting from the CEL
+   * expression evaluation are ignored.
+   * </pre>
+   *
+   * <code>string message = 2 [json_name = "message"];</code>
+   * @return The bytes for message.
+   */
+  com.google.protobuf.ByteString
+      getMessageBytes();
+
+  /**
+   * <pre>
+   * `expression` is the actual CEL expression that will be evaluated for
+   * validation. This string must resolve to either a boolean or a string
+   * value. If the expression evaluates to false or a non-empty string, the
+   * validation is considered failed, and the message is rejected.
+   * </pre>
+   *
+   * <code>string expression = 3 [json_name = "expression"];</code>
+   * @return The expression.
+   */
+  java.lang.String getExpression();
+  /**
+   * <pre>
+   * `expression` is the actual CEL expression that will be evaluated for
+   * validation. This string must resolve to either a boolean or a string
+   * value. If the expression evaluates to false or a non-empty string, the
+   * validation is considered failed, and the message is rejected.
+   * </pre>
+   *
+   * <code>string expression = 3 [json_name = "expression"];</code>
+   * @return The bytes for expression.
+   */
+  com.google.protobuf.ByteString
+      getExpressionBytes();
+}
diff --git a/gen/java/de/danet/buf/validate/DoubleRules.java b/gen/java/de/danet/buf/validate/DoubleRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1620c81eb3c313e0086e7a767eab45563cf97f3
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/DoubleRules.java
@@ -0,0 +1,2211 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * DoubleRules describes the constraints applied to `double` values. These
+ * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.DoubleRules}
+ */
+public final class DoubleRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.DoubleRules)
+    DoubleRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use DoubleRules.newBuilder() to construct.
+  private DoubleRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private DoubleRules() {
+    in_ = emptyDoubleList();
+    notIn_ = emptyDoubleList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new DoubleRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DoubleRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DoubleRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.DoubleRules.class, de.danet.buf.validate.DoubleRules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private double const_ = 0D;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must equal 42.0
+   *   double value = 1 [(buf.validate.field).double.const = 42.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional double const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must equal 42.0
+   *   double value = 1 [(buf.validate.field).double.const = 42.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional double const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public double getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be less than 10.0
+   *   double value = 1 [(buf.validate.field).double.lt = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be less than 10.0
+   *   double value = 1 [(buf.validate.field).double.lt = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public double getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Double) lessThan_;
+    }
+    return 0D;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified value
+   * (field &lt;= value). If the field value is greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be less than or equal to 10.0
+   *   double value = 1 [(buf.validate.field).double.lte = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified value
+   * (field &lt;= value). If the field value is greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be less than or equal to 10.0
+   *   double value = 1 [(buf.validate.field).double.lte = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public double getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Double) lessThan_;
+    }
+    return 0D;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+   * the range is reversed, and the field value must be outside the specified
+   * range. If the field value doesn't meet the required conditions, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be greater than 5.0 [double.gt]
+   *   double value = 1 [(buf.validate.field).double.gt = 5.0];
+   *
+   *   // value must be greater than 5 and less than 10.0 [double.gt_lt]
+   *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+   *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+   * the range is reversed, and the field value must be outside the specified
+   * range. If the field value doesn't meet the required conditions, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be greater than 5.0 [double.gt]
+   *   double value = 1 [(buf.validate.field).double.gt = 5.0];
+   *
+   *   // value must be greater than 5 and less than 10.0 [double.gt_lt]
+   *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+   *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public double getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Double) greaterThan_;
+    }
+    return 0D;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be greater than or equal to 5.0 [double.gte]
+   *   double value = 1 [(buf.validate.field).double.gte = 5.0];
+   *
+   *   // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+   *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+   *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be greater than or equal to 5.0 [double.gte]
+   *   double value = 1 [(buf.validate.field).double.gte = 5.0];
+   *
+   *   // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+   *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+   *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public double getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Double) greaterThan_;
+    }
+    return 0D;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.DoubleList in_ =
+      emptyDoubleList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Double>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public double getIn(int index) {
+    return in_.getDouble(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.DoubleList notIn_ =
+      emptyDoubleList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Double>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public double getNotIn(int index) {
+    return notIn_.getDouble(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  public static final int FINITE_FIELD_NUMBER = 8;
+  private boolean finite_ = false;
+  /**
+   * <pre>
+   * `finite` requires the field value to be finite. If the field value is
+   * infinite or NaN, an error message is generated.
+   * </pre>
+   *
+   * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+   * @return The finite.
+   */
+  @java.lang.Override
+  public boolean getFinite() {
+    return finite_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeDouble(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeDouble(
+          2, (double)((java.lang.Double) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeDouble(
+          3, (double)((java.lang.Double) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeDouble(
+          4, (double)((java.lang.Double) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeDouble(
+          5, (double)((java.lang.Double) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeDoubleNoTag(in_.getDouble(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeDoubleNoTag(notIn_.getDouble(i));
+    }
+    if (finite_ != false) {
+      output.writeBool(8, finite_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(
+            2, (double)((java.lang.Double) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(
+            3, (double)((java.lang.Double) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(
+            4, (double)((java.lang.Double) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(
+            5, (double)((java.lang.Double) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      dataSize = 8 * getInList().size();
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      dataSize = 8 * getNotInList().size();
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    if (finite_ != false) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(8, finite_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.DoubleRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.DoubleRules other = (de.danet.buf.validate.DoubleRules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (java.lang.Double.doubleToLongBits(getConst())
+          != java.lang.Double.doubleToLongBits(
+              other.getConst())) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (getFinite()
+        != other.getFinite()) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (java.lang.Double.doubleToLongBits(getLt())
+            != java.lang.Double.doubleToLongBits(
+                other.getLt())) return false;
+        break;
+      case 3:
+        if (java.lang.Double.doubleToLongBits(getLte())
+            != java.lang.Double.doubleToLongBits(
+                other.getLte())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (java.lang.Double.doubleToLongBits(getGt())
+            != java.lang.Double.doubleToLongBits(
+                other.getGt())) return false;
+        break;
+      case 5:
+        if (java.lang.Double.doubleToLongBits(getGte())
+            != java.lang.Double.doubleToLongBits(
+                other.getGte())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getConst()));
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    hash = (37 * hash) + FINITE_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+        getFinite());
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            java.lang.Double.doubleToLongBits(getLt()));
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            java.lang.Double.doubleToLongBits(getLte()));
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            java.lang.Double.doubleToLongBits(getGt()));
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            java.lang.Double.doubleToLongBits(getGte()));
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.DoubleRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.DoubleRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.DoubleRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.DoubleRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.DoubleRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * DoubleRules describes the constraints applied to `double` values. These
+   * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.DoubleRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.DoubleRules)
+      de.danet.buf.validate.DoubleRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DoubleRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DoubleRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.DoubleRules.class, de.danet.buf.validate.DoubleRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.DoubleRules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0D;
+      in_ = emptyDoubleList();
+      notIn_ = emptyDoubleList();
+      finite_ = false;
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DoubleRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.DoubleRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.DoubleRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.DoubleRules build() {
+      de.danet.buf.validate.DoubleRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.DoubleRules buildPartial() {
+      de.danet.buf.validate.DoubleRules result = new de.danet.buf.validate.DoubleRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.DoubleRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      if (((from_bitField0_ & 0x00000080) != 0)) {
+        result.finite_ = finite_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.DoubleRules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.DoubleRules) {
+        return mergeFrom((de.danet.buf.validate.DoubleRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.DoubleRules other) {
+      if (other == de.danet.buf.validate.DoubleRules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      if (other.getFinite() != false) {
+        setFinite(other.getFinite());
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 9: {
+              const_ = input.readDouble();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 9
+            case 17: {
+              lessThan_ = input.readDouble();
+              lessThanCase_ = 2;
+              break;
+            } // case 17
+            case 25: {
+              lessThan_ = input.readDouble();
+              lessThanCase_ = 3;
+              break;
+            } // case 25
+            case 33: {
+              greaterThan_ = input.readDouble();
+              greaterThanCase_ = 4;
+              break;
+            } // case 33
+            case 41: {
+              greaterThan_ = input.readDouble();
+              greaterThanCase_ = 5;
+              break;
+            } // case 41
+            case 49: {
+              double v = input.readDouble();
+              ensureInIsMutable();
+              in_.addDouble(v);
+              break;
+            } // case 49
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureInIsMutable(alloc / 8);
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addDouble(input.readDouble());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 57: {
+              double v = input.readDouble();
+              ensureNotInIsMutable();
+              notIn_.addDouble(v);
+              break;
+            } // case 57
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureNotInIsMutable(alloc / 8);
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addDouble(input.readDouble());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            case 64: {
+              finite_ = input.readBool();
+              bitField0_ |= 0x00000080;
+              break;
+            } // case 64
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private double const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must equal 42.0
+     *   double value = 1 [(buf.validate.field).double.const = 42.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional double const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must equal 42.0
+     *   double value = 1 [(buf.validate.field).double.const = 42.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional double const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public double getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must equal 42.0
+     *   double value = 1 [(buf.validate.field).double.const = 42.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional double const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(double value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must equal 42.0
+     *   double value = 1 [(buf.validate.field).double.const = 42.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional double const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be less than 10.0
+     *   double value = 1 [(buf.validate.field).double.lt = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be less than 10.0
+     *   double value = 1 [(buf.validate.field).double.lt = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public double getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Double) lessThan_;
+      }
+      return 0D;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be less than 10.0
+     *   double value = 1 [(buf.validate.field).double.lt = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(double value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be less than 10.0
+     *   double value = 1 [(buf.validate.field).double.lt = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified value
+     * (field &lt;= value). If the field value is greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be less than or equal to 10.0
+     *   double value = 1 [(buf.validate.field).double.lte = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified value
+     * (field &lt;= value). If the field value is greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be less than or equal to 10.0
+     *   double value = 1 [(buf.validate.field).double.lte = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public double getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Double) lessThan_;
+      }
+      return 0D;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified value
+     * (field &lt;= value). If the field value is greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be less than or equal to 10.0
+     *   double value = 1 [(buf.validate.field).double.lte = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(double value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified value
+     * (field &lt;= value). If the field value is greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be less than or equal to 10.0
+     *   double value = 1 [(buf.validate.field).double.lte = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+     * the range is reversed, and the field value must be outside the specified
+     * range. If the field value doesn't meet the required conditions, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be greater than 5.0 [double.gt]
+     *   double value = 1 [(buf.validate.field).double.gt = 5.0];
+     *
+     *   // value must be greater than 5 and less than 10.0 [double.gt_lt]
+     *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+     *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+     * the range is reversed, and the field value must be outside the specified
+     * range. If the field value doesn't meet the required conditions, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be greater than 5.0 [double.gt]
+     *   double value = 1 [(buf.validate.field).double.gt = 5.0];
+     *
+     *   // value must be greater than 5 and less than 10.0 [double.gt_lt]
+     *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+     *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public double getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Double) greaterThan_;
+      }
+      return 0D;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+     * the range is reversed, and the field value must be outside the specified
+     * range. If the field value doesn't meet the required conditions, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be greater than 5.0 [double.gt]
+     *   double value = 1 [(buf.validate.field).double.gt = 5.0];
+     *
+     *   // value must be greater than 5 and less than 10.0 [double.gt_lt]
+     *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+     *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(double value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+     * the range is reversed, and the field value must be outside the specified
+     * range. If the field value doesn't meet the required conditions, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be greater than 5.0 [double.gt]
+     *   double value = 1 [(buf.validate.field).double.gt = 5.0];
+     *
+     *   // value must be greater than 5 and less than 10.0 [double.gt_lt]
+     *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+     *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be greater than or equal to 5.0 [double.gte]
+     *   double value = 1 [(buf.validate.field).double.gte = 5.0];
+     *
+     *   // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+     *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+     *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be greater than or equal to 5.0 [double.gte]
+     *   double value = 1 [(buf.validate.field).double.gte = 5.0];
+     *
+     *   // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+     *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+     *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public double getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Double) greaterThan_;
+      }
+      return 0D;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be greater than or equal to 5.0 [double.gte]
+     *   double value = 1 [(buf.validate.field).double.gte = 5.0];
+     *
+     *   // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+     *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+     *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(double value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be greater than or equal to 5.0 [double.gte]
+     *   double value = 1 [(buf.validate.field).double.gte = 5.0];
+     *
+     *   // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+     *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+     *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>double gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.DoubleList in_ = emptyDoubleList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    private void ensureInIsMutable(int capacity) {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_, capacity);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Double>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public double getIn(int index) {
+      return in_.getDouble(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, double value) {
+
+      ensureInIsMutable();
+      in_.setDouble(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(double value) {
+
+      ensureInIsMutable();
+      in_.addDouble(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Double> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyDoubleList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.DoubleList notIn_ = emptyDoubleList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    private void ensureNotInIsMutable(int capacity) {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_, capacity);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Double>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public double getNotIn(int index) {
+      return notIn_.getDouble(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, double value) {
+
+      ensureNotInIsMutable();
+      notIn_.setDouble(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(double value) {
+
+      ensureNotInIsMutable();
+      notIn_.addDouble(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Double> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyDouble {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyDoubleList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+
+    private boolean finite_ ;
+    /**
+     * <pre>
+     * `finite` requires the field value to be finite. If the field value is
+     * infinite or NaN, an error message is generated.
+     * </pre>
+     *
+     * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+     * @return The finite.
+     */
+    @java.lang.Override
+    public boolean getFinite() {
+      return finite_;
+    }
+    /**
+     * <pre>
+     * `finite` requires the field value to be finite. If the field value is
+     * infinite or NaN, an error message is generated.
+     * </pre>
+     *
+     * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The finite to set.
+     * @return This builder for chaining.
+     */
+    public Builder setFinite(boolean value) {
+
+      finite_ = value;
+      bitField0_ |= 0x00000080;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `finite` requires the field value to be finite. If the field value is
+     * infinite or NaN, an error message is generated.
+     * </pre>
+     *
+     * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearFinite() {
+      bitField0_ = (bitField0_ & ~0x00000080);
+      finite_ = false;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.DoubleRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.DoubleRules)
+  private static final de.danet.buf.validate.DoubleRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.DoubleRules();
+  }
+
+  public static de.danet.buf.validate.DoubleRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<DoubleRules>
+      PARSER = new com.google.protobuf.AbstractParser<DoubleRules>() {
+    @java.lang.Override
+    public DoubleRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<DoubleRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<DoubleRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.DoubleRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/DoubleRulesOrBuilder.java b/gen/java/de/danet/buf/validate/DoubleRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f5f0a0e04c4ce3387ee7c9936d71a6672277d4f
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/DoubleRulesOrBuilder.java
@@ -0,0 +1,352 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface DoubleRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.DoubleRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must equal 42.0
+   *   double value = 1 [(buf.validate.field).double.const = 42.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional double const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must equal 42.0
+   *   double value = 1 [(buf.validate.field).double.const = 42.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional double const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  double getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be less than 10.0
+   *   double value = 1 [(buf.validate.field).double.lt = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be less than 10.0
+   *   double value = 1 [(buf.validate.field).double.lt = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  double getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified value
+   * (field &lt;= value). If the field value is greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be less than or equal to 10.0
+   *   double value = 1 [(buf.validate.field).double.lte = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified value
+   * (field &lt;= value). If the field value is greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be less than or equal to 10.0
+   *   double value = 1 [(buf.validate.field).double.lte = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  double getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+   * the range is reversed, and the field value must be outside the specified
+   * range. If the field value doesn't meet the required conditions, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be greater than 5.0 [double.gt]
+   *   double value = 1 [(buf.validate.field).double.gt = 5.0];
+   *
+   *   // value must be greater than 5 and less than 10.0 [double.gt_lt]
+   *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+   *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
+   * the range is reversed, and the field value must be outside the specified
+   * range. If the field value doesn't meet the required conditions, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be greater than 5.0 [double.gt]
+   *   double value = 1 [(buf.validate.field).double.gt = 5.0];
+   *
+   *   // value must be greater than 5 and less than 10.0 [double.gt_lt]
+   *   double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
+   *   double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  double getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be greater than or equal to 5.0 [double.gte]
+   *   double value = 1 [(buf.validate.field).double.gte = 5.0];
+   *
+   *   // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+   *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+   *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be greater than or equal to 5.0 [double.gte]
+   *   double value = 1 [(buf.validate.field).double.gte = 5.0];
+   *
+   *   // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
+   *   double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
+   *   double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>double gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  double getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Double> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  double getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Double> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyDouble {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated double value = 1 (buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated double not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  double getNotIn(int index);
+
+  /**
+   * <pre>
+   * `finite` requires the field value to be finite. If the field value is
+   * infinite or NaN, an error message is generated.
+   * </pre>
+   *
+   * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+   * @return The finite.
+   */
+  boolean getFinite();
+
+  de.danet.buf.validate.DoubleRules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.DoubleRules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/DurationRules.java b/gen/java/de/danet/buf/validate/DurationRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..812fe7b2e73b4d41658c31f6ea30b8cffff37152
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/DurationRules.java
@@ -0,0 +1,3884 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * DurationRules describe the constraints applied exclusively to the `google.protobuf.Duration` well-known type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.DurationRules}
+ */
+public final class DurationRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.DurationRules)
+    DurationRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use DurationRules.newBuilder() to construct.
+  private DurationRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private DurationRules() {
+    in_ = java.util.Collections.emptyList();
+    notIn_ = java.util.Collections.emptyList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new DurationRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DurationRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DurationRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.DurationRules.class, de.danet.buf.validate.DurationRules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(3),
+    LTE(4),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 3: return LT;
+        case 4: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(5),
+    GTE(6),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 5: return GT;
+        case 6: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 2;
+  private com.google.protobuf.Duration const_;
+  /**
+   * <pre>
+   * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+   * If the field's value deviates from the specified value, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must equal 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+   * If the field's value deviates from the specified value, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must equal 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Duration getConst() {
+    return const_ == null ? com.google.protobuf.Duration.getDefaultInstance() : const_;
+  }
+  /**
+   * <pre>
+   * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+   * If the field's value deviates from the specified value, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must equal 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.DurationOrBuilder getConstOrBuilder() {
+    return const_ == null ? com.google.protobuf.Duration.getDefaultInstance() : const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+   * exclusive. If the field's value is greater than or equal to the specified
+   * value, an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+   * exclusive. If the field's value is greater than or equal to the specified
+   * value, an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Duration getLt() {
+    if (lessThanCase_ == 3) {
+       return (com.google.protobuf.Duration) lessThan_;
+    }
+    return com.google.protobuf.Duration.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+   * exclusive. If the field's value is greater than or equal to the specified
+   * value, an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.DurationOrBuilder getLtOrBuilder() {
+    if (lessThanCase_ == 3) {
+       return (com.google.protobuf.Duration) lessThan_;
+    }
+    return com.google.protobuf.Duration.getDefaultInstance();
+  }
+
+  public static final int LTE_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `lte` indicates that the field must be less than or equal to the specified
+   * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than or equal to 10s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `lte` indicates that the field must be less than or equal to the specified
+   * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than or equal to 10s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Duration getLte() {
+    if (lessThanCase_ == 4) {
+       return (com.google.protobuf.Duration) lessThan_;
+    }
+    return com.google.protobuf.Duration.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * `lte` indicates that the field must be less than or equal to the specified
+   * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than or equal to 10s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.DurationOrBuilder getLteOrBuilder() {
+    if (lessThanCase_ == 4) {
+       return (com.google.protobuf.Duration) lessThan_;
+    }
+    return com.google.protobuf.Duration.getDefaultInstance();
+  }
+
+  public static final int GT_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gt` requires the duration field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be greater than 5s [duration.gt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+   *
+   *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+   *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+   *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gt` requires the duration field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be greater than 5s [duration.gt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+   *
+   *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+   *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+   *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Duration getGt() {
+    if (greaterThanCase_ == 5) {
+       return (com.google.protobuf.Duration) greaterThan_;
+    }
+    return com.google.protobuf.Duration.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * `gt` requires the duration field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be greater than 5s [duration.gt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+   *
+   *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+   *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+   *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.DurationOrBuilder getGtOrBuilder() {
+    if (greaterThanCase_ == 5) {
+       return (com.google.protobuf.Duration) greaterThan_;
+    }
+    return com.google.protobuf.Duration.getDefaultInstance();
+  }
+
+  public static final int GTE_FIELD_NUMBER = 6;
+  /**
+   * <pre>
+   * `gte` requires the duration field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value must
+   * be outside the specified range. If the field value doesn't meet the
+   * required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *  // duration must be greater than or equal to 5s [duration.gte]
+   *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+   *
+   *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+   *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+   *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 6;
+  }
+  /**
+   * <pre>
+   * `gte` requires the duration field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value must
+   * be outside the specified range. If the field value doesn't meet the
+   * required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *  // duration must be greater than or equal to 5s [duration.gte]
+   *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+   *
+   *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+   *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+   *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Duration getGte() {
+    if (greaterThanCase_ == 6) {
+       return (com.google.protobuf.Duration) greaterThan_;
+    }
+    return com.google.protobuf.Duration.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * `gte` requires the duration field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value must
+   * be outside the specified range. If the field value doesn't meet the
+   * required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *  // duration must be greater than or equal to 5s [duration.gte]
+   *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+   *
+   *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+   *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+   *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.DurationOrBuilder getGteOrBuilder() {
+    if (greaterThanCase_ == 6) {
+       return (com.google.protobuf.Duration) greaterThan_;
+    }
+    return com.google.protobuf.Duration.getDefaultInstance();
+  }
+
+  public static final int IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private java.util.List<com.google.protobuf.Duration> in_;
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public java.util.List<com.google.protobuf.Duration> getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public java.util.List<? extends com.google.protobuf.DurationOrBuilder> 
+      getInOrBuilderList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.Duration getIn(int index) {
+    return in_.get(index);
+  }
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.DurationOrBuilder getInOrBuilder(
+      int index) {
+    return in_.get(index);
+  }
+
+  public static final int NOT_IN_FIELD_NUMBER = 8;
+  @SuppressWarnings("serial")
+  private java.util.List<com.google.protobuf.Duration> notIn_;
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public java.util.List<com.google.protobuf.Duration> getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public java.util.List<? extends com.google.protobuf.DurationOrBuilder> 
+      getNotInOrBuilderList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.Duration getNotIn(int index) {
+    return notIn_.get(index);
+  }
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.DurationOrBuilder getNotInOrBuilder(
+      int index) {
+    return notIn_.get(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeMessage(2, getConst());
+    }
+    if (lessThanCase_ == 3) {
+      output.writeMessage(3, (com.google.protobuf.Duration) lessThan_);
+    }
+    if (lessThanCase_ == 4) {
+      output.writeMessage(4, (com.google.protobuf.Duration) lessThan_);
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeMessage(5, (com.google.protobuf.Duration) greaterThan_);
+    }
+    if (greaterThanCase_ == 6) {
+      output.writeMessage(6, (com.google.protobuf.Duration) greaterThan_);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeMessage(7, in_.get(i));
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeMessage(8, notIn_.get(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(2, getConst());
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(3, (com.google.protobuf.Duration) lessThan_);
+    }
+    if (lessThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(4, (com.google.protobuf.Duration) lessThan_);
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(5, (com.google.protobuf.Duration) greaterThan_);
+    }
+    if (greaterThanCase_ == 6) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(6, (com.google.protobuf.Duration) greaterThan_);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(7, in_.get(i));
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(8, notIn_.get(i));
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.DurationRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.DurationRules other = (de.danet.buf.validate.DurationRules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (!getConst()
+          .equals(other.getConst())) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 3:
+        if (!getLt()
+            .equals(other.getLt())) return false;
+        break;
+      case 4:
+        if (!getLte()
+            .equals(other.getLte())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 5:
+        if (!getGt()
+            .equals(other.getGt())) return false;
+        break;
+      case 6:
+        if (!getGte()
+            .equals(other.getGte())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst().hashCode();
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 3:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + getLt().hashCode();
+        break;
+      case 4:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + getLte().hashCode();
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 5:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + getGt().hashCode();
+        break;
+      case 6:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + getGte().hashCode();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.DurationRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.DurationRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.DurationRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.DurationRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.DurationRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * DurationRules describe the constraints applied exclusively to the `google.protobuf.Duration` well-known type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.DurationRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.DurationRules)
+      de.danet.buf.validate.DurationRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DurationRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DurationRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.DurationRules.class, de.danet.buf.validate.DurationRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.DurationRules.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+        getConstFieldBuilder();
+        getInFieldBuilder();
+        getNotInFieldBuilder();
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = null;
+      if (constBuilder_ != null) {
+        constBuilder_.dispose();
+        constBuilder_ = null;
+      }
+      if (ltBuilder_ != null) {
+        ltBuilder_.clear();
+      }
+      if (lteBuilder_ != null) {
+        lteBuilder_.clear();
+      }
+      if (gtBuilder_ != null) {
+        gtBuilder_.clear();
+      }
+      if (gteBuilder_ != null) {
+        gteBuilder_.clear();
+      }
+      if (inBuilder_ == null) {
+        in_ = java.util.Collections.emptyList();
+      } else {
+        in_ = null;
+        inBuilder_.clear();
+      }
+      bitField0_ = (bitField0_ & ~0x00000020);
+      if (notInBuilder_ == null) {
+        notIn_ = java.util.Collections.emptyList();
+      } else {
+        notIn_ = null;
+        notInBuilder_.clear();
+      }
+      bitField0_ = (bitField0_ & ~0x00000040);
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_DurationRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.DurationRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.DurationRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.DurationRules build() {
+      de.danet.buf.validate.DurationRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.DurationRules buildPartial() {
+      de.danet.buf.validate.DurationRules result = new de.danet.buf.validate.DurationRules(this);
+      buildPartialRepeatedFields(result);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartialRepeatedFields(de.danet.buf.validate.DurationRules result) {
+      if (inBuilder_ == null) {
+        if (((bitField0_ & 0x00000020) != 0)) {
+          in_ = java.util.Collections.unmodifiableList(in_);
+          bitField0_ = (bitField0_ & ~0x00000020);
+        }
+        result.in_ = in_;
+      } else {
+        result.in_ = inBuilder_.build();
+      }
+      if (notInBuilder_ == null) {
+        if (((bitField0_ & 0x00000040) != 0)) {
+          notIn_ = java.util.Collections.unmodifiableList(notIn_);
+          bitField0_ = (bitField0_ & ~0x00000040);
+        }
+        result.notIn_ = notIn_;
+      } else {
+        result.notIn_ = notInBuilder_.build();
+      }
+    }
+
+    private void buildPartial0(de.danet.buf.validate.DurationRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = constBuilder_ == null
+            ? const_
+            : constBuilder_.build();
+        to_bitField0_ |= 0x00000001;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.DurationRules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      if (lessThanCase_ == 3 &&
+          ltBuilder_ != null) {
+        result.lessThan_ = ltBuilder_.build();
+      }
+      if (lessThanCase_ == 4 &&
+          lteBuilder_ != null) {
+        result.lessThan_ = lteBuilder_.build();
+      }
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+      if (greaterThanCase_ == 5 &&
+          gtBuilder_ != null) {
+        result.greaterThan_ = gtBuilder_.build();
+      }
+      if (greaterThanCase_ == 6 &&
+          gteBuilder_ != null) {
+        result.greaterThan_ = gteBuilder_.build();
+      }
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.DurationRules) {
+        return mergeFrom((de.danet.buf.validate.DurationRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.DurationRules other) {
+      if (other == de.danet.buf.validate.DurationRules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        mergeConst(other.getConst());
+      }
+      if (inBuilder_ == null) {
+        if (!other.in_.isEmpty()) {
+          if (in_.isEmpty()) {
+            in_ = other.in_;
+            bitField0_ = (bitField0_ & ~0x00000020);
+          } else {
+            ensureInIsMutable();
+            in_.addAll(other.in_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.in_.isEmpty()) {
+          if (inBuilder_.isEmpty()) {
+            inBuilder_.dispose();
+            inBuilder_ = null;
+            in_ = other.in_;
+            bitField0_ = (bitField0_ & ~0x00000020);
+            inBuilder_ = 
+              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                 getInFieldBuilder() : null;
+          } else {
+            inBuilder_.addAllMessages(other.in_);
+          }
+        }
+      }
+      if (notInBuilder_ == null) {
+        if (!other.notIn_.isEmpty()) {
+          if (notIn_.isEmpty()) {
+            notIn_ = other.notIn_;
+            bitField0_ = (bitField0_ & ~0x00000040);
+          } else {
+            ensureNotInIsMutable();
+            notIn_.addAll(other.notIn_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.notIn_.isEmpty()) {
+          if (notInBuilder_.isEmpty()) {
+            notInBuilder_.dispose();
+            notInBuilder_ = null;
+            notIn_ = other.notIn_;
+            bitField0_ = (bitField0_ & ~0x00000040);
+            notInBuilder_ = 
+              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                 getNotInFieldBuilder() : null;
+          } else {
+            notInBuilder_.addAllMessages(other.notIn_);
+          }
+        }
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          mergeLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          mergeLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          mergeGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          mergeGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 18: {
+              input.readMessage(
+                  getConstFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 18
+            case 26: {
+              input.readMessage(
+                  getLtFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              lessThanCase_ = 3;
+              break;
+            } // case 26
+            case 34: {
+              input.readMessage(
+                  getLteFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              lessThanCase_ = 4;
+              break;
+            } // case 34
+            case 42: {
+              input.readMessage(
+                  getGtFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              greaterThanCase_ = 5;
+              break;
+            } // case 42
+            case 50: {
+              input.readMessage(
+                  getGteFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              greaterThanCase_ = 6;
+              break;
+            } // case 50
+            case 58: {
+              com.google.protobuf.Duration m =
+                  input.readMessage(
+                      com.google.protobuf.Duration.parser(),
+                      extensionRegistry);
+              if (inBuilder_ == null) {
+                ensureInIsMutable();
+                in_.add(m);
+              } else {
+                inBuilder_.addMessage(m);
+              }
+              break;
+            } // case 58
+            case 66: {
+              com.google.protobuf.Duration m =
+                  input.readMessage(
+                      com.google.protobuf.Duration.parser(),
+                      extensionRegistry);
+              if (notInBuilder_ == null) {
+                ensureNotInIsMutable();
+                notIn_.add(m);
+              } else {
+                notInBuilder_.addMessage(m);
+              }
+              break;
+            } // case 66
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private com.google.protobuf.Duration const_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> constBuilder_;
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    public com.google.protobuf.Duration getConst() {
+      if (constBuilder_ == null) {
+        return const_ == null ? com.google.protobuf.Duration.getDefaultInstance() : const_;
+      } else {
+        return constBuilder_.getMessage();
+      }
+    }
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setConst(com.google.protobuf.Duration value) {
+      if (constBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        const_ = value;
+      } else {
+        constBuilder_.setMessage(value);
+      }
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setConst(
+        com.google.protobuf.Duration.Builder builderForValue) {
+      if (constBuilder_ == null) {
+        const_ = builderForValue.build();
+      } else {
+        constBuilder_.setMessage(builderForValue.build());
+      }
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeConst(com.google.protobuf.Duration value) {
+      if (constBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0) &&
+          const_ != null &&
+          const_ != com.google.protobuf.Duration.getDefaultInstance()) {
+          getConstBuilder().mergeFrom(value);
+        } else {
+          const_ = value;
+        }
+      } else {
+        constBuilder_.mergeFrom(value);
+      }
+      if (const_ != null) {
+        bitField0_ |= 0x00000001;
+        onChanged();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = null;
+      if (constBuilder_ != null) {
+        constBuilder_.dispose();
+        constBuilder_ = null;
+      }
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder getConstBuilder() {
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return getConstFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.DurationOrBuilder getConstOrBuilder() {
+      if (constBuilder_ != null) {
+        return constBuilder_.getMessageOrBuilder();
+      } else {
+        return const_ == null ?
+            com.google.protobuf.Duration.getDefaultInstance() : const_;
+      }
+    }
+    /**
+     * <pre>
+     * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+     * If the field's value deviates from the specified value, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must equal 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
+        getConstFieldBuilder() {
+      if (constBuilder_ == null) {
+        constBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
+                getConst(),
+                getParentForChildren(),
+                isClean());
+        const_ = null;
+      }
+      return constBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> ltBuilder_;
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    @java.lang.Override
+    public boolean hasLt() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    @java.lang.Override
+    public com.google.protobuf.Duration getLt() {
+      if (ltBuilder_ == null) {
+        if (lessThanCase_ == 3) {
+          return (com.google.protobuf.Duration) lessThan_;
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      } else {
+        if (lessThanCase_ == 3) {
+          return ltBuilder_.getMessage();
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setLt(com.google.protobuf.Duration value) {
+      if (ltBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        lessThan_ = value;
+        onChanged();
+      } else {
+        ltBuilder_.setMessage(value);
+      }
+      lessThanCase_ = 3;
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setLt(
+        com.google.protobuf.Duration.Builder builderForValue) {
+      if (ltBuilder_ == null) {
+        lessThan_ = builderForValue.build();
+        onChanged();
+      } else {
+        ltBuilder_.setMessage(builderForValue.build());
+      }
+      lessThanCase_ = 3;
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeLt(com.google.protobuf.Duration value) {
+      if (ltBuilder_ == null) {
+        if (lessThanCase_ == 3 &&
+            lessThan_ != com.google.protobuf.Duration.getDefaultInstance()) {
+          lessThan_ = com.google.protobuf.Duration.newBuilder((com.google.protobuf.Duration) lessThan_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          lessThan_ = value;
+        }
+        onChanged();
+      } else {
+        if (lessThanCase_ == 3) {
+          ltBuilder_.mergeFrom(value);
+        } else {
+          ltBuilder_.setMessage(value);
+        }
+      }
+      lessThanCase_ = 3;
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearLt() {
+      if (ltBuilder_ == null) {
+        if (lessThanCase_ == 3) {
+          lessThanCase_ = 0;
+          lessThan_ = null;
+          onChanged();
+        }
+      } else {
+        if (lessThanCase_ == 3) {
+          lessThanCase_ = 0;
+          lessThan_ = null;
+        }
+        ltBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder getLtBuilder() {
+      return getLtFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    @java.lang.Override
+    public com.google.protobuf.DurationOrBuilder getLtOrBuilder() {
+      if ((lessThanCase_ == 3) && (ltBuilder_ != null)) {
+        return ltBuilder_.getMessageOrBuilder();
+      } else {
+        if (lessThanCase_ == 3) {
+          return (com.google.protobuf.Duration) lessThan_;
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+     * exclusive. If the field's value is greater than or equal to the specified
+     * value, an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than 5s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
+        getLtFieldBuilder() {
+      if (ltBuilder_ == null) {
+        if (!(lessThanCase_ == 3)) {
+          lessThan_ = com.google.protobuf.Duration.getDefaultInstance();
+        }
+        ltBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
+                (com.google.protobuf.Duration) lessThan_,
+                getParentForChildren(),
+                isClean());
+        lessThan_ = null;
+      }
+      lessThanCase_ = 3;
+      onChanged();
+      return ltBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> lteBuilder_;
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    @java.lang.Override
+    public boolean hasLte() {
+      return lessThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    @java.lang.Override
+    public com.google.protobuf.Duration getLte() {
+      if (lteBuilder_ == null) {
+        if (lessThanCase_ == 4) {
+          return (com.google.protobuf.Duration) lessThan_;
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      } else {
+        if (lessThanCase_ == 4) {
+          return lteBuilder_.getMessage();
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setLte(com.google.protobuf.Duration value) {
+      if (lteBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        lessThan_ = value;
+        onChanged();
+      } else {
+        lteBuilder_.setMessage(value);
+      }
+      lessThanCase_ = 4;
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setLte(
+        com.google.protobuf.Duration.Builder builderForValue) {
+      if (lteBuilder_ == null) {
+        lessThan_ = builderForValue.build();
+        onChanged();
+      } else {
+        lteBuilder_.setMessage(builderForValue.build());
+      }
+      lessThanCase_ = 4;
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeLte(com.google.protobuf.Duration value) {
+      if (lteBuilder_ == null) {
+        if (lessThanCase_ == 4 &&
+            lessThan_ != com.google.protobuf.Duration.getDefaultInstance()) {
+          lessThan_ = com.google.protobuf.Duration.newBuilder((com.google.protobuf.Duration) lessThan_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          lessThan_ = value;
+        }
+        onChanged();
+      } else {
+        if (lessThanCase_ == 4) {
+          lteBuilder_.mergeFrom(value);
+        } else {
+          lteBuilder_.setMessage(value);
+        }
+      }
+      lessThanCase_ = 4;
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearLte() {
+      if (lteBuilder_ == null) {
+        if (lessThanCase_ == 4) {
+          lessThanCase_ = 0;
+          lessThan_ = null;
+          onChanged();
+        }
+      } else {
+        if (lessThanCase_ == 4) {
+          lessThanCase_ = 0;
+          lessThan_ = null;
+        }
+        lteBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder getLteBuilder() {
+      return getLteFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    @java.lang.Override
+    public com.google.protobuf.DurationOrBuilder getLteOrBuilder() {
+      if ((lessThanCase_ == 4) && (lteBuilder_ != null)) {
+        return lteBuilder_.getMessageOrBuilder();
+      } else {
+        if (lessThanCase_ == 4) {
+          return (com.google.protobuf.Duration) lessThan_;
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `lte` indicates that the field must be less than or equal to the specified
+     * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be less than or equal to 10s
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
+        getLteFieldBuilder() {
+      if (lteBuilder_ == null) {
+        if (!(lessThanCase_ == 4)) {
+          lessThan_ = com.google.protobuf.Duration.getDefaultInstance();
+        }
+        lteBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
+                (com.google.protobuf.Duration) lessThan_,
+                getParentForChildren(),
+                isClean());
+        lessThan_ = null;
+      }
+      lessThanCase_ = 4;
+      onChanged();
+      return lteBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> gtBuilder_;
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    @java.lang.Override
+    public boolean hasGt() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    @java.lang.Override
+    public com.google.protobuf.Duration getGt() {
+      if (gtBuilder_ == null) {
+        if (greaterThanCase_ == 5) {
+          return (com.google.protobuf.Duration) greaterThan_;
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      } else {
+        if (greaterThanCase_ == 5) {
+          return gtBuilder_.getMessage();
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setGt(com.google.protobuf.Duration value) {
+      if (gtBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        greaterThan_ = value;
+        onChanged();
+      } else {
+        gtBuilder_.setMessage(value);
+      }
+      greaterThanCase_ = 5;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setGt(
+        com.google.protobuf.Duration.Builder builderForValue) {
+      if (gtBuilder_ == null) {
+        greaterThan_ = builderForValue.build();
+        onChanged();
+      } else {
+        gtBuilder_.setMessage(builderForValue.build());
+      }
+      greaterThanCase_ = 5;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeGt(com.google.protobuf.Duration value) {
+      if (gtBuilder_ == null) {
+        if (greaterThanCase_ == 5 &&
+            greaterThan_ != com.google.protobuf.Duration.getDefaultInstance()) {
+          greaterThan_ = com.google.protobuf.Duration.newBuilder((com.google.protobuf.Duration) greaterThan_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          greaterThan_ = value;
+        }
+        onChanged();
+      } else {
+        if (greaterThanCase_ == 5) {
+          gtBuilder_.mergeFrom(value);
+        } else {
+          gtBuilder_.setMessage(value);
+        }
+      }
+      greaterThanCase_ = 5;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearGt() {
+      if (gtBuilder_ == null) {
+        if (greaterThanCase_ == 5) {
+          greaterThanCase_ = 0;
+          greaterThan_ = null;
+          onChanged();
+        }
+      } else {
+        if (greaterThanCase_ == 5) {
+          greaterThanCase_ = 0;
+          greaterThan_ = null;
+        }
+        gtBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder getGtBuilder() {
+      return getGtFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    @java.lang.Override
+    public com.google.protobuf.DurationOrBuilder getGtOrBuilder() {
+      if ((greaterThanCase_ == 5) && (gtBuilder_ != null)) {
+        return gtBuilder_.getMessageOrBuilder();
+      } else {
+        if (greaterThanCase_ == 5) {
+          return (com.google.protobuf.Duration) greaterThan_;
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `gt` requires the duration field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be greater than 5s [duration.gt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+     *
+     *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+     *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+     *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
+        getGtFieldBuilder() {
+      if (gtBuilder_ == null) {
+        if (!(greaterThanCase_ == 5)) {
+          greaterThan_ = com.google.protobuf.Duration.getDefaultInstance();
+        }
+        gtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
+                (com.google.protobuf.Duration) greaterThan_,
+                getParentForChildren(),
+                isClean());
+        greaterThan_ = null;
+      }
+      greaterThanCase_ = 5;
+      onChanged();
+      return gtBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> gteBuilder_;
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    @java.lang.Override
+    public boolean hasGte() {
+      return greaterThanCase_ == 6;
+    }
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    @java.lang.Override
+    public com.google.protobuf.Duration getGte() {
+      if (gteBuilder_ == null) {
+        if (greaterThanCase_ == 6) {
+          return (com.google.protobuf.Duration) greaterThan_;
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      } else {
+        if (greaterThanCase_ == 6) {
+          return gteBuilder_.getMessage();
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setGte(com.google.protobuf.Duration value) {
+      if (gteBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        greaterThan_ = value;
+        onChanged();
+      } else {
+        gteBuilder_.setMessage(value);
+      }
+      greaterThanCase_ = 6;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setGte(
+        com.google.protobuf.Duration.Builder builderForValue) {
+      if (gteBuilder_ == null) {
+        greaterThan_ = builderForValue.build();
+        onChanged();
+      } else {
+        gteBuilder_.setMessage(builderForValue.build());
+      }
+      greaterThanCase_ = 6;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeGte(com.google.protobuf.Duration value) {
+      if (gteBuilder_ == null) {
+        if (greaterThanCase_ == 6 &&
+            greaterThan_ != com.google.protobuf.Duration.getDefaultInstance()) {
+          greaterThan_ = com.google.protobuf.Duration.newBuilder((com.google.protobuf.Duration) greaterThan_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          greaterThan_ = value;
+        }
+        onChanged();
+      } else {
+        if (greaterThanCase_ == 6) {
+          gteBuilder_.mergeFrom(value);
+        } else {
+          gteBuilder_.setMessage(value);
+        }
+      }
+      greaterThanCase_ = 6;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearGte() {
+      if (gteBuilder_ == null) {
+        if (greaterThanCase_ == 6) {
+          greaterThanCase_ = 0;
+          greaterThan_ = null;
+          onChanged();
+        }
+      } else {
+        if (greaterThanCase_ == 6) {
+          greaterThanCase_ = 0;
+          greaterThan_ = null;
+        }
+        gteBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder getGteBuilder() {
+      return getGteFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    @java.lang.Override
+    public com.google.protobuf.DurationOrBuilder getGteOrBuilder() {
+      if ((greaterThanCase_ == 6) && (gteBuilder_ != null)) {
+        return gteBuilder_.getMessageOrBuilder();
+      } else {
+        if (greaterThanCase_ == 6) {
+          return (com.google.protobuf.Duration) greaterThan_;
+        }
+        return com.google.protobuf.Duration.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `gte` requires the duration field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value must
+     * be outside the specified range. If the field value doesn't meet the
+     * required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *  // duration must be greater than or equal to 5s [duration.gte]
+     *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+     *
+     *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+     *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+     *
+     *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+     *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
+        getGteFieldBuilder() {
+      if (gteBuilder_ == null) {
+        if (!(greaterThanCase_ == 6)) {
+          greaterThan_ = com.google.protobuf.Duration.getDefaultInstance();
+        }
+        gteBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
+                (com.google.protobuf.Duration) greaterThan_,
+                getParentForChildren(),
+                isClean());
+        greaterThan_ = null;
+      }
+      greaterThanCase_ = 6;
+      onChanged();
+      return gteBuilder_;
+    }
+
+    private java.util.List<com.google.protobuf.Duration> in_ =
+      java.util.Collections.emptyList();
+    private void ensureInIsMutable() {
+      if (!((bitField0_ & 0x00000020) != 0)) {
+        in_ = new java.util.ArrayList<com.google.protobuf.Duration>(in_);
+        bitField0_ |= 0x00000020;
+       }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> inBuilder_;
+
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public java.util.List<com.google.protobuf.Duration> getInList() {
+      if (inBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(in_);
+      } else {
+        return inBuilder_.getMessageList();
+      }
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public int getInCount() {
+      if (inBuilder_ == null) {
+        return in_.size();
+      } else {
+        return inBuilder_.getCount();
+      }
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration getIn(int index) {
+      if (inBuilder_ == null) {
+        return in_.get(index);
+      } else {
+        return inBuilder_.getMessage(index);
+      }
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setIn(
+        int index, com.google.protobuf.Duration value) {
+      if (inBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureInIsMutable();
+        in_.set(index, value);
+        onChanged();
+      } else {
+        inBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setIn(
+        int index, com.google.protobuf.Duration.Builder builderForValue) {
+      if (inBuilder_ == null) {
+        ensureInIsMutable();
+        in_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        inBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addIn(com.google.protobuf.Duration value) {
+      if (inBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureInIsMutable();
+        in_.add(value);
+        onChanged();
+      } else {
+        inBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addIn(
+        int index, com.google.protobuf.Duration value) {
+      if (inBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureInIsMutable();
+        in_.add(index, value);
+        onChanged();
+      } else {
+        inBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addIn(
+        com.google.protobuf.Duration.Builder builderForValue) {
+      if (inBuilder_ == null) {
+        ensureInIsMutable();
+        in_.add(builderForValue.build());
+        onChanged();
+      } else {
+        inBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addIn(
+        int index, com.google.protobuf.Duration.Builder builderForValue) {
+      if (inBuilder_ == null) {
+        ensureInIsMutable();
+        in_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        inBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends com.google.protobuf.Duration> values) {
+      if (inBuilder_ == null) {
+        ensureInIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, in_);
+        onChanged();
+      } else {
+        inBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearIn() {
+      if (inBuilder_ == null) {
+        in_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000020);
+        onChanged();
+      } else {
+        inBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder removeIn(int index) {
+      if (inBuilder_ == null) {
+        ensureInIsMutable();
+        in_.remove(index);
+        onChanged();
+      } else {
+        inBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder getInBuilder(
+        int index) {
+      return getInFieldBuilder().getBuilder(index);
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.DurationOrBuilder getInOrBuilder(
+        int index) {
+      if (inBuilder_ == null) {
+        return in_.get(index);  } else {
+        return inBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public java.util.List<? extends com.google.protobuf.DurationOrBuilder> 
+         getInOrBuilderList() {
+      if (inBuilder_ != null) {
+        return inBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(in_);
+      }
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder addInBuilder() {
+      return getInFieldBuilder().addBuilder(
+          com.google.protobuf.Duration.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder addInBuilder(
+        int index) {
+      return getInFieldBuilder().addBuilder(
+          index, com.google.protobuf.Duration.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value doesn't correspond to any of the specified values,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public java.util.List<com.google.protobuf.Duration.Builder> 
+         getInBuilderList() {
+      return getInFieldBuilder().getBuilderList();
+    }
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
+        getInFieldBuilder() {
+      if (inBuilder_ == null) {
+        inBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+            com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
+                in_,
+                ((bitField0_ & 0x00000020) != 0),
+                getParentForChildren(),
+                isClean());
+        in_ = null;
+      }
+      return inBuilder_;
+    }
+
+    private java.util.List<com.google.protobuf.Duration> notIn_ =
+      java.util.Collections.emptyList();
+    private void ensureNotInIsMutable() {
+      if (!((bitField0_ & 0x00000040) != 0)) {
+        notIn_ = new java.util.ArrayList<com.google.protobuf.Duration>(notIn_);
+        bitField0_ |= 0x00000040;
+       }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> notInBuilder_;
+
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public java.util.List<com.google.protobuf.Duration> getNotInList() {
+      if (notInBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(notIn_);
+      } else {
+        return notInBuilder_.getMessageList();
+      }
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public int getNotInCount() {
+      if (notInBuilder_ == null) {
+        return notIn_.size();
+      } else {
+        return notInBuilder_.getCount();
+      }
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration getNotIn(int index) {
+      if (notInBuilder_ == null) {
+        return notIn_.get(index);
+      } else {
+        return notInBuilder_.getMessage(index);
+      }
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setNotIn(
+        int index, com.google.protobuf.Duration value) {
+      if (notInBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureNotInIsMutable();
+        notIn_.set(index, value);
+        onChanged();
+      } else {
+        notInBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setNotIn(
+        int index, com.google.protobuf.Duration.Builder builderForValue) {
+      if (notInBuilder_ == null) {
+        ensureNotInIsMutable();
+        notIn_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        notInBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addNotIn(com.google.protobuf.Duration value) {
+      if (notInBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureNotInIsMutable();
+        notIn_.add(value);
+        onChanged();
+      } else {
+        notInBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addNotIn(
+        int index, com.google.protobuf.Duration value) {
+      if (notInBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureNotInIsMutable();
+        notIn_.add(index, value);
+        onChanged();
+      } else {
+        notInBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addNotIn(
+        com.google.protobuf.Duration.Builder builderForValue) {
+      if (notInBuilder_ == null) {
+        ensureNotInIsMutable();
+        notIn_.add(builderForValue.build());
+        onChanged();
+      } else {
+        notInBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addNotIn(
+        int index, com.google.protobuf.Duration.Builder builderForValue) {
+      if (notInBuilder_ == null) {
+        ensureNotInIsMutable();
+        notIn_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        notInBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends com.google.protobuf.Duration> values) {
+      if (notInBuilder_ == null) {
+        ensureNotInIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, notIn_);
+        onChanged();
+      } else {
+        notInBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearNotIn() {
+      if (notInBuilder_ == null) {
+        notIn_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000040);
+        onChanged();
+      } else {
+        notInBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder removeNotIn(int index) {
+      if (notInBuilder_ == null) {
+        ensureNotInIsMutable();
+        notIn_.remove(index);
+        onChanged();
+      } else {
+        notInBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder getNotInBuilder(
+        int index) {
+      return getNotInFieldBuilder().getBuilder(index);
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.DurationOrBuilder getNotInOrBuilder(
+        int index) {
+      if (notInBuilder_ == null) {
+        return notIn_.get(index);  } else {
+        return notInBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public java.util.List<? extends com.google.protobuf.DurationOrBuilder> 
+         getNotInOrBuilderList() {
+      if (notInBuilder_ != null) {
+        return notInBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(notIn_);
+      }
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder addNotInBuilder() {
+      return getNotInFieldBuilder().addBuilder(
+          com.google.protobuf.Duration.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder addNotInBuilder(
+        int index) {
+      return getNotInFieldBuilder().addBuilder(
+          index, com.google.protobuf.Duration.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `not_in` denotes that the field must not be equal to
+     * any of the specified values of the `google.protobuf.Duration` type.
+     * If the field's value matches any of these values, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // value must not be in list [1s, 2s, 3s]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public java.util.List<com.google.protobuf.Duration.Builder> 
+         getNotInBuilderList() {
+      return getNotInFieldBuilder().getBuilderList();
+    }
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
+        getNotInFieldBuilder() {
+      if (notInBuilder_ == null) {
+        notInBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+            com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
+                notIn_,
+                ((bitField0_ & 0x00000040) != 0),
+                getParentForChildren(),
+                isClean());
+        notIn_ = null;
+      }
+      return notInBuilder_;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.DurationRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.DurationRules)
+  private static final de.danet.buf.validate.DurationRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.DurationRules();
+  }
+
+  public static de.danet.buf.validate.DurationRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<DurationRules>
+      PARSER = new com.google.protobuf.AbstractParser<DurationRules>() {
+    @java.lang.Override
+    public DurationRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<DurationRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<DurationRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.DurationRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/DurationRulesOrBuilder.java b/gen/java/de/danet/buf/validate/DurationRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..216ffe0dfd51961e4bb1346ffa4116bcf36ebc42
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/DurationRulesOrBuilder.java
@@ -0,0 +1,515 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface DurationRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.DurationRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+   * If the field's value deviates from the specified value, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must equal 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+   * If the field's value deviates from the specified value, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must equal 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  com.google.protobuf.Duration getConst();
+  /**
+   * <pre>
+   * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
+   * If the field's value deviates from the specified value, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must equal 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.DurationOrBuilder getConstOrBuilder();
+
+  /**
+   * <pre>
+   * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+   * exclusive. If the field's value is greater than or equal to the specified
+   * value, an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+   * exclusive. If the field's value is greater than or equal to the specified
+   * value, an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  com.google.protobuf.Duration getLt();
+  /**
+   * <pre>
+   * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
+   * exclusive. If the field's value is greater than or equal to the specified
+   * value, an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than 5s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.DurationOrBuilder getLtOrBuilder();
+
+  /**
+   * <pre>
+   * `lte` indicates that the field must be less than or equal to the specified
+   * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than or equal to 10s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` indicates that the field must be less than or equal to the specified
+   * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than or equal to 10s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  com.google.protobuf.Duration getLte();
+  /**
+   * <pre>
+   * `lte` indicates that the field must be less than or equal to the specified
+   * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be less than or equal to 10s
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.DurationOrBuilder getLteOrBuilder();
+
+  /**
+   * <pre>
+   * `gt` requires the duration field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be greater than 5s [duration.gt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+   *
+   *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+   *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+   *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the duration field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be greater than 5s [duration.gt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+   *
+   *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+   *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+   *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  com.google.protobuf.Duration getGt();
+  /**
+   * <pre>
+   * `gt` requires the duration field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be greater than 5s [duration.gt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
+   *
+   *   // duration must be greater than 5s and less than 10s [duration.gt_lt]
+   *   google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *   // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
+   *   google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.DurationOrBuilder getGtOrBuilder();
+
+  /**
+   * <pre>
+   * `gte` requires the duration field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value must
+   * be outside the specified range. If the field value doesn't meet the
+   * required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *  // duration must be greater than or equal to 5s [duration.gte]
+   *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+   *
+   *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+   *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+   *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the duration field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value must
+   * be outside the specified range. If the field value doesn't meet the
+   * required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *  // duration must be greater than or equal to 5s [duration.gte]
+   *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+   *
+   *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+   *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+   *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  com.google.protobuf.Duration getGte();
+  /**
+   * <pre>
+   * `gte` requires the duration field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value must
+   * be outside the specified range. If the field value doesn't meet the
+   * required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *  // duration must be greater than or equal to 5s [duration.gte]
+   *  google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
+   *
+   *  // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
+   *  google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
+   *
+   *  // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
+   *  google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Duration gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.DurationOrBuilder getGteOrBuilder();
+
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  java.util.List<com.google.protobuf.Duration> 
+      getInList();
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.Duration getIn(int index);
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  java.util.List<? extends com.google.protobuf.DurationOrBuilder> 
+      getInOrBuilderList();
+  /**
+   * <pre>
+   * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value doesn't correspond to any of the specified values,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration in = 7 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.DurationOrBuilder getInOrBuilder(
+      int index);
+
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  java.util.List<com.google.protobuf.Duration> 
+      getNotInList();
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.Duration getNotIn(int index);
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  java.util.List<? extends com.google.protobuf.DurationOrBuilder> 
+      getNotInOrBuilderList();
+  /**
+   * <pre>
+   * `not_in` denotes that the field must not be equal to
+   * any of the specified values of the `google.protobuf.Duration` type.
+   * If the field's value matches any of these values, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // value must not be in list [1s, 2s, 3s]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .google.protobuf.Duration not_in = 8 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.DurationOrBuilder getNotInOrBuilder(
+      int index);
+
+  de.danet.buf.validate.DurationRules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.DurationRules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/EnumRules.java b/gen/java/de/danet/buf/validate/EnumRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc7827a41e83256405748568eb14431010ae18f2
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/EnumRules.java
@@ -0,0 +1,1539 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * EnumRules describe the constraints applied to `enum` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.EnumRules}
+ */
+public final class EnumRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.EnumRules)
+    EnumRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use EnumRules.newBuilder() to construct.
+  private EnumRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private EnumRules() {
+    in_ = emptyIntList();
+    notIn_ = emptyIntList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new EnumRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_EnumRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_EnumRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.EnumRules.class, de.danet.buf.validate.EnumRules.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int CONST_FIELD_NUMBER = 1;
+  private int const_ = 0;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified enum value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be exactly MY_ENUM_VALUE1.
+   *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified enum value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be exactly MY_ENUM_VALUE1.
+   *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public int getConst() {
+    return const_;
+  }
+
+  public static final int DEFINED_ONLY_FIELD_NUMBER = 2;
+  private boolean definedOnly_ = false;
+  /**
+   * <pre>
+   * `defined_only` requires the field value to be one of the defined values for
+   * this enum, failing on any undefined value.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be a defined value of MyEnum.
+   *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool defined_only = 2 [json_name = "definedOnly"];</code>
+   * @return Whether the definedOnly field is set.
+   */
+  @java.lang.Override
+  public boolean hasDefinedOnly() {
+    return ((bitField0_ & 0x00000002) != 0);
+  }
+  /**
+   * <pre>
+   * `defined_only` requires the field value to be one of the defined values for
+   * this enum, failing on any undefined value.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be a defined value of MyEnum.
+   *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool defined_only = 2 [json_name = "definedOnly"];</code>
+   * @return The definedOnly.
+   */
+  @java.lang.Override
+  public boolean getDefinedOnly() {
+    return definedOnly_;
+  }
+
+  public static final int IN_FIELD_NUMBER = 3;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList in_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the
+   *specified enum values. If the field value doesn't match any of the
+   *specified values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be equal to one of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the
+   *specified enum values. If the field value doesn't match any of the
+   *specified values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be equal to one of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the
+   *specified enum values. If the field value doesn't match any of the
+   *specified values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be equal to one of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public int getIn(int index) {
+    return in_.getInt(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 4;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList notIn_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the
+   *specified enum values. If the field value matches one of the specified
+   * values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must not be equal to any of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the
+   *specified enum values. If the field value matches one of the specified
+   * values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must not be equal to any of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the
+   *specified enum values. If the field value matches one of the specified
+   * values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must not be equal to any of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public int getNotIn(int index) {
+    return notIn_.getInt(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeInt32(1, const_);
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      output.writeBool(2, definedOnly_);
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(26);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeInt32NoTag(in_.getInt(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(34);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeInt32NoTag(notIn_.getInt(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(1, const_);
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(2, definedOnly_);
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeInt32SizeNoTag(in_.getInt(i));
+      }
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeInt32SizeNoTag(notIn_.getInt(i));
+      }
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.EnumRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.EnumRules other = (de.danet.buf.validate.EnumRules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (hasDefinedOnly() != other.hasDefinedOnly()) return false;
+    if (hasDefinedOnly()) {
+      if (getDefinedOnly()
+          != other.getDefinedOnly()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst();
+    }
+    if (hasDefinedOnly()) {
+      hash = (37 * hash) + DEFINED_ONLY_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getDefinedOnly());
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.EnumRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.EnumRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.EnumRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.EnumRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.EnumRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * EnumRules describe the constraints applied to `enum` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.EnumRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.EnumRules)
+      de.danet.buf.validate.EnumRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_EnumRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_EnumRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.EnumRules.class, de.danet.buf.validate.EnumRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.EnumRules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0;
+      definedOnly_ = false;
+      in_ = emptyIntList();
+      notIn_ = emptyIntList();
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_EnumRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.EnumRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.EnumRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.EnumRules build() {
+      de.danet.buf.validate.EnumRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.EnumRules buildPartial() {
+      de.danet.buf.validate.EnumRules result = new de.danet.buf.validate.EnumRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.EnumRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.definedOnly_ = definedOnly_;
+        to_bitField0_ |= 0x00000002;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000008) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.EnumRules) {
+        return mergeFrom((de.danet.buf.validate.EnumRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.EnumRules other) {
+      if (other == de.danet.buf.validate.EnumRules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (other.hasDefinedOnly()) {
+        setDefinedOnly(other.getDefinedOnly());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000004;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000008;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              const_ = input.readInt32();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              definedOnly_ = input.readBool();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 16
+            case 24: {
+              int v = input.readInt32();
+              ensureInIsMutable();
+              in_.addInt(v);
+              break;
+            } // case 24
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addInt(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 26
+            case 32: {
+              int v = input.readInt32();
+              ensureNotInIsMutable();
+              notIn_.addInt(v);
+              break;
+            } // case 32
+            case 34: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureNotInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addInt(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 34
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private int const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified enum value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be exactly MY_ENUM_VALUE1.
+     *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified enum value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be exactly MY_ENUM_VALUE1.
+     *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public int getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified enum value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be exactly MY_ENUM_VALUE1.
+     *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(int value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified enum value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be exactly MY_ENUM_VALUE1.
+     *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private boolean definedOnly_ ;
+    /**
+     * <pre>
+     * `defined_only` requires the field value to be one of the defined values for
+     * this enum, failing on any undefined value.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be a defined value of MyEnum.
+     *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool defined_only = 2 [json_name = "definedOnly"];</code>
+     * @return Whether the definedOnly field is set.
+     */
+    @java.lang.Override
+    public boolean hasDefinedOnly() {
+      return ((bitField0_ & 0x00000002) != 0);
+    }
+    /**
+     * <pre>
+     * `defined_only` requires the field value to be one of the defined values for
+     * this enum, failing on any undefined value.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be a defined value of MyEnum.
+     *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool defined_only = 2 [json_name = "definedOnly"];</code>
+     * @return The definedOnly.
+     */
+    @java.lang.Override
+    public boolean getDefinedOnly() {
+      return definedOnly_;
+    }
+    /**
+     * <pre>
+     * `defined_only` requires the field value to be one of the defined values for
+     * this enum, failing on any undefined value.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be a defined value of MyEnum.
+     *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool defined_only = 2 [json_name = "definedOnly"];</code>
+     * @param value The definedOnly to set.
+     * @return This builder for chaining.
+     */
+    public Builder setDefinedOnly(boolean value) {
+
+      definedOnly_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `defined_only` requires the field value to be one of the defined values for
+     * this enum, failing on any undefined value.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be a defined value of MyEnum.
+     *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool defined_only = 2 [json_name = "definedOnly"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearDefinedOnly() {
+      bitField0_ = (bitField0_ & ~0x00000002);
+      definedOnly_ = false;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList in_ = emptyIntList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000004;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the
+     *specified enum values. If the field value doesn't match any of the
+     *specified values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be equal to one of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Integer>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the
+     *specified enum values. If the field value doesn't match any of the
+     *specified values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be equal to one of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the
+     *specified enum values. If the field value doesn't match any of the
+     *specified values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be equal to one of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public int getIn(int index) {
+      return in_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the
+     *specified enum values. If the field value doesn't match any of the
+     *specified values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be equal to one of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, int value) {
+
+      ensureInIsMutable();
+      in_.setInt(index, value);
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the
+     *specified enum values. If the field value doesn't match any of the
+     *specified values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be equal to one of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(int value) {
+
+      ensureInIsMutable();
+      in_.addInt(value);
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the
+     *specified enum values. If the field value doesn't match any of the
+     *specified values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be equal to one of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the
+     *specified enum values. If the field value doesn't match any of the
+     *specified values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must be equal to one of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000004);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList notIn_ = emptyIntList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000008;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the
+     *specified enum values. If the field value matches one of the specified
+     * values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must not be equal to any of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Integer>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the
+     *specified enum values. If the field value matches one of the specified
+     * values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must not be equal to any of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the
+     *specified enum values. If the field value matches one of the specified
+     * values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must not be equal to any of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public int getNotIn(int index) {
+      return notIn_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the
+     *specified enum values. If the field value matches one of the specified
+     * values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must not be equal to any of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, int value) {
+
+      ensureNotInIsMutable();
+      notIn_.setInt(index, value);
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the
+     *specified enum values. If the field value matches one of the specified
+     * values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must not be equal to any of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(int value) {
+
+      ensureNotInIsMutable();
+      notIn_.addInt(value);
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the
+     *specified enum values. If the field value matches one of the specified
+     * values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must not be equal to any of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to be not equal to any of the
+     *specified enum values. If the field value matches one of the specified
+     * values, an error message is generated.
+     *
+     * ```proto
+     * enum MyEnum {
+     *   MY_ENUM_UNSPECIFIED = 0;
+     *   MY_ENUM_VALUE1 = 1;
+     *   MY_ENUM_VALUE2 = 2;
+     * }
+     *
+     * message MyMessage {
+     *   // The field `value` must not be equal to any of the specified values.
+     *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000008);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.EnumRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.EnumRules)
+  private static final de.danet.buf.validate.EnumRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.EnumRules();
+  }
+
+  public static de.danet.buf.validate.EnumRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<EnumRules>
+      PARSER = new com.google.protobuf.AbstractParser<EnumRules>() {
+    @java.lang.Override
+    public EnumRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<EnumRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<EnumRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.EnumRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/EnumRulesOrBuilder.java b/gen/java/de/danet/buf/validate/EnumRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa3f245c671a3b31264968237a5b35ce64f3b74b
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/EnumRulesOrBuilder.java
@@ -0,0 +1,252 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface EnumRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.EnumRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified enum value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be exactly MY_ENUM_VALUE1.
+   *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified enum value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be exactly MY_ENUM_VALUE1.
+   *   MyEnum value = 1 [(buf.validate.field).enum.const = 1];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  int getConst();
+
+  /**
+   * <pre>
+   * `defined_only` requires the field value to be one of the defined values for
+   * this enum, failing on any undefined value.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be a defined value of MyEnum.
+   *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool defined_only = 2 [json_name = "definedOnly"];</code>
+   * @return Whether the definedOnly field is set.
+   */
+  boolean hasDefinedOnly();
+  /**
+   * <pre>
+   * `defined_only` requires the field value to be one of the defined values for
+   * this enum, failing on any undefined value.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be a defined value of MyEnum.
+   *   MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool defined_only = 2 [json_name = "definedOnly"];</code>
+   * @return The definedOnly.
+   */
+  boolean getDefinedOnly();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the
+   *specified enum values. If the field value doesn't match any of the
+   *specified values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be equal to one of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Integer> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the
+   *specified enum values. If the field value doesn't match any of the
+   *specified values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be equal to one of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the
+   *specified enum values. If the field value doesn't match any of the
+   *specified values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must be equal to one of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 3 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  int getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the
+   *specified enum values. If the field value matches one of the specified
+   * values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must not be equal to any of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Integer> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the
+   *specified enum values. If the field value matches one of the specified
+   * values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must not be equal to any of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to be not equal to any of the
+   *specified enum values. If the field value matches one of the specified
+   * values, an error message is generated.
+   *
+   * ```proto
+   * enum MyEnum {
+   *   MY_ENUM_UNSPECIFIED = 0;
+   *   MY_ENUM_VALUE1 = 1;
+   *   MY_ENUM_VALUE2 = 2;
+   * }
+   *
+   * message MyMessage {
+   *   // The field `value` must not be equal to any of the specified values.
+   *   MyEnum value = 1 [(buf.validate.field).enum.not_in = {1, 2}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 4 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  int getNotIn(int index);
+}
diff --git a/gen/java/de/danet/buf/validate/ExpressionProto.java b/gen/java/de/danet/buf/validate/ExpressionProto.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c13ed7bd227b8d9199512a9d53be122a3d17ecd
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/ExpressionProto.java
@@ -0,0 +1,82 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/expression.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public final class ExpressionProto {
+  private ExpressionProto() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_Constraint_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_Constraint_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_Violations_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_Violations_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_Violation_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_Violation_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\035buf/validate/expression.proto\022\014buf.val" +
+      "idate\"V\n\nConstraint\022\016\n\002id\030\001 \001(\tR\002id\022\030\n\007m" +
+      "essage\030\002 \001(\tR\007message\022\036\n\nexpression\030\003 \001(" +
+      "\tR\nexpression\"E\n\nViolations\0227\n\nviolation" +
+      "s\030\001 \003(\0132\027.buf.validate.ViolationR\nviolat" +
+      "ions\"\202\001\n\tViolation\022\035\n\nfield_path\030\001 \001(\tR\t" +
+      "fieldPath\022#\n\rconstraint_id\030\002 \001(\tR\014constr" +
+      "aintId\022\030\n\007message\030\003 \001(\tR\007message\022\027\n\007for_" +
+      "key\030\004 \001(\010R\006forKeyB\302\001\n\025de.danet.buf.valid" +
+      "ateB\017ExpressionProtoP\001ZGbuf.build/gen/go" +
+      "/bufbuild/protovalidate/protocolbuffers/" +
+      "go/buf/validate\242\002\003BVX\252\002\014Buf.Validate\312\002\014B" +
+      "uf\\Validate\342\002\030Buf\\Validate\\GPBMetadata\352\002" +
+      "\rBuf::Validateb\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_buf_validate_Constraint_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_buf_validate_Constraint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_Constraint_descriptor,
+        new java.lang.String[] { "Id", "Message", "Expression", });
+    internal_static_buf_validate_Violations_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_buf_validate_Violations_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_Violations_descriptor,
+        new java.lang.String[] { "Violations", });
+    internal_static_buf_validate_Violation_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_buf_validate_Violation_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_Violation_descriptor,
+        new java.lang.String[] { "FieldPath", "ConstraintId", "Message", "ForKey", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/gen/java/de/danet/buf/validate/FieldConstraints.java b/gen/java/de/danet/buf/validate/FieldConstraints.java
new file mode 100644
index 0000000000000000000000000000000000000000..53d396c91269132c45884be61374821b2734f10a
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/FieldConstraints.java
@@ -0,0 +1,6117 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * FieldRules encapsulates the rules for each type of field. Depending on the
+ * field, the correct set should be used to ensure proper validations.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.FieldConstraints}
+ */
+public final class FieldConstraints extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.FieldConstraints)
+    FieldConstraintsOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use FieldConstraints.newBuilder() to construct.
+  private FieldConstraints(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private FieldConstraints() {
+    cel_ = java.util.Collections.emptyList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new FieldConstraints();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FieldConstraints_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FieldConstraints_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.FieldConstraints.class, de.danet.buf.validate.FieldConstraints.Builder.class);
+  }
+
+  private int typeCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object type_;
+  public enum TypeCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    FLOAT(1),
+    DOUBLE(2),
+    INT32(3),
+    INT64(4),
+    UINT32(5),
+    UINT64(6),
+    SINT32(7),
+    SINT64(8),
+    FIXED32(9),
+    FIXED64(10),
+    SFIXED32(11),
+    SFIXED64(12),
+    BOOL(13),
+    STRING(14),
+    BYTES(15),
+    ENUM(16),
+    REPEATED(18),
+    MAP(19),
+    ANY(20),
+    DURATION(21),
+    TIMESTAMP(22),
+    TYPE_NOT_SET(0);
+    private final int value;
+    private TypeCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static TypeCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static TypeCase forNumber(int value) {
+      switch (value) {
+        case 1: return FLOAT;
+        case 2: return DOUBLE;
+        case 3: return INT32;
+        case 4: return INT64;
+        case 5: return UINT32;
+        case 6: return UINT64;
+        case 7: return SINT32;
+        case 8: return SINT64;
+        case 9: return FIXED32;
+        case 10: return FIXED64;
+        case 11: return SFIXED32;
+        case 12: return SFIXED64;
+        case 13: return BOOL;
+        case 14: return STRING;
+        case 15: return BYTES;
+        case 16: return ENUM;
+        case 18: return REPEATED;
+        case 19: return MAP;
+        case 20: return ANY;
+        case 21: return DURATION;
+        case 22: return TIMESTAMP;
+        case 0: return TYPE_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public TypeCase
+  getTypeCase() {
+    return TypeCase.forNumber(
+        typeCase_);
+  }
+
+  public static final int CEL_FIELD_NUMBER = 23;
+  @SuppressWarnings("serial")
+  private java.util.List<de.danet.buf.validate.Constraint> cel_;
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public java.util.List<de.danet.buf.validate.Constraint> getCelList() {
+    return cel_;
+  }
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public java.util.List<? extends de.danet.buf.validate.ConstraintOrBuilder> 
+      getCelOrBuilderList() {
+    return cel_;
+  }
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public int getCelCount() {
+    return cel_.size();
+  }
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Constraint getCel(int index) {
+    return cel_.get(index);
+  }
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.ConstraintOrBuilder getCelOrBuilder(
+      int index) {
+    return cel_.get(index);
+  }
+
+  public static final int SKIPPED_FIELD_NUMBER = 24;
+  private boolean skipped_ = false;
+  /**
+   * <pre>
+   * `skipped` is an optional boolean attribute that specifies that the
+   * validation rules of this field should not be evaluated. If skipped is set to
+   * true, any validation rules set for the field will be ignored.
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must not be set.
+   *   optional MyOtherMessage value = 1 [(buf.validate.field).skipped = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool skipped = 24 [json_name = "skipped"];</code>
+   * @return The skipped.
+   */
+  @java.lang.Override
+  public boolean getSkipped() {
+    return skipped_;
+  }
+
+  public static final int REQUIRED_FIELD_NUMBER = 25;
+  private boolean required_ = false;
+  /**
+   * <pre>
+   * `required` is an optional boolean attribute that specifies that
+   * this field must be set. If required is set to true, the field value must
+   * not be empty; otherwise, an error message will be generated.
+   *
+   * Note that `required` validates that `repeated` fields are non-empty, that is
+   * setting a `repeated` field as `required` is equivalent to `repeated.min_items = 1`.
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be set.
+   *   optional MyOtherMessage value = 1 [(buf.validate.field).required = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool required = 25 [json_name = "required"];</code>
+   * @return The required.
+   */
+  @java.lang.Override
+  public boolean getRequired() {
+    return required_;
+  }
+
+  public static final int IGNORE_EMPTY_FIELD_NUMBER = 26;
+  private boolean ignoreEmpty_ = false;
+  /**
+   * <pre>
+   * `ignore_empty` specifies that the validation rules of this field should be
+   * evaluated only if the field isn't empty. If the field is empty, no validation
+   * rules are applied.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // The field `value` validation rules should be evaluated only if the field isn't empty.
+   *   repeated string value = 1 [(buf.validate.field).ignore_empty = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ignore_empty = 26 [json_name = "ignoreEmpty"];</code>
+   * @return The ignoreEmpty.
+   */
+  @java.lang.Override
+  public boolean getIgnoreEmpty() {
+    return ignoreEmpty_;
+  }
+
+  public static final int FLOAT_FIELD_NUMBER = 1;
+  /**
+   * <pre>
+   * Scalar Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+   * @return Whether the float field is set.
+   */
+  @java.lang.Override
+  public boolean hasFloat() {
+    return typeCase_ == 1;
+  }
+  /**
+   * <pre>
+   * Scalar Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+   * @return The float.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.FloatRules getFloat() {
+    if (typeCase_ == 1) {
+       return (de.danet.buf.validate.FloatRules) type_;
+    }
+    return de.danet.buf.validate.FloatRules.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * Scalar Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.FloatRulesOrBuilder getFloatOrBuilder() {
+    if (typeCase_ == 1) {
+       return (de.danet.buf.validate.FloatRules) type_;
+    }
+    return de.danet.buf.validate.FloatRules.getDefaultInstance();
+  }
+
+  public static final int DOUBLE_FIELD_NUMBER = 2;
+  /**
+   * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+   * @return Whether the double field is set.
+   */
+  @java.lang.Override
+  public boolean hasDouble() {
+    return typeCase_ == 2;
+  }
+  /**
+   * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+   * @return The double.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.DoubleRules getDouble() {
+    if (typeCase_ == 2) {
+       return (de.danet.buf.validate.DoubleRules) type_;
+    }
+    return de.danet.buf.validate.DoubleRules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.DoubleRulesOrBuilder getDoubleOrBuilder() {
+    if (typeCase_ == 2) {
+       return (de.danet.buf.validate.DoubleRules) type_;
+    }
+    return de.danet.buf.validate.DoubleRules.getDefaultInstance();
+  }
+
+  public static final int INT32_FIELD_NUMBER = 3;
+  /**
+   * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+   * @return Whether the int32 field is set.
+   */
+  @java.lang.Override
+  public boolean hasInt32() {
+    return typeCase_ == 3;
+  }
+  /**
+   * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+   * @return The int32.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Int32Rules getInt32() {
+    if (typeCase_ == 3) {
+       return (de.danet.buf.validate.Int32Rules) type_;
+    }
+    return de.danet.buf.validate.Int32Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Int32RulesOrBuilder getInt32OrBuilder() {
+    if (typeCase_ == 3) {
+       return (de.danet.buf.validate.Int32Rules) type_;
+    }
+    return de.danet.buf.validate.Int32Rules.getDefaultInstance();
+  }
+
+  public static final int INT64_FIELD_NUMBER = 4;
+  /**
+   * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+   * @return Whether the int64 field is set.
+   */
+  @java.lang.Override
+  public boolean hasInt64() {
+    return typeCase_ == 4;
+  }
+  /**
+   * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+   * @return The int64.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Int64Rules getInt64() {
+    if (typeCase_ == 4) {
+       return (de.danet.buf.validate.Int64Rules) type_;
+    }
+    return de.danet.buf.validate.Int64Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Int64RulesOrBuilder getInt64OrBuilder() {
+    if (typeCase_ == 4) {
+       return (de.danet.buf.validate.Int64Rules) type_;
+    }
+    return de.danet.buf.validate.Int64Rules.getDefaultInstance();
+  }
+
+  public static final int UINT32_FIELD_NUMBER = 5;
+  /**
+   * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+   * @return Whether the uint32 field is set.
+   */
+  @java.lang.Override
+  public boolean hasUint32() {
+    return typeCase_ == 5;
+  }
+  /**
+   * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+   * @return The uint32.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.UInt32Rules getUint32() {
+    if (typeCase_ == 5) {
+       return (de.danet.buf.validate.UInt32Rules) type_;
+    }
+    return de.danet.buf.validate.UInt32Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.UInt32RulesOrBuilder getUint32OrBuilder() {
+    if (typeCase_ == 5) {
+       return (de.danet.buf.validate.UInt32Rules) type_;
+    }
+    return de.danet.buf.validate.UInt32Rules.getDefaultInstance();
+  }
+
+  public static final int UINT64_FIELD_NUMBER = 6;
+  /**
+   * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+   * @return Whether the uint64 field is set.
+   */
+  @java.lang.Override
+  public boolean hasUint64() {
+    return typeCase_ == 6;
+  }
+  /**
+   * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+   * @return The uint64.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.UInt64Rules getUint64() {
+    if (typeCase_ == 6) {
+       return (de.danet.buf.validate.UInt64Rules) type_;
+    }
+    return de.danet.buf.validate.UInt64Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.UInt64RulesOrBuilder getUint64OrBuilder() {
+    if (typeCase_ == 6) {
+       return (de.danet.buf.validate.UInt64Rules) type_;
+    }
+    return de.danet.buf.validate.UInt64Rules.getDefaultInstance();
+  }
+
+  public static final int SINT32_FIELD_NUMBER = 7;
+  /**
+   * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+   * @return Whether the sint32 field is set.
+   */
+  @java.lang.Override
+  public boolean hasSint32() {
+    return typeCase_ == 7;
+  }
+  /**
+   * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+   * @return The sint32.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.SInt32Rules getSint32() {
+    if (typeCase_ == 7) {
+       return (de.danet.buf.validate.SInt32Rules) type_;
+    }
+    return de.danet.buf.validate.SInt32Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.SInt32RulesOrBuilder getSint32OrBuilder() {
+    if (typeCase_ == 7) {
+       return (de.danet.buf.validate.SInt32Rules) type_;
+    }
+    return de.danet.buf.validate.SInt32Rules.getDefaultInstance();
+  }
+
+  public static final int SINT64_FIELD_NUMBER = 8;
+  /**
+   * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+   * @return Whether the sint64 field is set.
+   */
+  @java.lang.Override
+  public boolean hasSint64() {
+    return typeCase_ == 8;
+  }
+  /**
+   * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+   * @return The sint64.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.SInt64Rules getSint64() {
+    if (typeCase_ == 8) {
+       return (de.danet.buf.validate.SInt64Rules) type_;
+    }
+    return de.danet.buf.validate.SInt64Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.SInt64RulesOrBuilder getSint64OrBuilder() {
+    if (typeCase_ == 8) {
+       return (de.danet.buf.validate.SInt64Rules) type_;
+    }
+    return de.danet.buf.validate.SInt64Rules.getDefaultInstance();
+  }
+
+  public static final int FIXED32_FIELD_NUMBER = 9;
+  /**
+   * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+   * @return Whether the fixed32 field is set.
+   */
+  @java.lang.Override
+  public boolean hasFixed32() {
+    return typeCase_ == 9;
+  }
+  /**
+   * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+   * @return The fixed32.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Fixed32Rules getFixed32() {
+    if (typeCase_ == 9) {
+       return (de.danet.buf.validate.Fixed32Rules) type_;
+    }
+    return de.danet.buf.validate.Fixed32Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Fixed32RulesOrBuilder getFixed32OrBuilder() {
+    if (typeCase_ == 9) {
+       return (de.danet.buf.validate.Fixed32Rules) type_;
+    }
+    return de.danet.buf.validate.Fixed32Rules.getDefaultInstance();
+  }
+
+  public static final int FIXED64_FIELD_NUMBER = 10;
+  /**
+   * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+   * @return Whether the fixed64 field is set.
+   */
+  @java.lang.Override
+  public boolean hasFixed64() {
+    return typeCase_ == 10;
+  }
+  /**
+   * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+   * @return The fixed64.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Fixed64Rules getFixed64() {
+    if (typeCase_ == 10) {
+       return (de.danet.buf.validate.Fixed64Rules) type_;
+    }
+    return de.danet.buf.validate.Fixed64Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Fixed64RulesOrBuilder getFixed64OrBuilder() {
+    if (typeCase_ == 10) {
+       return (de.danet.buf.validate.Fixed64Rules) type_;
+    }
+    return de.danet.buf.validate.Fixed64Rules.getDefaultInstance();
+  }
+
+  public static final int SFIXED32_FIELD_NUMBER = 11;
+  /**
+   * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+   * @return Whether the sfixed32 field is set.
+   */
+  @java.lang.Override
+  public boolean hasSfixed32() {
+    return typeCase_ == 11;
+  }
+  /**
+   * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+   * @return The sfixed32.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.SFixed32Rules getSfixed32() {
+    if (typeCase_ == 11) {
+       return (de.danet.buf.validate.SFixed32Rules) type_;
+    }
+    return de.danet.buf.validate.SFixed32Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.SFixed32RulesOrBuilder getSfixed32OrBuilder() {
+    if (typeCase_ == 11) {
+       return (de.danet.buf.validate.SFixed32Rules) type_;
+    }
+    return de.danet.buf.validate.SFixed32Rules.getDefaultInstance();
+  }
+
+  public static final int SFIXED64_FIELD_NUMBER = 12;
+  /**
+   * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+   * @return Whether the sfixed64 field is set.
+   */
+  @java.lang.Override
+  public boolean hasSfixed64() {
+    return typeCase_ == 12;
+  }
+  /**
+   * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+   * @return The sfixed64.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.SFixed64Rules getSfixed64() {
+    if (typeCase_ == 12) {
+       return (de.danet.buf.validate.SFixed64Rules) type_;
+    }
+    return de.danet.buf.validate.SFixed64Rules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.SFixed64RulesOrBuilder getSfixed64OrBuilder() {
+    if (typeCase_ == 12) {
+       return (de.danet.buf.validate.SFixed64Rules) type_;
+    }
+    return de.danet.buf.validate.SFixed64Rules.getDefaultInstance();
+  }
+
+  public static final int BOOL_FIELD_NUMBER = 13;
+  /**
+   * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+   * @return Whether the bool field is set.
+   */
+  @java.lang.Override
+  public boolean hasBool() {
+    return typeCase_ == 13;
+  }
+  /**
+   * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+   * @return The bool.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.BoolRules getBool() {
+    if (typeCase_ == 13) {
+       return (de.danet.buf.validate.BoolRules) type_;
+    }
+    return de.danet.buf.validate.BoolRules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.BoolRulesOrBuilder getBoolOrBuilder() {
+    if (typeCase_ == 13) {
+       return (de.danet.buf.validate.BoolRules) type_;
+    }
+    return de.danet.buf.validate.BoolRules.getDefaultInstance();
+  }
+
+  public static final int STRING_FIELD_NUMBER = 14;
+  /**
+   * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+   * @return Whether the string field is set.
+   */
+  @java.lang.Override
+  public boolean hasString() {
+    return typeCase_ == 14;
+  }
+  /**
+   * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+   * @return The string.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.StringRules getString() {
+    if (typeCase_ == 14) {
+       return (de.danet.buf.validate.StringRules) type_;
+    }
+    return de.danet.buf.validate.StringRules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.StringRulesOrBuilder getStringOrBuilder() {
+    if (typeCase_ == 14) {
+       return (de.danet.buf.validate.StringRules) type_;
+    }
+    return de.danet.buf.validate.StringRules.getDefaultInstance();
+  }
+
+  public static final int BYTES_FIELD_NUMBER = 15;
+  /**
+   * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+   * @return Whether the bytes field is set.
+   */
+  @java.lang.Override
+  public boolean hasBytes() {
+    return typeCase_ == 15;
+  }
+  /**
+   * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+   * @return The bytes.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.BytesRules getBytes() {
+    if (typeCase_ == 15) {
+       return (de.danet.buf.validate.BytesRules) type_;
+    }
+    return de.danet.buf.validate.BytesRules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.BytesRulesOrBuilder getBytesOrBuilder() {
+    if (typeCase_ == 15) {
+       return (de.danet.buf.validate.BytesRules) type_;
+    }
+    return de.danet.buf.validate.BytesRules.getDefaultInstance();
+  }
+
+  public static final int ENUM_FIELD_NUMBER = 16;
+  /**
+   * <pre>
+   * Complex Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+   * @return Whether the enum field is set.
+   */
+  @java.lang.Override
+  public boolean hasEnum() {
+    return typeCase_ == 16;
+  }
+  /**
+   * <pre>
+   * Complex Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+   * @return The enum.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.EnumRules getEnum() {
+    if (typeCase_ == 16) {
+       return (de.danet.buf.validate.EnumRules) type_;
+    }
+    return de.danet.buf.validate.EnumRules.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * Complex Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.EnumRulesOrBuilder getEnumOrBuilder() {
+    if (typeCase_ == 16) {
+       return (de.danet.buf.validate.EnumRules) type_;
+    }
+    return de.danet.buf.validate.EnumRules.getDefaultInstance();
+  }
+
+  public static final int REPEATED_FIELD_NUMBER = 18;
+  /**
+   * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+   * @return Whether the repeated field is set.
+   */
+  @java.lang.Override
+  public boolean hasRepeated() {
+    return typeCase_ == 18;
+  }
+  /**
+   * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+   * @return The repeated.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.RepeatedRules getRepeated() {
+    if (typeCase_ == 18) {
+       return (de.danet.buf.validate.RepeatedRules) type_;
+    }
+    return de.danet.buf.validate.RepeatedRules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.RepeatedRulesOrBuilder getRepeatedOrBuilder() {
+    if (typeCase_ == 18) {
+       return (de.danet.buf.validate.RepeatedRules) type_;
+    }
+    return de.danet.buf.validate.RepeatedRules.getDefaultInstance();
+  }
+
+  public static final int MAP_FIELD_NUMBER = 19;
+  /**
+   * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+   * @return Whether the map field is set.
+   */
+  @java.lang.Override
+  public boolean hasMap() {
+    return typeCase_ == 19;
+  }
+  /**
+   * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+   * @return The map.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.MapRules getMap() {
+    if (typeCase_ == 19) {
+       return (de.danet.buf.validate.MapRules) type_;
+    }
+    return de.danet.buf.validate.MapRules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.MapRulesOrBuilder getMapOrBuilder() {
+    if (typeCase_ == 19) {
+       return (de.danet.buf.validate.MapRules) type_;
+    }
+    return de.danet.buf.validate.MapRules.getDefaultInstance();
+  }
+
+  public static final int ANY_FIELD_NUMBER = 20;
+  /**
+   * <pre>
+   * Well-Known Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+   * @return Whether the any field is set.
+   */
+  @java.lang.Override
+  public boolean hasAny() {
+    return typeCase_ == 20;
+  }
+  /**
+   * <pre>
+   * Well-Known Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+   * @return The any.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.AnyRules getAny() {
+    if (typeCase_ == 20) {
+       return (de.danet.buf.validate.AnyRules) type_;
+    }
+    return de.danet.buf.validate.AnyRules.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * Well-Known Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.AnyRulesOrBuilder getAnyOrBuilder() {
+    if (typeCase_ == 20) {
+       return (de.danet.buf.validate.AnyRules) type_;
+    }
+    return de.danet.buf.validate.AnyRules.getDefaultInstance();
+  }
+
+  public static final int DURATION_FIELD_NUMBER = 21;
+  /**
+   * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+   * @return Whether the duration field is set.
+   */
+  @java.lang.Override
+  public boolean hasDuration() {
+    return typeCase_ == 21;
+  }
+  /**
+   * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+   * @return The duration.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.DurationRules getDuration() {
+    if (typeCase_ == 21) {
+       return (de.danet.buf.validate.DurationRules) type_;
+    }
+    return de.danet.buf.validate.DurationRules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.DurationRulesOrBuilder getDurationOrBuilder() {
+    if (typeCase_ == 21) {
+       return (de.danet.buf.validate.DurationRules) type_;
+    }
+    return de.danet.buf.validate.DurationRules.getDefaultInstance();
+  }
+
+  public static final int TIMESTAMP_FIELD_NUMBER = 22;
+  /**
+   * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+   * @return Whether the timestamp field is set.
+   */
+  @java.lang.Override
+  public boolean hasTimestamp() {
+    return typeCase_ == 22;
+  }
+  /**
+   * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+   * @return The timestamp.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.TimestampRules getTimestamp() {
+    if (typeCase_ == 22) {
+       return (de.danet.buf.validate.TimestampRules) type_;
+    }
+    return de.danet.buf.validate.TimestampRules.getDefaultInstance();
+  }
+  /**
+   * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.TimestampRulesOrBuilder getTimestampOrBuilder() {
+    if (typeCase_ == 22) {
+       return (de.danet.buf.validate.TimestampRules) type_;
+    }
+    return de.danet.buf.validate.TimestampRules.getDefaultInstance();
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (typeCase_ == 1) {
+      output.writeMessage(1, (de.danet.buf.validate.FloatRules) type_);
+    }
+    if (typeCase_ == 2) {
+      output.writeMessage(2, (de.danet.buf.validate.DoubleRules) type_);
+    }
+    if (typeCase_ == 3) {
+      output.writeMessage(3, (de.danet.buf.validate.Int32Rules) type_);
+    }
+    if (typeCase_ == 4) {
+      output.writeMessage(4, (de.danet.buf.validate.Int64Rules) type_);
+    }
+    if (typeCase_ == 5) {
+      output.writeMessage(5, (de.danet.buf.validate.UInt32Rules) type_);
+    }
+    if (typeCase_ == 6) {
+      output.writeMessage(6, (de.danet.buf.validate.UInt64Rules) type_);
+    }
+    if (typeCase_ == 7) {
+      output.writeMessage(7, (de.danet.buf.validate.SInt32Rules) type_);
+    }
+    if (typeCase_ == 8) {
+      output.writeMessage(8, (de.danet.buf.validate.SInt64Rules) type_);
+    }
+    if (typeCase_ == 9) {
+      output.writeMessage(9, (de.danet.buf.validate.Fixed32Rules) type_);
+    }
+    if (typeCase_ == 10) {
+      output.writeMessage(10, (de.danet.buf.validate.Fixed64Rules) type_);
+    }
+    if (typeCase_ == 11) {
+      output.writeMessage(11, (de.danet.buf.validate.SFixed32Rules) type_);
+    }
+    if (typeCase_ == 12) {
+      output.writeMessage(12, (de.danet.buf.validate.SFixed64Rules) type_);
+    }
+    if (typeCase_ == 13) {
+      output.writeMessage(13, (de.danet.buf.validate.BoolRules) type_);
+    }
+    if (typeCase_ == 14) {
+      output.writeMessage(14, (de.danet.buf.validate.StringRules) type_);
+    }
+    if (typeCase_ == 15) {
+      output.writeMessage(15, (de.danet.buf.validate.BytesRules) type_);
+    }
+    if (typeCase_ == 16) {
+      output.writeMessage(16, (de.danet.buf.validate.EnumRules) type_);
+    }
+    if (typeCase_ == 18) {
+      output.writeMessage(18, (de.danet.buf.validate.RepeatedRules) type_);
+    }
+    if (typeCase_ == 19) {
+      output.writeMessage(19, (de.danet.buf.validate.MapRules) type_);
+    }
+    if (typeCase_ == 20) {
+      output.writeMessage(20, (de.danet.buf.validate.AnyRules) type_);
+    }
+    if (typeCase_ == 21) {
+      output.writeMessage(21, (de.danet.buf.validate.DurationRules) type_);
+    }
+    if (typeCase_ == 22) {
+      output.writeMessage(22, (de.danet.buf.validate.TimestampRules) type_);
+    }
+    for (int i = 0; i < cel_.size(); i++) {
+      output.writeMessage(23, cel_.get(i));
+    }
+    if (skipped_ != false) {
+      output.writeBool(24, skipped_);
+    }
+    if (required_ != false) {
+      output.writeBool(25, required_);
+    }
+    if (ignoreEmpty_ != false) {
+      output.writeBool(26, ignoreEmpty_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (typeCase_ == 1) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(1, (de.danet.buf.validate.FloatRules) type_);
+    }
+    if (typeCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(2, (de.danet.buf.validate.DoubleRules) type_);
+    }
+    if (typeCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(3, (de.danet.buf.validate.Int32Rules) type_);
+    }
+    if (typeCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(4, (de.danet.buf.validate.Int64Rules) type_);
+    }
+    if (typeCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(5, (de.danet.buf.validate.UInt32Rules) type_);
+    }
+    if (typeCase_ == 6) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(6, (de.danet.buf.validate.UInt64Rules) type_);
+    }
+    if (typeCase_ == 7) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(7, (de.danet.buf.validate.SInt32Rules) type_);
+    }
+    if (typeCase_ == 8) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(8, (de.danet.buf.validate.SInt64Rules) type_);
+    }
+    if (typeCase_ == 9) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(9, (de.danet.buf.validate.Fixed32Rules) type_);
+    }
+    if (typeCase_ == 10) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(10, (de.danet.buf.validate.Fixed64Rules) type_);
+    }
+    if (typeCase_ == 11) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(11, (de.danet.buf.validate.SFixed32Rules) type_);
+    }
+    if (typeCase_ == 12) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(12, (de.danet.buf.validate.SFixed64Rules) type_);
+    }
+    if (typeCase_ == 13) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(13, (de.danet.buf.validate.BoolRules) type_);
+    }
+    if (typeCase_ == 14) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(14, (de.danet.buf.validate.StringRules) type_);
+    }
+    if (typeCase_ == 15) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(15, (de.danet.buf.validate.BytesRules) type_);
+    }
+    if (typeCase_ == 16) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(16, (de.danet.buf.validate.EnumRules) type_);
+    }
+    if (typeCase_ == 18) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(18, (de.danet.buf.validate.RepeatedRules) type_);
+    }
+    if (typeCase_ == 19) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(19, (de.danet.buf.validate.MapRules) type_);
+    }
+    if (typeCase_ == 20) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(20, (de.danet.buf.validate.AnyRules) type_);
+    }
+    if (typeCase_ == 21) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(21, (de.danet.buf.validate.DurationRules) type_);
+    }
+    if (typeCase_ == 22) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(22, (de.danet.buf.validate.TimestampRules) type_);
+    }
+    for (int i = 0; i < cel_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(23, cel_.get(i));
+    }
+    if (skipped_ != false) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(24, skipped_);
+    }
+    if (required_ != false) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(25, required_);
+    }
+    if (ignoreEmpty_ != false) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(26, ignoreEmpty_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.FieldConstraints)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.FieldConstraints other = (de.danet.buf.validate.FieldConstraints) obj;
+
+    if (!getCelList()
+        .equals(other.getCelList())) return false;
+    if (getSkipped()
+        != other.getSkipped()) return false;
+    if (getRequired()
+        != other.getRequired()) return false;
+    if (getIgnoreEmpty()
+        != other.getIgnoreEmpty()) return false;
+    if (!getTypeCase().equals(other.getTypeCase())) return false;
+    switch (typeCase_) {
+      case 1:
+        if (!getFloat()
+            .equals(other.getFloat())) return false;
+        break;
+      case 2:
+        if (!getDouble()
+            .equals(other.getDouble())) return false;
+        break;
+      case 3:
+        if (!getInt32()
+            .equals(other.getInt32())) return false;
+        break;
+      case 4:
+        if (!getInt64()
+            .equals(other.getInt64())) return false;
+        break;
+      case 5:
+        if (!getUint32()
+            .equals(other.getUint32())) return false;
+        break;
+      case 6:
+        if (!getUint64()
+            .equals(other.getUint64())) return false;
+        break;
+      case 7:
+        if (!getSint32()
+            .equals(other.getSint32())) return false;
+        break;
+      case 8:
+        if (!getSint64()
+            .equals(other.getSint64())) return false;
+        break;
+      case 9:
+        if (!getFixed32()
+            .equals(other.getFixed32())) return false;
+        break;
+      case 10:
+        if (!getFixed64()
+            .equals(other.getFixed64())) return false;
+        break;
+      case 11:
+        if (!getSfixed32()
+            .equals(other.getSfixed32())) return false;
+        break;
+      case 12:
+        if (!getSfixed64()
+            .equals(other.getSfixed64())) return false;
+        break;
+      case 13:
+        if (!getBool()
+            .equals(other.getBool())) return false;
+        break;
+      case 14:
+        if (!getString()
+            .equals(other.getString())) return false;
+        break;
+      case 15:
+        if (!getBytes()
+            .equals(other.getBytes())) return false;
+        break;
+      case 16:
+        if (!getEnum()
+            .equals(other.getEnum())) return false;
+        break;
+      case 18:
+        if (!getRepeated()
+            .equals(other.getRepeated())) return false;
+        break;
+      case 19:
+        if (!getMap()
+            .equals(other.getMap())) return false;
+        break;
+      case 20:
+        if (!getAny()
+            .equals(other.getAny())) return false;
+        break;
+      case 21:
+        if (!getDuration()
+            .equals(other.getDuration())) return false;
+        break;
+      case 22:
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (getCelCount() > 0) {
+      hash = (37 * hash) + CEL_FIELD_NUMBER;
+      hash = (53 * hash) + getCelList().hashCode();
+    }
+    hash = (37 * hash) + SKIPPED_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+        getSkipped());
+    hash = (37 * hash) + REQUIRED_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+        getRequired());
+    hash = (37 * hash) + IGNORE_EMPTY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+        getIgnoreEmpty());
+    switch (typeCase_) {
+      case 1:
+        hash = (37 * hash) + FLOAT_FIELD_NUMBER;
+        hash = (53 * hash) + getFloat().hashCode();
+        break;
+      case 2:
+        hash = (37 * hash) + DOUBLE_FIELD_NUMBER;
+        hash = (53 * hash) + getDouble().hashCode();
+        break;
+      case 3:
+        hash = (37 * hash) + INT32_FIELD_NUMBER;
+        hash = (53 * hash) + getInt32().hashCode();
+        break;
+      case 4:
+        hash = (37 * hash) + INT64_FIELD_NUMBER;
+        hash = (53 * hash) + getInt64().hashCode();
+        break;
+      case 5:
+        hash = (37 * hash) + UINT32_FIELD_NUMBER;
+        hash = (53 * hash) + getUint32().hashCode();
+        break;
+      case 6:
+        hash = (37 * hash) + UINT64_FIELD_NUMBER;
+        hash = (53 * hash) + getUint64().hashCode();
+        break;
+      case 7:
+        hash = (37 * hash) + SINT32_FIELD_NUMBER;
+        hash = (53 * hash) + getSint32().hashCode();
+        break;
+      case 8:
+        hash = (37 * hash) + SINT64_FIELD_NUMBER;
+        hash = (53 * hash) + getSint64().hashCode();
+        break;
+      case 9:
+        hash = (37 * hash) + FIXED32_FIELD_NUMBER;
+        hash = (53 * hash) + getFixed32().hashCode();
+        break;
+      case 10:
+        hash = (37 * hash) + FIXED64_FIELD_NUMBER;
+        hash = (53 * hash) + getFixed64().hashCode();
+        break;
+      case 11:
+        hash = (37 * hash) + SFIXED32_FIELD_NUMBER;
+        hash = (53 * hash) + getSfixed32().hashCode();
+        break;
+      case 12:
+        hash = (37 * hash) + SFIXED64_FIELD_NUMBER;
+        hash = (53 * hash) + getSfixed64().hashCode();
+        break;
+      case 13:
+        hash = (37 * hash) + BOOL_FIELD_NUMBER;
+        hash = (53 * hash) + getBool().hashCode();
+        break;
+      case 14:
+        hash = (37 * hash) + STRING_FIELD_NUMBER;
+        hash = (53 * hash) + getString().hashCode();
+        break;
+      case 15:
+        hash = (37 * hash) + BYTES_FIELD_NUMBER;
+        hash = (53 * hash) + getBytes().hashCode();
+        break;
+      case 16:
+        hash = (37 * hash) + ENUM_FIELD_NUMBER;
+        hash = (53 * hash) + getEnum().hashCode();
+        break;
+      case 18:
+        hash = (37 * hash) + REPEATED_FIELD_NUMBER;
+        hash = (53 * hash) + getRepeated().hashCode();
+        break;
+      case 19:
+        hash = (37 * hash) + MAP_FIELD_NUMBER;
+        hash = (53 * hash) + getMap().hashCode();
+        break;
+      case 20:
+        hash = (37 * hash) + ANY_FIELD_NUMBER;
+        hash = (53 * hash) + getAny().hashCode();
+        break;
+      case 21:
+        hash = (37 * hash) + DURATION_FIELD_NUMBER;
+        hash = (53 * hash) + getDuration().hashCode();
+        break;
+      case 22:
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.FieldConstraints parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.FieldConstraints parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.FieldConstraints parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.FieldConstraints parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.FieldConstraints prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * FieldRules encapsulates the rules for each type of field. Depending on the
+   * field, the correct set should be used to ensure proper validations.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.FieldConstraints}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.FieldConstraints)
+      de.danet.buf.validate.FieldConstraintsOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FieldConstraints_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FieldConstraints_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.FieldConstraints.class, de.danet.buf.validate.FieldConstraints.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.FieldConstraints.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      if (celBuilder_ == null) {
+        cel_ = java.util.Collections.emptyList();
+      } else {
+        cel_ = null;
+        celBuilder_.clear();
+      }
+      bitField0_ = (bitField0_ & ~0x00000001);
+      skipped_ = false;
+      required_ = false;
+      ignoreEmpty_ = false;
+      if (floatBuilder_ != null) {
+        floatBuilder_.clear();
+      }
+      if (doubleBuilder_ != null) {
+        doubleBuilder_.clear();
+      }
+      if (int32Builder_ != null) {
+        int32Builder_.clear();
+      }
+      if (int64Builder_ != null) {
+        int64Builder_.clear();
+      }
+      if (uint32Builder_ != null) {
+        uint32Builder_.clear();
+      }
+      if (uint64Builder_ != null) {
+        uint64Builder_.clear();
+      }
+      if (sint32Builder_ != null) {
+        sint32Builder_.clear();
+      }
+      if (sint64Builder_ != null) {
+        sint64Builder_.clear();
+      }
+      if (fixed32Builder_ != null) {
+        fixed32Builder_.clear();
+      }
+      if (fixed64Builder_ != null) {
+        fixed64Builder_.clear();
+      }
+      if (sfixed32Builder_ != null) {
+        sfixed32Builder_.clear();
+      }
+      if (sfixed64Builder_ != null) {
+        sfixed64Builder_.clear();
+      }
+      if (boolBuilder_ != null) {
+        boolBuilder_.clear();
+      }
+      if (stringBuilder_ != null) {
+        stringBuilder_.clear();
+      }
+      if (bytesBuilder_ != null) {
+        bytesBuilder_.clear();
+      }
+      if (enumBuilder_ != null) {
+        enumBuilder_.clear();
+      }
+      if (repeatedBuilder_ != null) {
+        repeatedBuilder_.clear();
+      }
+      if (mapBuilder_ != null) {
+        mapBuilder_.clear();
+      }
+      if (anyBuilder_ != null) {
+        anyBuilder_.clear();
+      }
+      if (durationBuilder_ != null) {
+        durationBuilder_.clear();
+      }
+      if (timestampBuilder_ != null) {
+        timestampBuilder_.clear();
+      }
+      typeCase_ = 0;
+      type_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FieldConstraints_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.FieldConstraints getDefaultInstanceForType() {
+      return de.danet.buf.validate.FieldConstraints.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.FieldConstraints build() {
+      de.danet.buf.validate.FieldConstraints result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.FieldConstraints buildPartial() {
+      de.danet.buf.validate.FieldConstraints result = new de.danet.buf.validate.FieldConstraints(this);
+      buildPartialRepeatedFields(result);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartialRepeatedFields(de.danet.buf.validate.FieldConstraints result) {
+      if (celBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0)) {
+          cel_ = java.util.Collections.unmodifiableList(cel_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.cel_ = cel_;
+      } else {
+        result.cel_ = celBuilder_.build();
+      }
+    }
+
+    private void buildPartial0(de.danet.buf.validate.FieldConstraints result) {
+      int from_bitField0_ = bitField0_;
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.skipped_ = skipped_;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        result.required_ = required_;
+      }
+      if (((from_bitField0_ & 0x00000008) != 0)) {
+        result.ignoreEmpty_ = ignoreEmpty_;
+      }
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.FieldConstraints result) {
+      result.typeCase_ = typeCase_;
+      result.type_ = this.type_;
+      if (typeCase_ == 1 &&
+          floatBuilder_ != null) {
+        result.type_ = floatBuilder_.build();
+      }
+      if (typeCase_ == 2 &&
+          doubleBuilder_ != null) {
+        result.type_ = doubleBuilder_.build();
+      }
+      if (typeCase_ == 3 &&
+          int32Builder_ != null) {
+        result.type_ = int32Builder_.build();
+      }
+      if (typeCase_ == 4 &&
+          int64Builder_ != null) {
+        result.type_ = int64Builder_.build();
+      }
+      if (typeCase_ == 5 &&
+          uint32Builder_ != null) {
+        result.type_ = uint32Builder_.build();
+      }
+      if (typeCase_ == 6 &&
+          uint64Builder_ != null) {
+        result.type_ = uint64Builder_.build();
+      }
+      if (typeCase_ == 7 &&
+          sint32Builder_ != null) {
+        result.type_ = sint32Builder_.build();
+      }
+      if (typeCase_ == 8 &&
+          sint64Builder_ != null) {
+        result.type_ = sint64Builder_.build();
+      }
+      if (typeCase_ == 9 &&
+          fixed32Builder_ != null) {
+        result.type_ = fixed32Builder_.build();
+      }
+      if (typeCase_ == 10 &&
+          fixed64Builder_ != null) {
+        result.type_ = fixed64Builder_.build();
+      }
+      if (typeCase_ == 11 &&
+          sfixed32Builder_ != null) {
+        result.type_ = sfixed32Builder_.build();
+      }
+      if (typeCase_ == 12 &&
+          sfixed64Builder_ != null) {
+        result.type_ = sfixed64Builder_.build();
+      }
+      if (typeCase_ == 13 &&
+          boolBuilder_ != null) {
+        result.type_ = boolBuilder_.build();
+      }
+      if (typeCase_ == 14 &&
+          stringBuilder_ != null) {
+        result.type_ = stringBuilder_.build();
+      }
+      if (typeCase_ == 15 &&
+          bytesBuilder_ != null) {
+        result.type_ = bytesBuilder_.build();
+      }
+      if (typeCase_ == 16 &&
+          enumBuilder_ != null) {
+        result.type_ = enumBuilder_.build();
+      }
+      if (typeCase_ == 18 &&
+          repeatedBuilder_ != null) {
+        result.type_ = repeatedBuilder_.build();
+      }
+      if (typeCase_ == 19 &&
+          mapBuilder_ != null) {
+        result.type_ = mapBuilder_.build();
+      }
+      if (typeCase_ == 20 &&
+          anyBuilder_ != null) {
+        result.type_ = anyBuilder_.build();
+      }
+      if (typeCase_ == 21 &&
+          durationBuilder_ != null) {
+        result.type_ = durationBuilder_.build();
+      }
+      if (typeCase_ == 22 &&
+          timestampBuilder_ != null) {
+        result.type_ = timestampBuilder_.build();
+      }
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.FieldConstraints) {
+        return mergeFrom((de.danet.buf.validate.FieldConstraints)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.FieldConstraints other) {
+      if (other == de.danet.buf.validate.FieldConstraints.getDefaultInstance()) return this;
+      if (celBuilder_ == null) {
+        if (!other.cel_.isEmpty()) {
+          if (cel_.isEmpty()) {
+            cel_ = other.cel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureCelIsMutable();
+            cel_.addAll(other.cel_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.cel_.isEmpty()) {
+          if (celBuilder_.isEmpty()) {
+            celBuilder_.dispose();
+            celBuilder_ = null;
+            cel_ = other.cel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+            celBuilder_ = 
+              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                 getCelFieldBuilder() : null;
+          } else {
+            celBuilder_.addAllMessages(other.cel_);
+          }
+        }
+      }
+      if (other.getSkipped() != false) {
+        setSkipped(other.getSkipped());
+      }
+      if (other.getRequired() != false) {
+        setRequired(other.getRequired());
+      }
+      if (other.getIgnoreEmpty() != false) {
+        setIgnoreEmpty(other.getIgnoreEmpty());
+      }
+      switch (other.getTypeCase()) {
+        case FLOAT: {
+          mergeFloat(other.getFloat());
+          break;
+        }
+        case DOUBLE: {
+          mergeDouble(other.getDouble());
+          break;
+        }
+        case INT32: {
+          mergeInt32(other.getInt32());
+          break;
+        }
+        case INT64: {
+          mergeInt64(other.getInt64());
+          break;
+        }
+        case UINT32: {
+          mergeUint32(other.getUint32());
+          break;
+        }
+        case UINT64: {
+          mergeUint64(other.getUint64());
+          break;
+        }
+        case SINT32: {
+          mergeSint32(other.getSint32());
+          break;
+        }
+        case SINT64: {
+          mergeSint64(other.getSint64());
+          break;
+        }
+        case FIXED32: {
+          mergeFixed32(other.getFixed32());
+          break;
+        }
+        case FIXED64: {
+          mergeFixed64(other.getFixed64());
+          break;
+        }
+        case SFIXED32: {
+          mergeSfixed32(other.getSfixed32());
+          break;
+        }
+        case SFIXED64: {
+          mergeSfixed64(other.getSfixed64());
+          break;
+        }
+        case BOOL: {
+          mergeBool(other.getBool());
+          break;
+        }
+        case STRING: {
+          mergeString(other.getString());
+          break;
+        }
+        case BYTES: {
+          mergeBytes(other.getBytes());
+          break;
+        }
+        case ENUM: {
+          mergeEnum(other.getEnum());
+          break;
+        }
+        case REPEATED: {
+          mergeRepeated(other.getRepeated());
+          break;
+        }
+        case MAP: {
+          mergeMap(other.getMap());
+          break;
+        }
+        case ANY: {
+          mergeAny(other.getAny());
+          break;
+        }
+        case DURATION: {
+          mergeDuration(other.getDuration());
+          break;
+        }
+        case TIMESTAMP: {
+          mergeTimestamp(other.getTimestamp());
+          break;
+        }
+        case TYPE_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              input.readMessage(
+                  getFloatFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 1;
+              break;
+            } // case 10
+            case 18: {
+              input.readMessage(
+                  getDoubleFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 2;
+              break;
+            } // case 18
+            case 26: {
+              input.readMessage(
+                  getInt32FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 3;
+              break;
+            } // case 26
+            case 34: {
+              input.readMessage(
+                  getInt64FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 4;
+              break;
+            } // case 34
+            case 42: {
+              input.readMessage(
+                  getUint32FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 5;
+              break;
+            } // case 42
+            case 50: {
+              input.readMessage(
+                  getUint64FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 6;
+              break;
+            } // case 50
+            case 58: {
+              input.readMessage(
+                  getSint32FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 7;
+              break;
+            } // case 58
+            case 66: {
+              input.readMessage(
+                  getSint64FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 8;
+              break;
+            } // case 66
+            case 74: {
+              input.readMessage(
+                  getFixed32FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 9;
+              break;
+            } // case 74
+            case 82: {
+              input.readMessage(
+                  getFixed64FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 10;
+              break;
+            } // case 82
+            case 90: {
+              input.readMessage(
+                  getSfixed32FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 11;
+              break;
+            } // case 90
+            case 98: {
+              input.readMessage(
+                  getSfixed64FieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 12;
+              break;
+            } // case 98
+            case 106: {
+              input.readMessage(
+                  getBoolFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 13;
+              break;
+            } // case 106
+            case 114: {
+              input.readMessage(
+                  getStringFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 14;
+              break;
+            } // case 114
+            case 122: {
+              input.readMessage(
+                  getBytesFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 15;
+              break;
+            } // case 122
+            case 130: {
+              input.readMessage(
+                  getEnumFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 16;
+              break;
+            } // case 130
+            case 146: {
+              input.readMessage(
+                  getRepeatedFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 18;
+              break;
+            } // case 146
+            case 154: {
+              input.readMessage(
+                  getMapFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 19;
+              break;
+            } // case 154
+            case 162: {
+              input.readMessage(
+                  getAnyFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 20;
+              break;
+            } // case 162
+            case 170: {
+              input.readMessage(
+                  getDurationFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 21;
+              break;
+            } // case 170
+            case 178: {
+              input.readMessage(
+                  getTimestampFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              typeCase_ = 22;
+              break;
+            } // case 178
+            case 186: {
+              de.danet.buf.validate.Constraint m =
+                  input.readMessage(
+                      de.danet.buf.validate.Constraint.parser(),
+                      extensionRegistry);
+              if (celBuilder_ == null) {
+                ensureCelIsMutable();
+                cel_.add(m);
+              } else {
+                celBuilder_.addMessage(m);
+              }
+              break;
+            } // case 186
+            case 192: {
+              skipped_ = input.readBool();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 192
+            case 200: {
+              required_ = input.readBool();
+              bitField0_ |= 0x00000004;
+              break;
+            } // case 200
+            case 208: {
+              ignoreEmpty_ = input.readBool();
+              bitField0_ |= 0x00000008;
+              break;
+            } // case 208
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int typeCase_ = 0;
+    private java.lang.Object type_;
+    public TypeCase
+        getTypeCase() {
+      return TypeCase.forNumber(
+          typeCase_);
+    }
+
+    public Builder clearType() {
+      typeCase_ = 0;
+      type_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private java.util.List<de.danet.buf.validate.Constraint> cel_ =
+      java.util.Collections.emptyList();
+    private void ensureCelIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        cel_ = new java.util.ArrayList<de.danet.buf.validate.Constraint>(cel_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        de.danet.buf.validate.Constraint, de.danet.buf.validate.Constraint.Builder, de.danet.buf.validate.ConstraintOrBuilder> celBuilder_;
+
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public java.util.List<de.danet.buf.validate.Constraint> getCelList() {
+      if (celBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(cel_);
+      } else {
+        return celBuilder_.getMessageList();
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public int getCelCount() {
+      if (celBuilder_ == null) {
+        return cel_.size();
+      } else {
+        return celBuilder_.getCount();
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.Constraint getCel(int index) {
+      if (celBuilder_ == null) {
+        return cel_.get(index);
+      } else {
+        return celBuilder_.getMessage(index);
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder setCel(
+        int index, de.danet.buf.validate.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.set(index, value);
+        onChanged();
+      } else {
+        celBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder setCel(
+        int index, de.danet.buf.validate.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder addCel(de.danet.buf.validate.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.add(value);
+        onChanged();
+      } else {
+        celBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        int index, de.danet.buf.validate.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.add(index, value);
+        onChanged();
+      } else {
+        celBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        de.danet.buf.validate.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.add(builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        int index, de.danet.buf.validate.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder addAllCel(
+        java.lang.Iterable<? extends de.danet.buf.validate.Constraint> values) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, cel_);
+        onChanged();
+      } else {
+        celBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder clearCel() {
+      if (celBuilder_ == null) {
+        cel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+      } else {
+        celBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public Builder removeCel(int index) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.remove(index);
+        onChanged();
+      } else {
+        celBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.Constraint.Builder getCelBuilder(
+        int index) {
+      return getCelFieldBuilder().getBuilder(index);
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.ConstraintOrBuilder getCelOrBuilder(
+        int index) {
+      if (celBuilder_ == null) {
+        return cel_.get(index);  } else {
+        return celBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public java.util.List<? extends de.danet.buf.validate.ConstraintOrBuilder> 
+         getCelOrBuilderList() {
+      if (celBuilder_ != null) {
+        return celBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(cel_);
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.Constraint.Builder addCelBuilder() {
+      return getCelFieldBuilder().addBuilder(
+          de.danet.buf.validate.Constraint.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.Constraint.Builder addCelBuilder(
+        int index) {
+      return getCelFieldBuilder().addBuilder(
+          index, de.danet.buf.validate.Constraint.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field used to represent a textual expression
+     * in the Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be greater than 42.
+     *   optional int32 value = 1 [(buf.validate.field).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this &gt; 42",
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+     */
+    public java.util.List<de.danet.buf.validate.Constraint.Builder> 
+         getCelBuilderList() {
+      return getCelFieldBuilder().getBuilderList();
+    }
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        de.danet.buf.validate.Constraint, de.danet.buf.validate.Constraint.Builder, de.danet.buf.validate.ConstraintOrBuilder> 
+        getCelFieldBuilder() {
+      if (celBuilder_ == null) {
+        celBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+            de.danet.buf.validate.Constraint, de.danet.buf.validate.Constraint.Builder, de.danet.buf.validate.ConstraintOrBuilder>(
+                cel_,
+                ((bitField0_ & 0x00000001) != 0),
+                getParentForChildren(),
+                isClean());
+        cel_ = null;
+      }
+      return celBuilder_;
+    }
+
+    private boolean skipped_ ;
+    /**
+     * <pre>
+     * `skipped` is an optional boolean attribute that specifies that the
+     * validation rules of this field should not be evaluated. If skipped is set to
+     * true, any validation rules set for the field will be ignored.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must not be set.
+     *   optional MyOtherMessage value = 1 [(buf.validate.field).skipped = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool skipped = 24 [json_name = "skipped"];</code>
+     * @return The skipped.
+     */
+    @java.lang.Override
+    public boolean getSkipped() {
+      return skipped_;
+    }
+    /**
+     * <pre>
+     * `skipped` is an optional boolean attribute that specifies that the
+     * validation rules of this field should not be evaluated. If skipped is set to
+     * true, any validation rules set for the field will be ignored.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must not be set.
+     *   optional MyOtherMessage value = 1 [(buf.validate.field).skipped = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool skipped = 24 [json_name = "skipped"];</code>
+     * @param value The skipped to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSkipped(boolean value) {
+
+      skipped_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `skipped` is an optional boolean attribute that specifies that the
+     * validation rules of this field should not be evaluated. If skipped is set to
+     * true, any validation rules set for the field will be ignored.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must not be set.
+     *   optional MyOtherMessage value = 1 [(buf.validate.field).skipped = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool skipped = 24 [json_name = "skipped"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearSkipped() {
+      bitField0_ = (bitField0_ & ~0x00000002);
+      skipped_ = false;
+      onChanged();
+      return this;
+    }
+
+    private boolean required_ ;
+    /**
+     * <pre>
+     * `required` is an optional boolean attribute that specifies that
+     * this field must be set. If required is set to true, the field value must
+     * not be empty; otherwise, an error message will be generated.
+     *
+     * Note that `required` validates that `repeated` fields are non-empty, that is
+     * setting a `repeated` field as `required` is equivalent to `repeated.min_items = 1`.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be set.
+     *   optional MyOtherMessage value = 1 [(buf.validate.field).required = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool required = 25 [json_name = "required"];</code>
+     * @return The required.
+     */
+    @java.lang.Override
+    public boolean getRequired() {
+      return required_;
+    }
+    /**
+     * <pre>
+     * `required` is an optional boolean attribute that specifies that
+     * this field must be set. If required is set to true, the field value must
+     * not be empty; otherwise, an error message will be generated.
+     *
+     * Note that `required` validates that `repeated` fields are non-empty, that is
+     * setting a `repeated` field as `required` is equivalent to `repeated.min_items = 1`.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be set.
+     *   optional MyOtherMessage value = 1 [(buf.validate.field).required = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool required = 25 [json_name = "required"];</code>
+     * @param value The required to set.
+     * @return This builder for chaining.
+     */
+    public Builder setRequired(boolean value) {
+
+      required_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `required` is an optional boolean attribute that specifies that
+     * this field must be set. If required is set to true, the field value must
+     * not be empty; otherwise, an error message will be generated.
+     *
+     * Note that `required` validates that `repeated` fields are non-empty, that is
+     * setting a `repeated` field as `required` is equivalent to `repeated.min_items = 1`.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `value` must be set.
+     *   optional MyOtherMessage value = 1 [(buf.validate.field).required = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool required = 25 [json_name = "required"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearRequired() {
+      bitField0_ = (bitField0_ & ~0x00000004);
+      required_ = false;
+      onChanged();
+      return this;
+    }
+
+    private boolean ignoreEmpty_ ;
+    /**
+     * <pre>
+     * `ignore_empty` specifies that the validation rules of this field should be
+     * evaluated only if the field isn't empty. If the field is empty, no validation
+     * rules are applied.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The field `value` validation rules should be evaluated only if the field isn't empty.
+     *   repeated string value = 1 [(buf.validate.field).ignore_empty = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ignore_empty = 26 [json_name = "ignoreEmpty"];</code>
+     * @return The ignoreEmpty.
+     */
+    @java.lang.Override
+    public boolean getIgnoreEmpty() {
+      return ignoreEmpty_;
+    }
+    /**
+     * <pre>
+     * `ignore_empty` specifies that the validation rules of this field should be
+     * evaluated only if the field isn't empty. If the field is empty, no validation
+     * rules are applied.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The field `value` validation rules should be evaluated only if the field isn't empty.
+     *   repeated string value = 1 [(buf.validate.field).ignore_empty = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ignore_empty = 26 [json_name = "ignoreEmpty"];</code>
+     * @param value The ignoreEmpty to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIgnoreEmpty(boolean value) {
+
+      ignoreEmpty_ = value;
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ignore_empty` specifies that the validation rules of this field should be
+     * evaluated only if the field isn't empty. If the field is empty, no validation
+     * rules are applied.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The field `value` validation rules should be evaluated only if the field isn't empty.
+     *   repeated string value = 1 [(buf.validate.field).ignore_empty = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ignore_empty = 26 [json_name = "ignoreEmpty"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIgnoreEmpty() {
+      bitField0_ = (bitField0_ & ~0x00000008);
+      ignoreEmpty_ = false;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.FloatRules, de.danet.buf.validate.FloatRules.Builder, de.danet.buf.validate.FloatRulesOrBuilder> floatBuilder_;
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     * @return Whether the float field is set.
+     */
+    @java.lang.Override
+    public boolean hasFloat() {
+      return typeCase_ == 1;
+    }
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     * @return The float.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.FloatRules getFloat() {
+      if (floatBuilder_ == null) {
+        if (typeCase_ == 1) {
+          return (de.danet.buf.validate.FloatRules) type_;
+        }
+        return de.danet.buf.validate.FloatRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 1) {
+          return floatBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.FloatRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     */
+    public Builder setFloat(de.danet.buf.validate.FloatRules value) {
+      if (floatBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        floatBuilder_.setMessage(value);
+      }
+      typeCase_ = 1;
+      return this;
+    }
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     */
+    public Builder setFloat(
+        de.danet.buf.validate.FloatRules.Builder builderForValue) {
+      if (floatBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        floatBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 1;
+      return this;
+    }
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     */
+    public Builder mergeFloat(de.danet.buf.validate.FloatRules value) {
+      if (floatBuilder_ == null) {
+        if (typeCase_ == 1 &&
+            type_ != de.danet.buf.validate.FloatRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.FloatRules.newBuilder((de.danet.buf.validate.FloatRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 1) {
+          floatBuilder_.mergeFrom(value);
+        } else {
+          floatBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 1;
+      return this;
+    }
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     */
+    public Builder clearFloat() {
+      if (floatBuilder_ == null) {
+        if (typeCase_ == 1) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 1) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        floatBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     */
+    public de.danet.buf.validate.FloatRules.Builder getFloatBuilder() {
+      return getFloatFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.FloatRulesOrBuilder getFloatOrBuilder() {
+      if ((typeCase_ == 1) && (floatBuilder_ != null)) {
+        return floatBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 1) {
+          return (de.danet.buf.validate.FloatRules) type_;
+        }
+        return de.danet.buf.validate.FloatRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * Scalar Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.FloatRules, de.danet.buf.validate.FloatRules.Builder, de.danet.buf.validate.FloatRulesOrBuilder> 
+        getFloatFieldBuilder() {
+      if (floatBuilder_ == null) {
+        if (!(typeCase_ == 1)) {
+          type_ = de.danet.buf.validate.FloatRules.getDefaultInstance();
+        }
+        floatBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.FloatRules, de.danet.buf.validate.FloatRules.Builder, de.danet.buf.validate.FloatRulesOrBuilder>(
+                (de.danet.buf.validate.FloatRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 1;
+      onChanged();
+      return floatBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.DoubleRules, de.danet.buf.validate.DoubleRules.Builder, de.danet.buf.validate.DoubleRulesOrBuilder> doubleBuilder_;
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     * @return Whether the double field is set.
+     */
+    @java.lang.Override
+    public boolean hasDouble() {
+      return typeCase_ == 2;
+    }
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     * @return The double.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.DoubleRules getDouble() {
+      if (doubleBuilder_ == null) {
+        if (typeCase_ == 2) {
+          return (de.danet.buf.validate.DoubleRules) type_;
+        }
+        return de.danet.buf.validate.DoubleRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 2) {
+          return doubleBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.DoubleRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     */
+    public Builder setDouble(de.danet.buf.validate.DoubleRules value) {
+      if (doubleBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        doubleBuilder_.setMessage(value);
+      }
+      typeCase_ = 2;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     */
+    public Builder setDouble(
+        de.danet.buf.validate.DoubleRules.Builder builderForValue) {
+      if (doubleBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        doubleBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 2;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     */
+    public Builder mergeDouble(de.danet.buf.validate.DoubleRules value) {
+      if (doubleBuilder_ == null) {
+        if (typeCase_ == 2 &&
+            type_ != de.danet.buf.validate.DoubleRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.DoubleRules.newBuilder((de.danet.buf.validate.DoubleRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 2) {
+          doubleBuilder_.mergeFrom(value);
+        } else {
+          doubleBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 2;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     */
+    public Builder clearDouble() {
+      if (doubleBuilder_ == null) {
+        if (typeCase_ == 2) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 2) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        doubleBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     */
+    public de.danet.buf.validate.DoubleRules.Builder getDoubleBuilder() {
+      return getDoubleFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.DoubleRulesOrBuilder getDoubleOrBuilder() {
+      if ((typeCase_ == 2) && (doubleBuilder_ != null)) {
+        return doubleBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 2) {
+          return (de.danet.buf.validate.DoubleRules) type_;
+        }
+        return de.danet.buf.validate.DoubleRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.DoubleRules, de.danet.buf.validate.DoubleRules.Builder, de.danet.buf.validate.DoubleRulesOrBuilder> 
+        getDoubleFieldBuilder() {
+      if (doubleBuilder_ == null) {
+        if (!(typeCase_ == 2)) {
+          type_ = de.danet.buf.validate.DoubleRules.getDefaultInstance();
+        }
+        doubleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.DoubleRules, de.danet.buf.validate.DoubleRules.Builder, de.danet.buf.validate.DoubleRulesOrBuilder>(
+                (de.danet.buf.validate.DoubleRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 2;
+      onChanged();
+      return doubleBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.Int32Rules, de.danet.buf.validate.Int32Rules.Builder, de.danet.buf.validate.Int32RulesOrBuilder> int32Builder_;
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     * @return Whether the int32 field is set.
+     */
+    @java.lang.Override
+    public boolean hasInt32() {
+      return typeCase_ == 3;
+    }
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     * @return The int32.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.Int32Rules getInt32() {
+      if (int32Builder_ == null) {
+        if (typeCase_ == 3) {
+          return (de.danet.buf.validate.Int32Rules) type_;
+        }
+        return de.danet.buf.validate.Int32Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 3) {
+          return int32Builder_.getMessage();
+        }
+        return de.danet.buf.validate.Int32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     */
+    public Builder setInt32(de.danet.buf.validate.Int32Rules value) {
+      if (int32Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        int32Builder_.setMessage(value);
+      }
+      typeCase_ = 3;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     */
+    public Builder setInt32(
+        de.danet.buf.validate.Int32Rules.Builder builderForValue) {
+      if (int32Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        int32Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 3;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     */
+    public Builder mergeInt32(de.danet.buf.validate.Int32Rules value) {
+      if (int32Builder_ == null) {
+        if (typeCase_ == 3 &&
+            type_ != de.danet.buf.validate.Int32Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.Int32Rules.newBuilder((de.danet.buf.validate.Int32Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 3) {
+          int32Builder_.mergeFrom(value);
+        } else {
+          int32Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 3;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     */
+    public Builder clearInt32() {
+      if (int32Builder_ == null) {
+        if (typeCase_ == 3) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 3) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        int32Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     */
+    public de.danet.buf.validate.Int32Rules.Builder getInt32Builder() {
+      return getInt32FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.Int32RulesOrBuilder getInt32OrBuilder() {
+      if ((typeCase_ == 3) && (int32Builder_ != null)) {
+        return int32Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 3) {
+          return (de.danet.buf.validate.Int32Rules) type_;
+        }
+        return de.danet.buf.validate.Int32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.Int32Rules, de.danet.buf.validate.Int32Rules.Builder, de.danet.buf.validate.Int32RulesOrBuilder> 
+        getInt32FieldBuilder() {
+      if (int32Builder_ == null) {
+        if (!(typeCase_ == 3)) {
+          type_ = de.danet.buf.validate.Int32Rules.getDefaultInstance();
+        }
+        int32Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.Int32Rules, de.danet.buf.validate.Int32Rules.Builder, de.danet.buf.validate.Int32RulesOrBuilder>(
+                (de.danet.buf.validate.Int32Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 3;
+      onChanged();
+      return int32Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.Int64Rules, de.danet.buf.validate.Int64Rules.Builder, de.danet.buf.validate.Int64RulesOrBuilder> int64Builder_;
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     * @return Whether the int64 field is set.
+     */
+    @java.lang.Override
+    public boolean hasInt64() {
+      return typeCase_ == 4;
+    }
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     * @return The int64.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.Int64Rules getInt64() {
+      if (int64Builder_ == null) {
+        if (typeCase_ == 4) {
+          return (de.danet.buf.validate.Int64Rules) type_;
+        }
+        return de.danet.buf.validate.Int64Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 4) {
+          return int64Builder_.getMessage();
+        }
+        return de.danet.buf.validate.Int64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     */
+    public Builder setInt64(de.danet.buf.validate.Int64Rules value) {
+      if (int64Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        int64Builder_.setMessage(value);
+      }
+      typeCase_ = 4;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     */
+    public Builder setInt64(
+        de.danet.buf.validate.Int64Rules.Builder builderForValue) {
+      if (int64Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        int64Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 4;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     */
+    public Builder mergeInt64(de.danet.buf.validate.Int64Rules value) {
+      if (int64Builder_ == null) {
+        if (typeCase_ == 4 &&
+            type_ != de.danet.buf.validate.Int64Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.Int64Rules.newBuilder((de.danet.buf.validate.Int64Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 4) {
+          int64Builder_.mergeFrom(value);
+        } else {
+          int64Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 4;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     */
+    public Builder clearInt64() {
+      if (int64Builder_ == null) {
+        if (typeCase_ == 4) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 4) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        int64Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     */
+    public de.danet.buf.validate.Int64Rules.Builder getInt64Builder() {
+      return getInt64FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.Int64RulesOrBuilder getInt64OrBuilder() {
+      if ((typeCase_ == 4) && (int64Builder_ != null)) {
+        return int64Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 4) {
+          return (de.danet.buf.validate.Int64Rules) type_;
+        }
+        return de.danet.buf.validate.Int64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.Int64Rules, de.danet.buf.validate.Int64Rules.Builder, de.danet.buf.validate.Int64RulesOrBuilder> 
+        getInt64FieldBuilder() {
+      if (int64Builder_ == null) {
+        if (!(typeCase_ == 4)) {
+          type_ = de.danet.buf.validate.Int64Rules.getDefaultInstance();
+        }
+        int64Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.Int64Rules, de.danet.buf.validate.Int64Rules.Builder, de.danet.buf.validate.Int64RulesOrBuilder>(
+                (de.danet.buf.validate.Int64Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 4;
+      onChanged();
+      return int64Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.UInt32Rules, de.danet.buf.validate.UInt32Rules.Builder, de.danet.buf.validate.UInt32RulesOrBuilder> uint32Builder_;
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     * @return Whether the uint32 field is set.
+     */
+    @java.lang.Override
+    public boolean hasUint32() {
+      return typeCase_ == 5;
+    }
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     * @return The uint32.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.UInt32Rules getUint32() {
+      if (uint32Builder_ == null) {
+        if (typeCase_ == 5) {
+          return (de.danet.buf.validate.UInt32Rules) type_;
+        }
+        return de.danet.buf.validate.UInt32Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 5) {
+          return uint32Builder_.getMessage();
+        }
+        return de.danet.buf.validate.UInt32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     */
+    public Builder setUint32(de.danet.buf.validate.UInt32Rules value) {
+      if (uint32Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        uint32Builder_.setMessage(value);
+      }
+      typeCase_ = 5;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     */
+    public Builder setUint32(
+        de.danet.buf.validate.UInt32Rules.Builder builderForValue) {
+      if (uint32Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        uint32Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 5;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     */
+    public Builder mergeUint32(de.danet.buf.validate.UInt32Rules value) {
+      if (uint32Builder_ == null) {
+        if (typeCase_ == 5 &&
+            type_ != de.danet.buf.validate.UInt32Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.UInt32Rules.newBuilder((de.danet.buf.validate.UInt32Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 5) {
+          uint32Builder_.mergeFrom(value);
+        } else {
+          uint32Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 5;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     */
+    public Builder clearUint32() {
+      if (uint32Builder_ == null) {
+        if (typeCase_ == 5) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 5) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        uint32Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     */
+    public de.danet.buf.validate.UInt32Rules.Builder getUint32Builder() {
+      return getUint32FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.UInt32RulesOrBuilder getUint32OrBuilder() {
+      if ((typeCase_ == 5) && (uint32Builder_ != null)) {
+        return uint32Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 5) {
+          return (de.danet.buf.validate.UInt32Rules) type_;
+        }
+        return de.danet.buf.validate.UInt32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.UInt32Rules, de.danet.buf.validate.UInt32Rules.Builder, de.danet.buf.validate.UInt32RulesOrBuilder> 
+        getUint32FieldBuilder() {
+      if (uint32Builder_ == null) {
+        if (!(typeCase_ == 5)) {
+          type_ = de.danet.buf.validate.UInt32Rules.getDefaultInstance();
+        }
+        uint32Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.UInt32Rules, de.danet.buf.validate.UInt32Rules.Builder, de.danet.buf.validate.UInt32RulesOrBuilder>(
+                (de.danet.buf.validate.UInt32Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 5;
+      onChanged();
+      return uint32Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.UInt64Rules, de.danet.buf.validate.UInt64Rules.Builder, de.danet.buf.validate.UInt64RulesOrBuilder> uint64Builder_;
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     * @return Whether the uint64 field is set.
+     */
+    @java.lang.Override
+    public boolean hasUint64() {
+      return typeCase_ == 6;
+    }
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     * @return The uint64.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.UInt64Rules getUint64() {
+      if (uint64Builder_ == null) {
+        if (typeCase_ == 6) {
+          return (de.danet.buf.validate.UInt64Rules) type_;
+        }
+        return de.danet.buf.validate.UInt64Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 6) {
+          return uint64Builder_.getMessage();
+        }
+        return de.danet.buf.validate.UInt64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     */
+    public Builder setUint64(de.danet.buf.validate.UInt64Rules value) {
+      if (uint64Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        uint64Builder_.setMessage(value);
+      }
+      typeCase_ = 6;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     */
+    public Builder setUint64(
+        de.danet.buf.validate.UInt64Rules.Builder builderForValue) {
+      if (uint64Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        uint64Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 6;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     */
+    public Builder mergeUint64(de.danet.buf.validate.UInt64Rules value) {
+      if (uint64Builder_ == null) {
+        if (typeCase_ == 6 &&
+            type_ != de.danet.buf.validate.UInt64Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.UInt64Rules.newBuilder((de.danet.buf.validate.UInt64Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 6) {
+          uint64Builder_.mergeFrom(value);
+        } else {
+          uint64Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 6;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     */
+    public Builder clearUint64() {
+      if (uint64Builder_ == null) {
+        if (typeCase_ == 6) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 6) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        uint64Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     */
+    public de.danet.buf.validate.UInt64Rules.Builder getUint64Builder() {
+      return getUint64FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.UInt64RulesOrBuilder getUint64OrBuilder() {
+      if ((typeCase_ == 6) && (uint64Builder_ != null)) {
+        return uint64Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 6) {
+          return (de.danet.buf.validate.UInt64Rules) type_;
+        }
+        return de.danet.buf.validate.UInt64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.UInt64Rules, de.danet.buf.validate.UInt64Rules.Builder, de.danet.buf.validate.UInt64RulesOrBuilder> 
+        getUint64FieldBuilder() {
+      if (uint64Builder_ == null) {
+        if (!(typeCase_ == 6)) {
+          type_ = de.danet.buf.validate.UInt64Rules.getDefaultInstance();
+        }
+        uint64Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.UInt64Rules, de.danet.buf.validate.UInt64Rules.Builder, de.danet.buf.validate.UInt64RulesOrBuilder>(
+                (de.danet.buf.validate.UInt64Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 6;
+      onChanged();
+      return uint64Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.SInt32Rules, de.danet.buf.validate.SInt32Rules.Builder, de.danet.buf.validate.SInt32RulesOrBuilder> sint32Builder_;
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     * @return Whether the sint32 field is set.
+     */
+    @java.lang.Override
+    public boolean hasSint32() {
+      return typeCase_ == 7;
+    }
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     * @return The sint32.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.SInt32Rules getSint32() {
+      if (sint32Builder_ == null) {
+        if (typeCase_ == 7) {
+          return (de.danet.buf.validate.SInt32Rules) type_;
+        }
+        return de.danet.buf.validate.SInt32Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 7) {
+          return sint32Builder_.getMessage();
+        }
+        return de.danet.buf.validate.SInt32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     */
+    public Builder setSint32(de.danet.buf.validate.SInt32Rules value) {
+      if (sint32Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        sint32Builder_.setMessage(value);
+      }
+      typeCase_ = 7;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     */
+    public Builder setSint32(
+        de.danet.buf.validate.SInt32Rules.Builder builderForValue) {
+      if (sint32Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        sint32Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 7;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     */
+    public Builder mergeSint32(de.danet.buf.validate.SInt32Rules value) {
+      if (sint32Builder_ == null) {
+        if (typeCase_ == 7 &&
+            type_ != de.danet.buf.validate.SInt32Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.SInt32Rules.newBuilder((de.danet.buf.validate.SInt32Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 7) {
+          sint32Builder_.mergeFrom(value);
+        } else {
+          sint32Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 7;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     */
+    public Builder clearSint32() {
+      if (sint32Builder_ == null) {
+        if (typeCase_ == 7) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 7) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        sint32Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     */
+    public de.danet.buf.validate.SInt32Rules.Builder getSint32Builder() {
+      return getSint32FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.SInt32RulesOrBuilder getSint32OrBuilder() {
+      if ((typeCase_ == 7) && (sint32Builder_ != null)) {
+        return sint32Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 7) {
+          return (de.danet.buf.validate.SInt32Rules) type_;
+        }
+        return de.danet.buf.validate.SInt32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.SInt32Rules, de.danet.buf.validate.SInt32Rules.Builder, de.danet.buf.validate.SInt32RulesOrBuilder> 
+        getSint32FieldBuilder() {
+      if (sint32Builder_ == null) {
+        if (!(typeCase_ == 7)) {
+          type_ = de.danet.buf.validate.SInt32Rules.getDefaultInstance();
+        }
+        sint32Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.SInt32Rules, de.danet.buf.validate.SInt32Rules.Builder, de.danet.buf.validate.SInt32RulesOrBuilder>(
+                (de.danet.buf.validate.SInt32Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 7;
+      onChanged();
+      return sint32Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.SInt64Rules, de.danet.buf.validate.SInt64Rules.Builder, de.danet.buf.validate.SInt64RulesOrBuilder> sint64Builder_;
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     * @return Whether the sint64 field is set.
+     */
+    @java.lang.Override
+    public boolean hasSint64() {
+      return typeCase_ == 8;
+    }
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     * @return The sint64.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.SInt64Rules getSint64() {
+      if (sint64Builder_ == null) {
+        if (typeCase_ == 8) {
+          return (de.danet.buf.validate.SInt64Rules) type_;
+        }
+        return de.danet.buf.validate.SInt64Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 8) {
+          return sint64Builder_.getMessage();
+        }
+        return de.danet.buf.validate.SInt64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     */
+    public Builder setSint64(de.danet.buf.validate.SInt64Rules value) {
+      if (sint64Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        sint64Builder_.setMessage(value);
+      }
+      typeCase_ = 8;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     */
+    public Builder setSint64(
+        de.danet.buf.validate.SInt64Rules.Builder builderForValue) {
+      if (sint64Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        sint64Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 8;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     */
+    public Builder mergeSint64(de.danet.buf.validate.SInt64Rules value) {
+      if (sint64Builder_ == null) {
+        if (typeCase_ == 8 &&
+            type_ != de.danet.buf.validate.SInt64Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.SInt64Rules.newBuilder((de.danet.buf.validate.SInt64Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 8) {
+          sint64Builder_.mergeFrom(value);
+        } else {
+          sint64Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 8;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     */
+    public Builder clearSint64() {
+      if (sint64Builder_ == null) {
+        if (typeCase_ == 8) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 8) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        sint64Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     */
+    public de.danet.buf.validate.SInt64Rules.Builder getSint64Builder() {
+      return getSint64FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.SInt64RulesOrBuilder getSint64OrBuilder() {
+      if ((typeCase_ == 8) && (sint64Builder_ != null)) {
+        return sint64Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 8) {
+          return (de.danet.buf.validate.SInt64Rules) type_;
+        }
+        return de.danet.buf.validate.SInt64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.SInt64Rules, de.danet.buf.validate.SInt64Rules.Builder, de.danet.buf.validate.SInt64RulesOrBuilder> 
+        getSint64FieldBuilder() {
+      if (sint64Builder_ == null) {
+        if (!(typeCase_ == 8)) {
+          type_ = de.danet.buf.validate.SInt64Rules.getDefaultInstance();
+        }
+        sint64Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.SInt64Rules, de.danet.buf.validate.SInt64Rules.Builder, de.danet.buf.validate.SInt64RulesOrBuilder>(
+                (de.danet.buf.validate.SInt64Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 8;
+      onChanged();
+      return sint64Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.Fixed32Rules, de.danet.buf.validate.Fixed32Rules.Builder, de.danet.buf.validate.Fixed32RulesOrBuilder> fixed32Builder_;
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     * @return Whether the fixed32 field is set.
+     */
+    @java.lang.Override
+    public boolean hasFixed32() {
+      return typeCase_ == 9;
+    }
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     * @return The fixed32.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed32Rules getFixed32() {
+      if (fixed32Builder_ == null) {
+        if (typeCase_ == 9) {
+          return (de.danet.buf.validate.Fixed32Rules) type_;
+        }
+        return de.danet.buf.validate.Fixed32Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 9) {
+          return fixed32Builder_.getMessage();
+        }
+        return de.danet.buf.validate.Fixed32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     */
+    public Builder setFixed32(de.danet.buf.validate.Fixed32Rules value) {
+      if (fixed32Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        fixed32Builder_.setMessage(value);
+      }
+      typeCase_ = 9;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     */
+    public Builder setFixed32(
+        de.danet.buf.validate.Fixed32Rules.Builder builderForValue) {
+      if (fixed32Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        fixed32Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 9;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     */
+    public Builder mergeFixed32(de.danet.buf.validate.Fixed32Rules value) {
+      if (fixed32Builder_ == null) {
+        if (typeCase_ == 9 &&
+            type_ != de.danet.buf.validate.Fixed32Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.Fixed32Rules.newBuilder((de.danet.buf.validate.Fixed32Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 9) {
+          fixed32Builder_.mergeFrom(value);
+        } else {
+          fixed32Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 9;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     */
+    public Builder clearFixed32() {
+      if (fixed32Builder_ == null) {
+        if (typeCase_ == 9) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 9) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        fixed32Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     */
+    public de.danet.buf.validate.Fixed32Rules.Builder getFixed32Builder() {
+      return getFixed32FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed32RulesOrBuilder getFixed32OrBuilder() {
+      if ((typeCase_ == 9) && (fixed32Builder_ != null)) {
+        return fixed32Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 9) {
+          return (de.danet.buf.validate.Fixed32Rules) type_;
+        }
+        return de.danet.buf.validate.Fixed32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.Fixed32Rules, de.danet.buf.validate.Fixed32Rules.Builder, de.danet.buf.validate.Fixed32RulesOrBuilder> 
+        getFixed32FieldBuilder() {
+      if (fixed32Builder_ == null) {
+        if (!(typeCase_ == 9)) {
+          type_ = de.danet.buf.validate.Fixed32Rules.getDefaultInstance();
+        }
+        fixed32Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.Fixed32Rules, de.danet.buf.validate.Fixed32Rules.Builder, de.danet.buf.validate.Fixed32RulesOrBuilder>(
+                (de.danet.buf.validate.Fixed32Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 9;
+      onChanged();
+      return fixed32Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.Fixed64Rules, de.danet.buf.validate.Fixed64Rules.Builder, de.danet.buf.validate.Fixed64RulesOrBuilder> fixed64Builder_;
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     * @return Whether the fixed64 field is set.
+     */
+    @java.lang.Override
+    public boolean hasFixed64() {
+      return typeCase_ == 10;
+    }
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     * @return The fixed64.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed64Rules getFixed64() {
+      if (fixed64Builder_ == null) {
+        if (typeCase_ == 10) {
+          return (de.danet.buf.validate.Fixed64Rules) type_;
+        }
+        return de.danet.buf.validate.Fixed64Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 10) {
+          return fixed64Builder_.getMessage();
+        }
+        return de.danet.buf.validate.Fixed64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     */
+    public Builder setFixed64(de.danet.buf.validate.Fixed64Rules value) {
+      if (fixed64Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        fixed64Builder_.setMessage(value);
+      }
+      typeCase_ = 10;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     */
+    public Builder setFixed64(
+        de.danet.buf.validate.Fixed64Rules.Builder builderForValue) {
+      if (fixed64Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        fixed64Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 10;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     */
+    public Builder mergeFixed64(de.danet.buf.validate.Fixed64Rules value) {
+      if (fixed64Builder_ == null) {
+        if (typeCase_ == 10 &&
+            type_ != de.danet.buf.validate.Fixed64Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.Fixed64Rules.newBuilder((de.danet.buf.validate.Fixed64Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 10) {
+          fixed64Builder_.mergeFrom(value);
+        } else {
+          fixed64Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 10;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     */
+    public Builder clearFixed64() {
+      if (fixed64Builder_ == null) {
+        if (typeCase_ == 10) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 10) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        fixed64Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     */
+    public de.danet.buf.validate.Fixed64Rules.Builder getFixed64Builder() {
+      return getFixed64FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed64RulesOrBuilder getFixed64OrBuilder() {
+      if ((typeCase_ == 10) && (fixed64Builder_ != null)) {
+        return fixed64Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 10) {
+          return (de.danet.buf.validate.Fixed64Rules) type_;
+        }
+        return de.danet.buf.validate.Fixed64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.Fixed64Rules, de.danet.buf.validate.Fixed64Rules.Builder, de.danet.buf.validate.Fixed64RulesOrBuilder> 
+        getFixed64FieldBuilder() {
+      if (fixed64Builder_ == null) {
+        if (!(typeCase_ == 10)) {
+          type_ = de.danet.buf.validate.Fixed64Rules.getDefaultInstance();
+        }
+        fixed64Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.Fixed64Rules, de.danet.buf.validate.Fixed64Rules.Builder, de.danet.buf.validate.Fixed64RulesOrBuilder>(
+                (de.danet.buf.validate.Fixed64Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 10;
+      onChanged();
+      return fixed64Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.SFixed32Rules, de.danet.buf.validate.SFixed32Rules.Builder, de.danet.buf.validate.SFixed32RulesOrBuilder> sfixed32Builder_;
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     * @return Whether the sfixed32 field is set.
+     */
+    @java.lang.Override
+    public boolean hasSfixed32() {
+      return typeCase_ == 11;
+    }
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     * @return The sfixed32.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed32Rules getSfixed32() {
+      if (sfixed32Builder_ == null) {
+        if (typeCase_ == 11) {
+          return (de.danet.buf.validate.SFixed32Rules) type_;
+        }
+        return de.danet.buf.validate.SFixed32Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 11) {
+          return sfixed32Builder_.getMessage();
+        }
+        return de.danet.buf.validate.SFixed32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     */
+    public Builder setSfixed32(de.danet.buf.validate.SFixed32Rules value) {
+      if (sfixed32Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        sfixed32Builder_.setMessage(value);
+      }
+      typeCase_ = 11;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     */
+    public Builder setSfixed32(
+        de.danet.buf.validate.SFixed32Rules.Builder builderForValue) {
+      if (sfixed32Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        sfixed32Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 11;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     */
+    public Builder mergeSfixed32(de.danet.buf.validate.SFixed32Rules value) {
+      if (sfixed32Builder_ == null) {
+        if (typeCase_ == 11 &&
+            type_ != de.danet.buf.validate.SFixed32Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.SFixed32Rules.newBuilder((de.danet.buf.validate.SFixed32Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 11) {
+          sfixed32Builder_.mergeFrom(value);
+        } else {
+          sfixed32Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 11;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     */
+    public Builder clearSfixed32() {
+      if (sfixed32Builder_ == null) {
+        if (typeCase_ == 11) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 11) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        sfixed32Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     */
+    public de.danet.buf.validate.SFixed32Rules.Builder getSfixed32Builder() {
+      return getSfixed32FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed32RulesOrBuilder getSfixed32OrBuilder() {
+      if ((typeCase_ == 11) && (sfixed32Builder_ != null)) {
+        return sfixed32Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 11) {
+          return (de.danet.buf.validate.SFixed32Rules) type_;
+        }
+        return de.danet.buf.validate.SFixed32Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.SFixed32Rules, de.danet.buf.validate.SFixed32Rules.Builder, de.danet.buf.validate.SFixed32RulesOrBuilder> 
+        getSfixed32FieldBuilder() {
+      if (sfixed32Builder_ == null) {
+        if (!(typeCase_ == 11)) {
+          type_ = de.danet.buf.validate.SFixed32Rules.getDefaultInstance();
+        }
+        sfixed32Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.SFixed32Rules, de.danet.buf.validate.SFixed32Rules.Builder, de.danet.buf.validate.SFixed32RulesOrBuilder>(
+                (de.danet.buf.validate.SFixed32Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 11;
+      onChanged();
+      return sfixed32Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.SFixed64Rules, de.danet.buf.validate.SFixed64Rules.Builder, de.danet.buf.validate.SFixed64RulesOrBuilder> sfixed64Builder_;
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     * @return Whether the sfixed64 field is set.
+     */
+    @java.lang.Override
+    public boolean hasSfixed64() {
+      return typeCase_ == 12;
+    }
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     * @return The sfixed64.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed64Rules getSfixed64() {
+      if (sfixed64Builder_ == null) {
+        if (typeCase_ == 12) {
+          return (de.danet.buf.validate.SFixed64Rules) type_;
+        }
+        return de.danet.buf.validate.SFixed64Rules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 12) {
+          return sfixed64Builder_.getMessage();
+        }
+        return de.danet.buf.validate.SFixed64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     */
+    public Builder setSfixed64(de.danet.buf.validate.SFixed64Rules value) {
+      if (sfixed64Builder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        sfixed64Builder_.setMessage(value);
+      }
+      typeCase_ = 12;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     */
+    public Builder setSfixed64(
+        de.danet.buf.validate.SFixed64Rules.Builder builderForValue) {
+      if (sfixed64Builder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        sfixed64Builder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 12;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     */
+    public Builder mergeSfixed64(de.danet.buf.validate.SFixed64Rules value) {
+      if (sfixed64Builder_ == null) {
+        if (typeCase_ == 12 &&
+            type_ != de.danet.buf.validate.SFixed64Rules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.SFixed64Rules.newBuilder((de.danet.buf.validate.SFixed64Rules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 12) {
+          sfixed64Builder_.mergeFrom(value);
+        } else {
+          sfixed64Builder_.setMessage(value);
+        }
+      }
+      typeCase_ = 12;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     */
+    public Builder clearSfixed64() {
+      if (sfixed64Builder_ == null) {
+        if (typeCase_ == 12) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 12) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        sfixed64Builder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     */
+    public de.danet.buf.validate.SFixed64Rules.Builder getSfixed64Builder() {
+      return getSfixed64FieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed64RulesOrBuilder getSfixed64OrBuilder() {
+      if ((typeCase_ == 12) && (sfixed64Builder_ != null)) {
+        return sfixed64Builder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 12) {
+          return (de.danet.buf.validate.SFixed64Rules) type_;
+        }
+        return de.danet.buf.validate.SFixed64Rules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.SFixed64Rules, de.danet.buf.validate.SFixed64Rules.Builder, de.danet.buf.validate.SFixed64RulesOrBuilder> 
+        getSfixed64FieldBuilder() {
+      if (sfixed64Builder_ == null) {
+        if (!(typeCase_ == 12)) {
+          type_ = de.danet.buf.validate.SFixed64Rules.getDefaultInstance();
+        }
+        sfixed64Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.SFixed64Rules, de.danet.buf.validate.SFixed64Rules.Builder, de.danet.buf.validate.SFixed64RulesOrBuilder>(
+                (de.danet.buf.validate.SFixed64Rules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 12;
+      onChanged();
+      return sfixed64Builder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.BoolRules, de.danet.buf.validate.BoolRules.Builder, de.danet.buf.validate.BoolRulesOrBuilder> boolBuilder_;
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     * @return Whether the bool field is set.
+     */
+    @java.lang.Override
+    public boolean hasBool() {
+      return typeCase_ == 13;
+    }
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     * @return The bool.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.BoolRules getBool() {
+      if (boolBuilder_ == null) {
+        if (typeCase_ == 13) {
+          return (de.danet.buf.validate.BoolRules) type_;
+        }
+        return de.danet.buf.validate.BoolRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 13) {
+          return boolBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.BoolRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     */
+    public Builder setBool(de.danet.buf.validate.BoolRules value) {
+      if (boolBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        boolBuilder_.setMessage(value);
+      }
+      typeCase_ = 13;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     */
+    public Builder setBool(
+        de.danet.buf.validate.BoolRules.Builder builderForValue) {
+      if (boolBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        boolBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 13;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     */
+    public Builder mergeBool(de.danet.buf.validate.BoolRules value) {
+      if (boolBuilder_ == null) {
+        if (typeCase_ == 13 &&
+            type_ != de.danet.buf.validate.BoolRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.BoolRules.newBuilder((de.danet.buf.validate.BoolRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 13) {
+          boolBuilder_.mergeFrom(value);
+        } else {
+          boolBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 13;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     */
+    public Builder clearBool() {
+      if (boolBuilder_ == null) {
+        if (typeCase_ == 13) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 13) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        boolBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     */
+    public de.danet.buf.validate.BoolRules.Builder getBoolBuilder() {
+      return getBoolFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.BoolRulesOrBuilder getBoolOrBuilder() {
+      if ((typeCase_ == 13) && (boolBuilder_ != null)) {
+        return boolBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 13) {
+          return (de.danet.buf.validate.BoolRules) type_;
+        }
+        return de.danet.buf.validate.BoolRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.BoolRules, de.danet.buf.validate.BoolRules.Builder, de.danet.buf.validate.BoolRulesOrBuilder> 
+        getBoolFieldBuilder() {
+      if (boolBuilder_ == null) {
+        if (!(typeCase_ == 13)) {
+          type_ = de.danet.buf.validate.BoolRules.getDefaultInstance();
+        }
+        boolBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.BoolRules, de.danet.buf.validate.BoolRules.Builder, de.danet.buf.validate.BoolRulesOrBuilder>(
+                (de.danet.buf.validate.BoolRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 13;
+      onChanged();
+      return boolBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.StringRules, de.danet.buf.validate.StringRules.Builder, de.danet.buf.validate.StringRulesOrBuilder> stringBuilder_;
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     * @return Whether the string field is set.
+     */
+    @java.lang.Override
+    public boolean hasString() {
+      return typeCase_ == 14;
+    }
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     * @return The string.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.StringRules getString() {
+      if (stringBuilder_ == null) {
+        if (typeCase_ == 14) {
+          return (de.danet.buf.validate.StringRules) type_;
+        }
+        return de.danet.buf.validate.StringRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 14) {
+          return stringBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.StringRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     */
+    public Builder setString(de.danet.buf.validate.StringRules value) {
+      if (stringBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        stringBuilder_.setMessage(value);
+      }
+      typeCase_ = 14;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     */
+    public Builder setString(
+        de.danet.buf.validate.StringRules.Builder builderForValue) {
+      if (stringBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        stringBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 14;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     */
+    public Builder mergeString(de.danet.buf.validate.StringRules value) {
+      if (stringBuilder_ == null) {
+        if (typeCase_ == 14 &&
+            type_ != de.danet.buf.validate.StringRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.StringRules.newBuilder((de.danet.buf.validate.StringRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 14) {
+          stringBuilder_.mergeFrom(value);
+        } else {
+          stringBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 14;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     */
+    public Builder clearString() {
+      if (stringBuilder_ == null) {
+        if (typeCase_ == 14) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 14) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        stringBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     */
+    public de.danet.buf.validate.StringRules.Builder getStringBuilder() {
+      return getStringFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.StringRulesOrBuilder getStringOrBuilder() {
+      if ((typeCase_ == 14) && (stringBuilder_ != null)) {
+        return stringBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 14) {
+          return (de.danet.buf.validate.StringRules) type_;
+        }
+        return de.danet.buf.validate.StringRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.StringRules, de.danet.buf.validate.StringRules.Builder, de.danet.buf.validate.StringRulesOrBuilder> 
+        getStringFieldBuilder() {
+      if (stringBuilder_ == null) {
+        if (!(typeCase_ == 14)) {
+          type_ = de.danet.buf.validate.StringRules.getDefaultInstance();
+        }
+        stringBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.StringRules, de.danet.buf.validate.StringRules.Builder, de.danet.buf.validate.StringRulesOrBuilder>(
+                (de.danet.buf.validate.StringRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 14;
+      onChanged();
+      return stringBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.BytesRules, de.danet.buf.validate.BytesRules.Builder, de.danet.buf.validate.BytesRulesOrBuilder> bytesBuilder_;
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     * @return Whether the bytes field is set.
+     */
+    @java.lang.Override
+    public boolean hasBytes() {
+      return typeCase_ == 15;
+    }
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     * @return The bytes.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.BytesRules getBytes() {
+      if (bytesBuilder_ == null) {
+        if (typeCase_ == 15) {
+          return (de.danet.buf.validate.BytesRules) type_;
+        }
+        return de.danet.buf.validate.BytesRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 15) {
+          return bytesBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.BytesRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     */
+    public Builder setBytes(de.danet.buf.validate.BytesRules value) {
+      if (bytesBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        bytesBuilder_.setMessage(value);
+      }
+      typeCase_ = 15;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     */
+    public Builder setBytes(
+        de.danet.buf.validate.BytesRules.Builder builderForValue) {
+      if (bytesBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        bytesBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 15;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     */
+    public Builder mergeBytes(de.danet.buf.validate.BytesRules value) {
+      if (bytesBuilder_ == null) {
+        if (typeCase_ == 15 &&
+            type_ != de.danet.buf.validate.BytesRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.BytesRules.newBuilder((de.danet.buf.validate.BytesRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 15) {
+          bytesBuilder_.mergeFrom(value);
+        } else {
+          bytesBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 15;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     */
+    public Builder clearBytes() {
+      if (bytesBuilder_ == null) {
+        if (typeCase_ == 15) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 15) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        bytesBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     */
+    public de.danet.buf.validate.BytesRules.Builder getBytesBuilder() {
+      return getBytesFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.BytesRulesOrBuilder getBytesOrBuilder() {
+      if ((typeCase_ == 15) && (bytesBuilder_ != null)) {
+        return bytesBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 15) {
+          return (de.danet.buf.validate.BytesRules) type_;
+        }
+        return de.danet.buf.validate.BytesRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.BytesRules, de.danet.buf.validate.BytesRules.Builder, de.danet.buf.validate.BytesRulesOrBuilder> 
+        getBytesFieldBuilder() {
+      if (bytesBuilder_ == null) {
+        if (!(typeCase_ == 15)) {
+          type_ = de.danet.buf.validate.BytesRules.getDefaultInstance();
+        }
+        bytesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.BytesRules, de.danet.buf.validate.BytesRules.Builder, de.danet.buf.validate.BytesRulesOrBuilder>(
+                (de.danet.buf.validate.BytesRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 15;
+      onChanged();
+      return bytesBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.EnumRules, de.danet.buf.validate.EnumRules.Builder, de.danet.buf.validate.EnumRulesOrBuilder> enumBuilder_;
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     * @return Whether the enum field is set.
+     */
+    @java.lang.Override
+    public boolean hasEnum() {
+      return typeCase_ == 16;
+    }
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     * @return The enum.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.EnumRules getEnum() {
+      if (enumBuilder_ == null) {
+        if (typeCase_ == 16) {
+          return (de.danet.buf.validate.EnumRules) type_;
+        }
+        return de.danet.buf.validate.EnumRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 16) {
+          return enumBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.EnumRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     */
+    public Builder setEnum(de.danet.buf.validate.EnumRules value) {
+      if (enumBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        enumBuilder_.setMessage(value);
+      }
+      typeCase_ = 16;
+      return this;
+    }
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     */
+    public Builder setEnum(
+        de.danet.buf.validate.EnumRules.Builder builderForValue) {
+      if (enumBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        enumBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 16;
+      return this;
+    }
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     */
+    public Builder mergeEnum(de.danet.buf.validate.EnumRules value) {
+      if (enumBuilder_ == null) {
+        if (typeCase_ == 16 &&
+            type_ != de.danet.buf.validate.EnumRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.EnumRules.newBuilder((de.danet.buf.validate.EnumRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 16) {
+          enumBuilder_.mergeFrom(value);
+        } else {
+          enumBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 16;
+      return this;
+    }
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     */
+    public Builder clearEnum() {
+      if (enumBuilder_ == null) {
+        if (typeCase_ == 16) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 16) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        enumBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     */
+    public de.danet.buf.validate.EnumRules.Builder getEnumBuilder() {
+      return getEnumFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.EnumRulesOrBuilder getEnumOrBuilder() {
+      if ((typeCase_ == 16) && (enumBuilder_ != null)) {
+        return enumBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 16) {
+          return (de.danet.buf.validate.EnumRules) type_;
+        }
+        return de.danet.buf.validate.EnumRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * Complex Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.EnumRules, de.danet.buf.validate.EnumRules.Builder, de.danet.buf.validate.EnumRulesOrBuilder> 
+        getEnumFieldBuilder() {
+      if (enumBuilder_ == null) {
+        if (!(typeCase_ == 16)) {
+          type_ = de.danet.buf.validate.EnumRules.getDefaultInstance();
+        }
+        enumBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.EnumRules, de.danet.buf.validate.EnumRules.Builder, de.danet.buf.validate.EnumRulesOrBuilder>(
+                (de.danet.buf.validate.EnumRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 16;
+      onChanged();
+      return enumBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.RepeatedRules, de.danet.buf.validate.RepeatedRules.Builder, de.danet.buf.validate.RepeatedRulesOrBuilder> repeatedBuilder_;
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     * @return Whether the repeated field is set.
+     */
+    @java.lang.Override
+    public boolean hasRepeated() {
+      return typeCase_ == 18;
+    }
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     * @return The repeated.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.RepeatedRules getRepeated() {
+      if (repeatedBuilder_ == null) {
+        if (typeCase_ == 18) {
+          return (de.danet.buf.validate.RepeatedRules) type_;
+        }
+        return de.danet.buf.validate.RepeatedRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 18) {
+          return repeatedBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.RepeatedRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     */
+    public Builder setRepeated(de.danet.buf.validate.RepeatedRules value) {
+      if (repeatedBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        repeatedBuilder_.setMessage(value);
+      }
+      typeCase_ = 18;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     */
+    public Builder setRepeated(
+        de.danet.buf.validate.RepeatedRules.Builder builderForValue) {
+      if (repeatedBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        repeatedBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 18;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     */
+    public Builder mergeRepeated(de.danet.buf.validate.RepeatedRules value) {
+      if (repeatedBuilder_ == null) {
+        if (typeCase_ == 18 &&
+            type_ != de.danet.buf.validate.RepeatedRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.RepeatedRules.newBuilder((de.danet.buf.validate.RepeatedRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 18) {
+          repeatedBuilder_.mergeFrom(value);
+        } else {
+          repeatedBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 18;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     */
+    public Builder clearRepeated() {
+      if (repeatedBuilder_ == null) {
+        if (typeCase_ == 18) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 18) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        repeatedBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     */
+    public de.danet.buf.validate.RepeatedRules.Builder getRepeatedBuilder() {
+      return getRepeatedFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.RepeatedRulesOrBuilder getRepeatedOrBuilder() {
+      if ((typeCase_ == 18) && (repeatedBuilder_ != null)) {
+        return repeatedBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 18) {
+          return (de.danet.buf.validate.RepeatedRules) type_;
+        }
+        return de.danet.buf.validate.RepeatedRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.RepeatedRules, de.danet.buf.validate.RepeatedRules.Builder, de.danet.buf.validate.RepeatedRulesOrBuilder> 
+        getRepeatedFieldBuilder() {
+      if (repeatedBuilder_ == null) {
+        if (!(typeCase_ == 18)) {
+          type_ = de.danet.buf.validate.RepeatedRules.getDefaultInstance();
+        }
+        repeatedBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.RepeatedRules, de.danet.buf.validate.RepeatedRules.Builder, de.danet.buf.validate.RepeatedRulesOrBuilder>(
+                (de.danet.buf.validate.RepeatedRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 18;
+      onChanged();
+      return repeatedBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.MapRules, de.danet.buf.validate.MapRules.Builder, de.danet.buf.validate.MapRulesOrBuilder> mapBuilder_;
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     * @return Whether the map field is set.
+     */
+    @java.lang.Override
+    public boolean hasMap() {
+      return typeCase_ == 19;
+    }
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     * @return The map.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.MapRules getMap() {
+      if (mapBuilder_ == null) {
+        if (typeCase_ == 19) {
+          return (de.danet.buf.validate.MapRules) type_;
+        }
+        return de.danet.buf.validate.MapRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 19) {
+          return mapBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.MapRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     */
+    public Builder setMap(de.danet.buf.validate.MapRules value) {
+      if (mapBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        mapBuilder_.setMessage(value);
+      }
+      typeCase_ = 19;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     */
+    public Builder setMap(
+        de.danet.buf.validate.MapRules.Builder builderForValue) {
+      if (mapBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        mapBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 19;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     */
+    public Builder mergeMap(de.danet.buf.validate.MapRules value) {
+      if (mapBuilder_ == null) {
+        if (typeCase_ == 19 &&
+            type_ != de.danet.buf.validate.MapRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.MapRules.newBuilder((de.danet.buf.validate.MapRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 19) {
+          mapBuilder_.mergeFrom(value);
+        } else {
+          mapBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 19;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     */
+    public Builder clearMap() {
+      if (mapBuilder_ == null) {
+        if (typeCase_ == 19) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 19) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        mapBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     */
+    public de.danet.buf.validate.MapRules.Builder getMapBuilder() {
+      return getMapFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.MapRulesOrBuilder getMapOrBuilder() {
+      if ((typeCase_ == 19) && (mapBuilder_ != null)) {
+        return mapBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 19) {
+          return (de.danet.buf.validate.MapRules) type_;
+        }
+        return de.danet.buf.validate.MapRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.MapRules, de.danet.buf.validate.MapRules.Builder, de.danet.buf.validate.MapRulesOrBuilder> 
+        getMapFieldBuilder() {
+      if (mapBuilder_ == null) {
+        if (!(typeCase_ == 19)) {
+          type_ = de.danet.buf.validate.MapRules.getDefaultInstance();
+        }
+        mapBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.MapRules, de.danet.buf.validate.MapRules.Builder, de.danet.buf.validate.MapRulesOrBuilder>(
+                (de.danet.buf.validate.MapRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 19;
+      onChanged();
+      return mapBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.AnyRules, de.danet.buf.validate.AnyRules.Builder, de.danet.buf.validate.AnyRulesOrBuilder> anyBuilder_;
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     * @return Whether the any field is set.
+     */
+    @java.lang.Override
+    public boolean hasAny() {
+      return typeCase_ == 20;
+    }
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     * @return The any.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.AnyRules getAny() {
+      if (anyBuilder_ == null) {
+        if (typeCase_ == 20) {
+          return (de.danet.buf.validate.AnyRules) type_;
+        }
+        return de.danet.buf.validate.AnyRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 20) {
+          return anyBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.AnyRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     */
+    public Builder setAny(de.danet.buf.validate.AnyRules value) {
+      if (anyBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        anyBuilder_.setMessage(value);
+      }
+      typeCase_ = 20;
+      return this;
+    }
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     */
+    public Builder setAny(
+        de.danet.buf.validate.AnyRules.Builder builderForValue) {
+      if (anyBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        anyBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 20;
+      return this;
+    }
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     */
+    public Builder mergeAny(de.danet.buf.validate.AnyRules value) {
+      if (anyBuilder_ == null) {
+        if (typeCase_ == 20 &&
+            type_ != de.danet.buf.validate.AnyRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.AnyRules.newBuilder((de.danet.buf.validate.AnyRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 20) {
+          anyBuilder_.mergeFrom(value);
+        } else {
+          anyBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 20;
+      return this;
+    }
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     */
+    public Builder clearAny() {
+      if (anyBuilder_ == null) {
+        if (typeCase_ == 20) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 20) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        anyBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     */
+    public de.danet.buf.validate.AnyRules.Builder getAnyBuilder() {
+      return getAnyFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.AnyRulesOrBuilder getAnyOrBuilder() {
+      if ((typeCase_ == 20) && (anyBuilder_ != null)) {
+        return anyBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 20) {
+          return (de.danet.buf.validate.AnyRules) type_;
+        }
+        return de.danet.buf.validate.AnyRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * Well-Known Field Types
+     * </pre>
+     *
+     * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.AnyRules, de.danet.buf.validate.AnyRules.Builder, de.danet.buf.validate.AnyRulesOrBuilder> 
+        getAnyFieldBuilder() {
+      if (anyBuilder_ == null) {
+        if (!(typeCase_ == 20)) {
+          type_ = de.danet.buf.validate.AnyRules.getDefaultInstance();
+        }
+        anyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.AnyRules, de.danet.buf.validate.AnyRules.Builder, de.danet.buf.validate.AnyRulesOrBuilder>(
+                (de.danet.buf.validate.AnyRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 20;
+      onChanged();
+      return anyBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.DurationRules, de.danet.buf.validate.DurationRules.Builder, de.danet.buf.validate.DurationRulesOrBuilder> durationBuilder_;
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     * @return Whether the duration field is set.
+     */
+    @java.lang.Override
+    public boolean hasDuration() {
+      return typeCase_ == 21;
+    }
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     * @return The duration.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.DurationRules getDuration() {
+      if (durationBuilder_ == null) {
+        if (typeCase_ == 21) {
+          return (de.danet.buf.validate.DurationRules) type_;
+        }
+        return de.danet.buf.validate.DurationRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 21) {
+          return durationBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.DurationRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     */
+    public Builder setDuration(de.danet.buf.validate.DurationRules value) {
+      if (durationBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        durationBuilder_.setMessage(value);
+      }
+      typeCase_ = 21;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     */
+    public Builder setDuration(
+        de.danet.buf.validate.DurationRules.Builder builderForValue) {
+      if (durationBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        durationBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 21;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     */
+    public Builder mergeDuration(de.danet.buf.validate.DurationRules value) {
+      if (durationBuilder_ == null) {
+        if (typeCase_ == 21 &&
+            type_ != de.danet.buf.validate.DurationRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.DurationRules.newBuilder((de.danet.buf.validate.DurationRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 21) {
+          durationBuilder_.mergeFrom(value);
+        } else {
+          durationBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 21;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     */
+    public Builder clearDuration() {
+      if (durationBuilder_ == null) {
+        if (typeCase_ == 21) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 21) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        durationBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     */
+    public de.danet.buf.validate.DurationRules.Builder getDurationBuilder() {
+      return getDurationFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.DurationRulesOrBuilder getDurationOrBuilder() {
+      if ((typeCase_ == 21) && (durationBuilder_ != null)) {
+        return durationBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 21) {
+          return (de.danet.buf.validate.DurationRules) type_;
+        }
+        return de.danet.buf.validate.DurationRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.DurationRules, de.danet.buf.validate.DurationRules.Builder, de.danet.buf.validate.DurationRulesOrBuilder> 
+        getDurationFieldBuilder() {
+      if (durationBuilder_ == null) {
+        if (!(typeCase_ == 21)) {
+          type_ = de.danet.buf.validate.DurationRules.getDefaultInstance();
+        }
+        durationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.DurationRules, de.danet.buf.validate.DurationRules.Builder, de.danet.buf.validate.DurationRulesOrBuilder>(
+                (de.danet.buf.validate.DurationRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 21;
+      onChanged();
+      return durationBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.TimestampRules, de.danet.buf.validate.TimestampRules.Builder, de.danet.buf.validate.TimestampRulesOrBuilder> timestampBuilder_;
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return typeCase_ == 22;
+    }
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.TimestampRules getTimestamp() {
+      if (timestampBuilder_ == null) {
+        if (typeCase_ == 22) {
+          return (de.danet.buf.validate.TimestampRules) type_;
+        }
+        return de.danet.buf.validate.TimestampRules.getDefaultInstance();
+      } else {
+        if (typeCase_ == 22) {
+          return timestampBuilder_.getMessage();
+        }
+        return de.danet.buf.validate.TimestampRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     */
+    public Builder setTimestamp(de.danet.buf.validate.TimestampRules value) {
+      if (timestampBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        type_ = value;
+        onChanged();
+      } else {
+        timestampBuilder_.setMessage(value);
+      }
+      typeCase_ = 22;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     */
+    public Builder setTimestamp(
+        de.danet.buf.validate.TimestampRules.Builder builderForValue) {
+      if (timestampBuilder_ == null) {
+        type_ = builderForValue.build();
+        onChanged();
+      } else {
+        timestampBuilder_.setMessage(builderForValue.build());
+      }
+      typeCase_ = 22;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     */
+    public Builder mergeTimestamp(de.danet.buf.validate.TimestampRules value) {
+      if (timestampBuilder_ == null) {
+        if (typeCase_ == 22 &&
+            type_ != de.danet.buf.validate.TimestampRules.getDefaultInstance()) {
+          type_ = de.danet.buf.validate.TimestampRules.newBuilder((de.danet.buf.validate.TimestampRules) type_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          type_ = value;
+        }
+        onChanged();
+      } else {
+        if (typeCase_ == 22) {
+          timestampBuilder_.mergeFrom(value);
+        } else {
+          timestampBuilder_.setMessage(value);
+        }
+      }
+      typeCase_ = 22;
+      return this;
+    }
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     */
+    public Builder clearTimestamp() {
+      if (timestampBuilder_ == null) {
+        if (typeCase_ == 22) {
+          typeCase_ = 0;
+          type_ = null;
+          onChanged();
+        }
+      } else {
+        if (typeCase_ == 22) {
+          typeCase_ = 0;
+          type_ = null;
+        }
+        timestampBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     */
+    public de.danet.buf.validate.TimestampRules.Builder getTimestampBuilder() {
+      return getTimestampFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.TimestampRulesOrBuilder getTimestampOrBuilder() {
+      if ((typeCase_ == 22) && (timestampBuilder_ != null)) {
+        return timestampBuilder_.getMessageOrBuilder();
+      } else {
+        if (typeCase_ == 22) {
+          return (de.danet.buf.validate.TimestampRules) type_;
+        }
+        return de.danet.buf.validate.TimestampRules.getDefaultInstance();
+      }
+    }
+    /**
+     * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.TimestampRules, de.danet.buf.validate.TimestampRules.Builder, de.danet.buf.validate.TimestampRulesOrBuilder> 
+        getTimestampFieldBuilder() {
+      if (timestampBuilder_ == null) {
+        if (!(typeCase_ == 22)) {
+          type_ = de.danet.buf.validate.TimestampRules.getDefaultInstance();
+        }
+        timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.TimestampRules, de.danet.buf.validate.TimestampRules.Builder, de.danet.buf.validate.TimestampRulesOrBuilder>(
+                (de.danet.buf.validate.TimestampRules) type_,
+                getParentForChildren(),
+                isClean());
+        type_ = null;
+      }
+      typeCase_ = 22;
+      onChanged();
+      return timestampBuilder_;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.FieldConstraints)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.FieldConstraints)
+  private static final de.danet.buf.validate.FieldConstraints DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.FieldConstraints();
+  }
+
+  public static de.danet.buf.validate.FieldConstraints getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<FieldConstraints>
+      PARSER = new com.google.protobuf.AbstractParser<FieldConstraints>() {
+    @java.lang.Override
+    public FieldConstraints parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<FieldConstraints> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<FieldConstraints> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.FieldConstraints getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/FieldConstraintsOrBuilder.java b/gen/java/de/danet/buf/validate/FieldConstraintsOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec6eedbb5569c12e32a6bf10c168c6fcf628bdfa
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/FieldConstraintsOrBuilder.java
@@ -0,0 +1,532 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface FieldConstraintsOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.FieldConstraints)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  java.util.List<de.danet.buf.validate.Constraint> 
+      getCelList();
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  de.danet.buf.validate.Constraint getCel(int index);
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  int getCelCount();
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  java.util.List<? extends de.danet.buf.validate.ConstraintOrBuilder> 
+      getCelOrBuilderList();
+  /**
+   * <pre>
+   * `cel` is a repeated field used to represent a textual expression
+   * in the Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be greater than 42.
+   *   optional int32 value = 1 [(buf.validate.field).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this &gt; 42",
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 23 [json_name = "cel"];</code>
+   */
+  de.danet.buf.validate.ConstraintOrBuilder getCelOrBuilder(
+      int index);
+
+  /**
+   * <pre>
+   * `skipped` is an optional boolean attribute that specifies that the
+   * validation rules of this field should not be evaluated. If skipped is set to
+   * true, any validation rules set for the field will be ignored.
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must not be set.
+   *   optional MyOtherMessage value = 1 [(buf.validate.field).skipped = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool skipped = 24 [json_name = "skipped"];</code>
+   * @return The skipped.
+   */
+  boolean getSkipped();
+
+  /**
+   * <pre>
+   * `required` is an optional boolean attribute that specifies that
+   * this field must be set. If required is set to true, the field value must
+   * not be empty; otherwise, an error message will be generated.
+   *
+   * Note that `required` validates that `repeated` fields are non-empty, that is
+   * setting a `repeated` field as `required` is equivalent to `repeated.min_items = 1`.
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `value` must be set.
+   *   optional MyOtherMessage value = 1 [(buf.validate.field).required = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool required = 25 [json_name = "required"];</code>
+   * @return The required.
+   */
+  boolean getRequired();
+
+  /**
+   * <pre>
+   * `ignore_empty` specifies that the validation rules of this field should be
+   * evaluated only if the field isn't empty. If the field is empty, no validation
+   * rules are applied.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // The field `value` validation rules should be evaluated only if the field isn't empty.
+   *   repeated string value = 1 [(buf.validate.field).ignore_empty = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ignore_empty = 26 [json_name = "ignoreEmpty"];</code>
+   * @return The ignoreEmpty.
+   */
+  boolean getIgnoreEmpty();
+
+  /**
+   * <pre>
+   * Scalar Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+   * @return Whether the float field is set.
+   */
+  boolean hasFloat();
+  /**
+   * <pre>
+   * Scalar Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+   * @return The float.
+   */
+  de.danet.buf.validate.FloatRules getFloat();
+  /**
+   * <pre>
+   * Scalar Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.FloatRules float = 1 [json_name = "float"];</code>
+   */
+  de.danet.buf.validate.FloatRulesOrBuilder getFloatOrBuilder();
+
+  /**
+   * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+   * @return Whether the double field is set.
+   */
+  boolean hasDouble();
+  /**
+   * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+   * @return The double.
+   */
+  de.danet.buf.validate.DoubleRules getDouble();
+  /**
+   * <code>.buf.validate.DoubleRules double = 2 [json_name = "double"];</code>
+   */
+  de.danet.buf.validate.DoubleRulesOrBuilder getDoubleOrBuilder();
+
+  /**
+   * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+   * @return Whether the int32 field is set.
+   */
+  boolean hasInt32();
+  /**
+   * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+   * @return The int32.
+   */
+  de.danet.buf.validate.Int32Rules getInt32();
+  /**
+   * <code>.buf.validate.Int32Rules int32 = 3 [json_name = "int32"];</code>
+   */
+  de.danet.buf.validate.Int32RulesOrBuilder getInt32OrBuilder();
+
+  /**
+   * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+   * @return Whether the int64 field is set.
+   */
+  boolean hasInt64();
+  /**
+   * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+   * @return The int64.
+   */
+  de.danet.buf.validate.Int64Rules getInt64();
+  /**
+   * <code>.buf.validate.Int64Rules int64 = 4 [json_name = "int64"];</code>
+   */
+  de.danet.buf.validate.Int64RulesOrBuilder getInt64OrBuilder();
+
+  /**
+   * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+   * @return Whether the uint32 field is set.
+   */
+  boolean hasUint32();
+  /**
+   * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+   * @return The uint32.
+   */
+  de.danet.buf.validate.UInt32Rules getUint32();
+  /**
+   * <code>.buf.validate.UInt32Rules uint32 = 5 [json_name = "uint32"];</code>
+   */
+  de.danet.buf.validate.UInt32RulesOrBuilder getUint32OrBuilder();
+
+  /**
+   * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+   * @return Whether the uint64 field is set.
+   */
+  boolean hasUint64();
+  /**
+   * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+   * @return The uint64.
+   */
+  de.danet.buf.validate.UInt64Rules getUint64();
+  /**
+   * <code>.buf.validate.UInt64Rules uint64 = 6 [json_name = "uint64"];</code>
+   */
+  de.danet.buf.validate.UInt64RulesOrBuilder getUint64OrBuilder();
+
+  /**
+   * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+   * @return Whether the sint32 field is set.
+   */
+  boolean hasSint32();
+  /**
+   * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+   * @return The sint32.
+   */
+  de.danet.buf.validate.SInt32Rules getSint32();
+  /**
+   * <code>.buf.validate.SInt32Rules sint32 = 7 [json_name = "sint32"];</code>
+   */
+  de.danet.buf.validate.SInt32RulesOrBuilder getSint32OrBuilder();
+
+  /**
+   * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+   * @return Whether the sint64 field is set.
+   */
+  boolean hasSint64();
+  /**
+   * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+   * @return The sint64.
+   */
+  de.danet.buf.validate.SInt64Rules getSint64();
+  /**
+   * <code>.buf.validate.SInt64Rules sint64 = 8 [json_name = "sint64"];</code>
+   */
+  de.danet.buf.validate.SInt64RulesOrBuilder getSint64OrBuilder();
+
+  /**
+   * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+   * @return Whether the fixed32 field is set.
+   */
+  boolean hasFixed32();
+  /**
+   * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+   * @return The fixed32.
+   */
+  de.danet.buf.validate.Fixed32Rules getFixed32();
+  /**
+   * <code>.buf.validate.Fixed32Rules fixed32 = 9 [json_name = "fixed32"];</code>
+   */
+  de.danet.buf.validate.Fixed32RulesOrBuilder getFixed32OrBuilder();
+
+  /**
+   * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+   * @return Whether the fixed64 field is set.
+   */
+  boolean hasFixed64();
+  /**
+   * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+   * @return The fixed64.
+   */
+  de.danet.buf.validate.Fixed64Rules getFixed64();
+  /**
+   * <code>.buf.validate.Fixed64Rules fixed64 = 10 [json_name = "fixed64"];</code>
+   */
+  de.danet.buf.validate.Fixed64RulesOrBuilder getFixed64OrBuilder();
+
+  /**
+   * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+   * @return Whether the sfixed32 field is set.
+   */
+  boolean hasSfixed32();
+  /**
+   * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+   * @return The sfixed32.
+   */
+  de.danet.buf.validate.SFixed32Rules getSfixed32();
+  /**
+   * <code>.buf.validate.SFixed32Rules sfixed32 = 11 [json_name = "sfixed32"];</code>
+   */
+  de.danet.buf.validate.SFixed32RulesOrBuilder getSfixed32OrBuilder();
+
+  /**
+   * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+   * @return Whether the sfixed64 field is set.
+   */
+  boolean hasSfixed64();
+  /**
+   * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+   * @return The sfixed64.
+   */
+  de.danet.buf.validate.SFixed64Rules getSfixed64();
+  /**
+   * <code>.buf.validate.SFixed64Rules sfixed64 = 12 [json_name = "sfixed64"];</code>
+   */
+  de.danet.buf.validate.SFixed64RulesOrBuilder getSfixed64OrBuilder();
+
+  /**
+   * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+   * @return Whether the bool field is set.
+   */
+  boolean hasBool();
+  /**
+   * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+   * @return The bool.
+   */
+  de.danet.buf.validate.BoolRules getBool();
+  /**
+   * <code>.buf.validate.BoolRules bool = 13 [json_name = "bool"];</code>
+   */
+  de.danet.buf.validate.BoolRulesOrBuilder getBoolOrBuilder();
+
+  /**
+   * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+   * @return Whether the string field is set.
+   */
+  boolean hasString();
+  /**
+   * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+   * @return The string.
+   */
+  de.danet.buf.validate.StringRules getString();
+  /**
+   * <code>.buf.validate.StringRules string = 14 [json_name = "string"];</code>
+   */
+  de.danet.buf.validate.StringRulesOrBuilder getStringOrBuilder();
+
+  /**
+   * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+   * @return Whether the bytes field is set.
+   */
+  boolean hasBytes();
+  /**
+   * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+   * @return The bytes.
+   */
+  de.danet.buf.validate.BytesRules getBytes();
+  /**
+   * <code>.buf.validate.BytesRules bytes = 15 [json_name = "bytes"];</code>
+   */
+  de.danet.buf.validate.BytesRulesOrBuilder getBytesOrBuilder();
+
+  /**
+   * <pre>
+   * Complex Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+   * @return Whether the enum field is set.
+   */
+  boolean hasEnum();
+  /**
+   * <pre>
+   * Complex Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+   * @return The enum.
+   */
+  de.danet.buf.validate.EnumRules getEnum();
+  /**
+   * <pre>
+   * Complex Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.EnumRules enum = 16 [json_name = "enum"];</code>
+   */
+  de.danet.buf.validate.EnumRulesOrBuilder getEnumOrBuilder();
+
+  /**
+   * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+   * @return Whether the repeated field is set.
+   */
+  boolean hasRepeated();
+  /**
+   * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+   * @return The repeated.
+   */
+  de.danet.buf.validate.RepeatedRules getRepeated();
+  /**
+   * <code>.buf.validate.RepeatedRules repeated = 18 [json_name = "repeated"];</code>
+   */
+  de.danet.buf.validate.RepeatedRulesOrBuilder getRepeatedOrBuilder();
+
+  /**
+   * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+   * @return Whether the map field is set.
+   */
+  boolean hasMap();
+  /**
+   * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+   * @return The map.
+   */
+  de.danet.buf.validate.MapRules getMap();
+  /**
+   * <code>.buf.validate.MapRules map = 19 [json_name = "map"];</code>
+   */
+  de.danet.buf.validate.MapRulesOrBuilder getMapOrBuilder();
+
+  /**
+   * <pre>
+   * Well-Known Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+   * @return Whether the any field is set.
+   */
+  boolean hasAny();
+  /**
+   * <pre>
+   * Well-Known Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+   * @return The any.
+   */
+  de.danet.buf.validate.AnyRules getAny();
+  /**
+   * <pre>
+   * Well-Known Field Types
+   * </pre>
+   *
+   * <code>.buf.validate.AnyRules any = 20 [json_name = "any"];</code>
+   */
+  de.danet.buf.validate.AnyRulesOrBuilder getAnyOrBuilder();
+
+  /**
+   * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+   * @return Whether the duration field is set.
+   */
+  boolean hasDuration();
+  /**
+   * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+   * @return The duration.
+   */
+  de.danet.buf.validate.DurationRules getDuration();
+  /**
+   * <code>.buf.validate.DurationRules duration = 21 [json_name = "duration"];</code>
+   */
+  de.danet.buf.validate.DurationRulesOrBuilder getDurationOrBuilder();
+
+  /**
+   * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+   * @return Whether the timestamp field is set.
+   */
+  boolean hasTimestamp();
+  /**
+   * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+   * @return The timestamp.
+   */
+  de.danet.buf.validate.TimestampRules getTimestamp();
+  /**
+   * <code>.buf.validate.TimestampRules timestamp = 22 [json_name = "timestamp"];</code>
+   */
+  de.danet.buf.validate.TimestampRulesOrBuilder getTimestampOrBuilder();
+
+  de.danet.buf.validate.FieldConstraints.TypeCase getTypeCase();
+}
diff --git a/gen/java/de/danet/buf/validate/Fixed32Rules.java b/gen/java/de/danet/buf/validate/Fixed32Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..4918aeb7d023b1df46b5e04f9122634d3e9f9f74
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Fixed32Rules.java
@@ -0,0 +1,2112 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * Fixed32Rules describes the constraints applied to `fixed32` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.Fixed32Rules}
+ */
+public final class Fixed32Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.Fixed32Rules)
+    Fixed32RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use Fixed32Rules.newBuilder() to construct.
+  private Fixed32Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private Fixed32Rules() {
+    in_ = emptyIntList();
+    notIn_ = emptyIntList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new Fixed32Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed32Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed32Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.Fixed32Rules.class, de.danet.buf.validate.Fixed32Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private int const_ = 0;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must equal 42
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional fixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must equal 42
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional fixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public int getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be less than 10
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be less than 10
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public int getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be less than or equal to 10
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be less than or equal to 10
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public int getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be greater than 5 [fixed32.gt]
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+   *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+   *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be greater than 5 [fixed32.gt]
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+   *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+   *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public int getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be greater than or equal to 5 [fixed32.gte]
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+   *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+   *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be greater than or equal to 5 [fixed32.gte]
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+   *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+   *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public int getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList in_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public int getIn(int index) {
+    return in_.getInt(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList notIn_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public int getNotIn(int index) {
+    return notIn_.getInt(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeFixed32(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeFixed32(
+          2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeFixed32(
+          3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeFixed32(
+          4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeFixed32(
+          5, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeFixed32NoTag(in_.getInt(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeFixed32NoTag(notIn_.getInt(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed32Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed32Size(
+            2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed32Size(
+            3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed32Size(
+            4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed32Size(
+            5, (int)((java.lang.Integer) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      dataSize = 4 * getInList().size();
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      dataSize = 4 * getNotInList().size();
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.Fixed32Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.Fixed32Rules other = (de.danet.buf.validate.Fixed32Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst();
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + getLt();
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + getLte();
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + getGt();
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + getGte();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.Fixed32Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.Fixed32Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Fixed32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.Fixed32Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * Fixed32Rules describes the constraints applied to `fixed32` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.Fixed32Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.Fixed32Rules)
+      de.danet.buf.validate.Fixed32RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed32Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.Fixed32Rules.class, de.danet.buf.validate.Fixed32Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.Fixed32Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0;
+      in_ = emptyIntList();
+      notIn_ = emptyIntList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed32Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.Fixed32Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed32Rules build() {
+      de.danet.buf.validate.Fixed32Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed32Rules buildPartial() {
+      de.danet.buf.validate.Fixed32Rules result = new de.danet.buf.validate.Fixed32Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.Fixed32Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.Fixed32Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.Fixed32Rules) {
+        return mergeFrom((de.danet.buf.validate.Fixed32Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.Fixed32Rules other) {
+      if (other == de.danet.buf.validate.Fixed32Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 13: {
+              const_ = input.readFixed32();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 13
+            case 21: {
+              lessThan_ = input.readFixed32();
+              lessThanCase_ = 2;
+              break;
+            } // case 21
+            case 29: {
+              lessThan_ = input.readFixed32();
+              lessThanCase_ = 3;
+              break;
+            } // case 29
+            case 37: {
+              greaterThan_ = input.readFixed32();
+              greaterThanCase_ = 4;
+              break;
+            } // case 37
+            case 45: {
+              greaterThan_ = input.readFixed32();
+              greaterThanCase_ = 5;
+              break;
+            } // case 45
+            case 53: {
+              int v = input.readFixed32();
+              ensureInIsMutable();
+              in_.addInt(v);
+              break;
+            } // case 53
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureInIsMutable(alloc / 4);
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addInt(input.readFixed32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 61: {
+              int v = input.readFixed32();
+              ensureNotInIsMutable();
+              notIn_.addInt(v);
+              break;
+            } // case 61
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureNotInIsMutable(alloc / 4);
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addInt(input.readFixed32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private int const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must equal 42
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional fixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must equal 42
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional fixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public int getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must equal 42
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional fixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(int value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value.
+     * If the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must equal 42
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional fixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be less than 10
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be less than 10
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public int getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be less than 10
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(int value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be less than 10
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be less than or equal to 10
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be less than or equal to 10
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public int getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be less than or equal to 10
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(int value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be less than or equal to 10
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be greater than 5 [fixed32.gt]
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be greater than 5 [fixed32.gt]
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public int getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be greater than 5 [fixed32.gt]
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(int value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be greater than 5 [fixed32.gt]
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be greater than or equal to 5 [fixed32.gte]
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be greater than or equal to 5 [fixed32.gte]
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public int getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be greater than or equal to 5 [fixed32.gte]
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(int value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be greater than or equal to 5 [fixed32.gte]
+     *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+     *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+     *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList in_ = emptyIntList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    private void ensureInIsMutable(int capacity) {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_, capacity);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Integer>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public int getIn(int index) {
+      return in_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, int value) {
+
+      ensureInIsMutable();
+      in_.setInt(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(int value) {
+
+      ensureInIsMutable();
+      in_.addInt(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList notIn_ = emptyIntList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    private void ensureNotInIsMutable(int capacity) {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_, capacity);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Integer>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public int getNotIn(int index) {
+      return notIn_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, int value) {
+
+      ensureNotInIsMutable();
+      notIn_.setInt(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(int value) {
+
+      ensureNotInIsMutable();
+      notIn_.addInt(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.Fixed32Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.Fixed32Rules)
+  private static final de.danet.buf.validate.Fixed32Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.Fixed32Rules();
+  }
+
+  public static de.danet.buf.validate.Fixed32Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Fixed32Rules>
+      PARSER = new com.google.protobuf.AbstractParser<Fixed32Rules>() {
+    @java.lang.Override
+    public Fixed32Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<Fixed32Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Fixed32Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.Fixed32Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/Fixed32RulesOrBuilder.java b/gen/java/de/danet/buf/validate/Fixed32RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d06a90bbb31b0e485f6701674a29b59d4541c54
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Fixed32RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface Fixed32RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.Fixed32Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must equal 42
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional fixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value.
+   * If the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must equal 42
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional fixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  int getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be less than 10
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be less than 10
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  int getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be less than or equal to 10
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be less than or equal to 10
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  int getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be greater than 5 [fixed32.gt]
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+   *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+   *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be greater than 5 [fixed32.gt]
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [fixed32.gt_lt]
+   *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
+   *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  int getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be greater than or equal to 5 [fixed32.gte]
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+   *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+   *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be greater than or equal to 5 [fixed32.gte]
+   *   fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
+   *   fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
+   *   fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  int getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Integer> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  int getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Integer> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed32 value = 1 (buf.validate.field).fixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  int getNotIn(int index);
+
+  de.danet.buf.validate.Fixed32Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.Fixed32Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/Fixed64Rules.java b/gen/java/de/danet/buf/validate/Fixed64Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..e02d97931694e89142660b60396f2a4dc79c3b16
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Fixed64Rules.java
@@ -0,0 +1,2117 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * Fixed64Rules describes the constraints applied to `fixed64` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.Fixed64Rules}
+ */
+public final class Fixed64Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.Fixed64Rules)
+    Fixed64RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use Fixed64Rules.newBuilder() to construct.
+  private Fixed64Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private Fixed64Rules() {
+    in_ = emptyLongList();
+    notIn_ = emptyLongList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new Fixed64Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed64Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed64Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.Fixed64Rules.class, de.danet.buf.validate.Fixed64Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private long const_ = 0L;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must equal 42
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional fixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must equal 42
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional fixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public long getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be less than 10
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be less than 10
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public long getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be less than or equal to 10
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be less than or equal to 10
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public long getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be greater than 5 [fixed64.gt]
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+   *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+   *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be greater than 5 [fixed64.gt]
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+   *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+   *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public long getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be greater than or equal to 5 [fixed64.gte]
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+   *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+   *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be greater than or equal to 5 [fixed64.gte]
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+   *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+   *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public long getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList in_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public long getIn(int index) {
+    return in_.getLong(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList notIn_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public long getNotIn(int index) {
+    return notIn_.getLong(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeFixed64(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeFixed64(
+          2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeFixed64(
+          3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeFixed64(
+          4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeFixed64(
+          5, (long)((java.lang.Long) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeFixed64NoTag(in_.getLong(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeFixed64NoTag(notIn_.getLong(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed64Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed64Size(
+            2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed64Size(
+            3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed64Size(
+            4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFixed64Size(
+            5, (long)((java.lang.Long) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      dataSize = 8 * getInList().size();
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      dataSize = 8 * getNotInList().size();
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.Fixed64Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.Fixed64Rules other = (de.danet.buf.validate.Fixed64Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getConst());
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLt());
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLte());
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGt());
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGte());
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.Fixed64Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.Fixed64Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Fixed64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.Fixed64Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * Fixed64Rules describes the constraints applied to `fixed64` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.Fixed64Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.Fixed64Rules)
+      de.danet.buf.validate.Fixed64RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed64Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.Fixed64Rules.class, de.danet.buf.validate.Fixed64Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.Fixed64Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0L;
+      in_ = emptyLongList();
+      notIn_ = emptyLongList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Fixed64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed64Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.Fixed64Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed64Rules build() {
+      de.danet.buf.validate.Fixed64Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Fixed64Rules buildPartial() {
+      de.danet.buf.validate.Fixed64Rules result = new de.danet.buf.validate.Fixed64Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.Fixed64Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.Fixed64Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.Fixed64Rules) {
+        return mergeFrom((de.danet.buf.validate.Fixed64Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.Fixed64Rules other) {
+      if (other == de.danet.buf.validate.Fixed64Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 9: {
+              const_ = input.readFixed64();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 9
+            case 17: {
+              lessThan_ = input.readFixed64();
+              lessThanCase_ = 2;
+              break;
+            } // case 17
+            case 25: {
+              lessThan_ = input.readFixed64();
+              lessThanCase_ = 3;
+              break;
+            } // case 25
+            case 33: {
+              greaterThan_ = input.readFixed64();
+              greaterThanCase_ = 4;
+              break;
+            } // case 33
+            case 41: {
+              greaterThan_ = input.readFixed64();
+              greaterThanCase_ = 5;
+              break;
+            } // case 41
+            case 49: {
+              long v = input.readFixed64();
+              ensureInIsMutable();
+              in_.addLong(v);
+              break;
+            } // case 49
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureInIsMutable(alloc / 8);
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addLong(input.readFixed64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 57: {
+              long v = input.readFixed64();
+              ensureNotInIsMutable();
+              notIn_.addLong(v);
+              break;
+            } // case 57
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureNotInIsMutable(alloc / 8);
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addLong(input.readFixed64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private long const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must equal 42
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional fixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must equal 42
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional fixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public long getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must equal 42
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional fixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(long value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must equal 42
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional fixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be less than 10
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be less than 10
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public long getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be less than 10
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(long value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be less than 10
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be less than or equal to 10
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be less than or equal to 10
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public long getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be less than or equal to 10
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(long value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be less than or equal to 10
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be greater than 5 [fixed64.gt]
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be greater than 5 [fixed64.gt]
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public long getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be greater than 5 [fixed64.gt]
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(long value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be greater than 5 [fixed64.gt]
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be greater than or equal to 5 [fixed64.gte]
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be greater than or equal to 5 [fixed64.gte]
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public long getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be greater than or equal to 5 [fixed64.gte]
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(long value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be greater than or equal to 5 [fixed64.gte]
+     *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+     *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+     *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>fixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList in_ = emptyLongList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    private void ensureInIsMutable(int capacity) {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_, capacity);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Long>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public long getIn(int index) {
+      return in_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, long value) {
+
+      ensureInIsMutable();
+      in_.setLong(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(long value) {
+
+      ensureInIsMutable();
+      in_.addLong(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList notIn_ = emptyLongList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    private void ensureNotInIsMutable(int capacity) {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_, capacity);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Long>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public long getNotIn(int index) {
+      return notIn_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, long value) {
+
+      ensureNotInIsMutable();
+      notIn_.setLong(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(long value) {
+
+      ensureNotInIsMutable();
+      notIn_.addLong(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.Fixed64Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.Fixed64Rules)
+  private static final de.danet.buf.validate.Fixed64Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.Fixed64Rules();
+  }
+
+  public static de.danet.buf.validate.Fixed64Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Fixed64Rules>
+      PARSER = new com.google.protobuf.AbstractParser<Fixed64Rules>() {
+    @java.lang.Override
+    public Fixed64Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<Fixed64Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Fixed64Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.Fixed64Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/Fixed64RulesOrBuilder.java b/gen/java/de/danet/buf/validate/Fixed64RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e0dcc2c5a08104c69da1d55d1b4bd667c2ce0bf
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Fixed64RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface Fixed64RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.Fixed64Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must equal 42
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional fixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must equal 42
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional fixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  long getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be less than 10
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be less than 10
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  long getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be less than or equal to 10
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be less than or equal to 10
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  long getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be greater than 5 [fixed64.gt]
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+   *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+   *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be greater than 5 [fixed64.gt]
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [fixed64.gt_lt]
+   *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
+   *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  long getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be greater than or equal to 5 [fixed64.gte]
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+   *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+   *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be greater than or equal to 5 [fixed64.gte]
+   *   fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
+   *   fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
+   *   fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>fixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  long getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Long> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  long getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Long> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated fixed64 value = 1 (buf.validate.field).fixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated fixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  long getNotIn(int index);
+
+  de.danet.buf.validate.Fixed64Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.Fixed64Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/FloatRules.java b/gen/java/de/danet/buf/validate/FloatRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..36986c88c9e7268f9e398a1e410d94eb5d5a78da
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/FloatRules.java
@@ -0,0 +1,2211 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * FloatRules describes the constraints applied to `float` values. These
+ * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.FloatRules}
+ */
+public final class FloatRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.FloatRules)
+    FloatRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use FloatRules.newBuilder() to construct.
+  private FloatRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private FloatRules() {
+    in_ = emptyFloatList();
+    notIn_ = emptyFloatList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new FloatRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FloatRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FloatRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.FloatRules.class, de.danet.buf.validate.FloatRules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private float const_ = 0F;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must equal 42.0
+   *   float value = 1 [(buf.validate.field).float.const = 42.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional float const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must equal 42.0
+   *   float value = 1 [(buf.validate.field).float.const = 42.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional float const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public float getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be less than 10.0
+   *   float value = 1 [(buf.validate.field).float.lt = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be less than 10.0
+   *   float value = 1 [(buf.validate.field).float.lt = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public float getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Float) lessThan_;
+    }
+    return 0F;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be less than or equal to 10.0
+   *   float value = 1 [(buf.validate.field).float.lte = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be less than or equal to 10.0
+   *   float value = 1 [(buf.validate.field).float.lte = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public float getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Float) lessThan_;
+    }
+    return 0F;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be greater than 5.0 [float.gt]
+   *   float value = 1 [(buf.validate.field).float.gt = 5.0];
+   *
+   *   // value must be greater than 5 and less than 10.0 [float.gt_lt]
+   *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+   *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be greater than 5.0 [float.gt]
+   *   float value = 1 [(buf.validate.field).float.gt = 5.0];
+   *
+   *   // value must be greater than 5 and less than 10.0 [float.gt_lt]
+   *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+   *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public float getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Float) greaterThan_;
+    }
+    return 0F;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be greater than or equal to 5.0 [float.gte]
+   *   float value = 1 [(buf.validate.field).float.gte = 5.0];
+   *
+   *   // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+   *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+   *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be greater than or equal to 5.0 [float.gte]
+   *   float value = 1 [(buf.validate.field).float.gte = 5.0];
+   *
+   *   // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+   *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+   *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public float getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Float) greaterThan_;
+    }
+    return 0F;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.FloatList in_ =
+      emptyFloatList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Float>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public float getIn(int index) {
+    return in_.getFloat(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.FloatList notIn_ =
+      emptyFloatList();
+  /**
+   * <pre>
+   * `in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Float>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public float getNotIn(int index) {
+    return notIn_.getFloat(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  public static final int FINITE_FIELD_NUMBER = 8;
+  private boolean finite_ = false;
+  /**
+   * <pre>
+   * `finite` requires the field value to be finite. If the field value is
+   * infinite or NaN, an error message is generated.
+   * </pre>
+   *
+   * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+   * @return The finite.
+   */
+  @java.lang.Override
+  public boolean getFinite() {
+    return finite_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeFloat(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeFloat(
+          2, (float)((java.lang.Float) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeFloat(
+          3, (float)((java.lang.Float) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeFloat(
+          4, (float)((java.lang.Float) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeFloat(
+          5, (float)((java.lang.Float) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeFloatNoTag(in_.getFloat(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeFloatNoTag(notIn_.getFloat(i));
+    }
+    if (finite_ != false) {
+      output.writeBool(8, finite_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFloatSize(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFloatSize(
+            2, (float)((java.lang.Float) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFloatSize(
+            3, (float)((java.lang.Float) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFloatSize(
+            4, (float)((java.lang.Float) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeFloatSize(
+            5, (float)((java.lang.Float) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      dataSize = 4 * getInList().size();
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      dataSize = 4 * getNotInList().size();
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    if (finite_ != false) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(8, finite_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.FloatRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.FloatRules other = (de.danet.buf.validate.FloatRules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (java.lang.Float.floatToIntBits(getConst())
+          != java.lang.Float.floatToIntBits(
+              other.getConst())) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (getFinite()
+        != other.getFinite()) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (java.lang.Float.floatToIntBits(getLt())
+            != java.lang.Float.floatToIntBits(
+                other.getLt())) return false;
+        break;
+      case 3:
+        if (java.lang.Float.floatToIntBits(getLte())
+            != java.lang.Float.floatToIntBits(
+                other.getLte())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (java.lang.Float.floatToIntBits(getGt())
+            != java.lang.Float.floatToIntBits(
+                other.getGt())) return false;
+        break;
+      case 5:
+        if (java.lang.Float.floatToIntBits(getGte())
+            != java.lang.Float.floatToIntBits(
+                other.getGte())) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getConst());
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    hash = (37 * hash) + FINITE_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+        getFinite());
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + java.lang.Float.floatToIntBits(
+            getLt());
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + java.lang.Float.floatToIntBits(
+            getLte());
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + java.lang.Float.floatToIntBits(
+            getGt());
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + java.lang.Float.floatToIntBits(
+            getGte());
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.FloatRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.FloatRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.FloatRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.FloatRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.FloatRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * FloatRules describes the constraints applied to `float` values. These
+   * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.FloatRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.FloatRules)
+      de.danet.buf.validate.FloatRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FloatRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FloatRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.FloatRules.class, de.danet.buf.validate.FloatRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.FloatRules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0F;
+      in_ = emptyFloatList();
+      notIn_ = emptyFloatList();
+      finite_ = false;
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_FloatRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.FloatRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.FloatRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.FloatRules build() {
+      de.danet.buf.validate.FloatRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.FloatRules buildPartial() {
+      de.danet.buf.validate.FloatRules result = new de.danet.buf.validate.FloatRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.FloatRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      if (((from_bitField0_ & 0x00000080) != 0)) {
+        result.finite_ = finite_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.FloatRules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.FloatRules) {
+        return mergeFrom((de.danet.buf.validate.FloatRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.FloatRules other) {
+      if (other == de.danet.buf.validate.FloatRules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      if (other.getFinite() != false) {
+        setFinite(other.getFinite());
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 13: {
+              const_ = input.readFloat();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 13
+            case 21: {
+              lessThan_ = input.readFloat();
+              lessThanCase_ = 2;
+              break;
+            } // case 21
+            case 29: {
+              lessThan_ = input.readFloat();
+              lessThanCase_ = 3;
+              break;
+            } // case 29
+            case 37: {
+              greaterThan_ = input.readFloat();
+              greaterThanCase_ = 4;
+              break;
+            } // case 37
+            case 45: {
+              greaterThan_ = input.readFloat();
+              greaterThanCase_ = 5;
+              break;
+            } // case 45
+            case 53: {
+              float v = input.readFloat();
+              ensureInIsMutable();
+              in_.addFloat(v);
+              break;
+            } // case 53
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureInIsMutable(alloc / 4);
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addFloat(input.readFloat());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 61: {
+              float v = input.readFloat();
+              ensureNotInIsMutable();
+              notIn_.addFloat(v);
+              break;
+            } // case 61
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureNotInIsMutable(alloc / 4);
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addFloat(input.readFloat());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            case 64: {
+              finite_ = input.readBool();
+              bitField0_ |= 0x00000080;
+              break;
+            } // case 64
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private float const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must equal 42.0
+     *   float value = 1 [(buf.validate.field).float.const = 42.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional float const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must equal 42.0
+     *   float value = 1 [(buf.validate.field).float.const = 42.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional float const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public float getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must equal 42.0
+     *   float value = 1 [(buf.validate.field).float.const = 42.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional float const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(float value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must equal 42.0
+     *   float value = 1 [(buf.validate.field).float.const = 42.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional float const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0F;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be less than 10.0
+     *   float value = 1 [(buf.validate.field).float.lt = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be less than 10.0
+     *   float value = 1 [(buf.validate.field).float.lt = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public float getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Float) lessThan_;
+      }
+      return 0F;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be less than 10.0
+     *   float value = 1 [(buf.validate.field).float.lt = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(float value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be less than 10.0
+     *   float value = 1 [(buf.validate.field).float.lt = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be less than or equal to 10.0
+     *   float value = 1 [(buf.validate.field).float.lte = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be less than or equal to 10.0
+     *   float value = 1 [(buf.validate.field).float.lte = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public float getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Float) lessThan_;
+      }
+      return 0F;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be less than or equal to 10.0
+     *   float value = 1 [(buf.validate.field).float.lte = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(float value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be less than or equal to 10.0
+     *   float value = 1 [(buf.validate.field).float.lte = 10.0];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be greater than 5.0 [float.gt]
+     *   float value = 1 [(buf.validate.field).float.gt = 5.0];
+     *
+     *   // value must be greater than 5 and less than 10.0 [float.gt_lt]
+     *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+     *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be greater than 5.0 [float.gt]
+     *   float value = 1 [(buf.validate.field).float.gt = 5.0];
+     *
+     *   // value must be greater than 5 and less than 10.0 [float.gt_lt]
+     *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+     *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public float getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Float) greaterThan_;
+      }
+      return 0F;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be greater than 5.0 [float.gt]
+     *   float value = 1 [(buf.validate.field).float.gt = 5.0];
+     *
+     *   // value must be greater than 5 and less than 10.0 [float.gt_lt]
+     *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+     *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(float value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be greater than 5.0 [float.gt]
+     *   float value = 1 [(buf.validate.field).float.gt = 5.0];
+     *
+     *   // value must be greater than 5 and less than 10.0 [float.gt_lt]
+     *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+     *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be greater than or equal to 5.0 [float.gte]
+     *   float value = 1 [(buf.validate.field).float.gte = 5.0];
+     *
+     *   // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+     *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+     *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be greater than or equal to 5.0 [float.gte]
+     *   float value = 1 [(buf.validate.field).float.gte = 5.0];
+     *
+     *   // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+     *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+     *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public float getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Float) greaterThan_;
+      }
+      return 0F;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be greater than or equal to 5.0 [float.gte]
+     *   float value = 1 [(buf.validate.field).float.gte = 5.0];
+     *
+     *   // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+     *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+     *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(float value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be greater than or equal to 5.0 [float.gte]
+     *   float value = 1 [(buf.validate.field).float.gte = 5.0];
+     *
+     *   // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+     *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+     *
+     *   // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+     *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>float gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.FloatList in_ = emptyFloatList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    private void ensureInIsMutable(int capacity) {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_, capacity);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Float>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public float getIn(int index) {
+      return in_.getFloat(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, float value) {
+
+      ensureInIsMutable();
+      in_.setFloat(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(float value) {
+
+      ensureInIsMutable();
+      in_.addFloat(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Float> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyFloatList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.FloatList notIn_ = emptyFloatList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    private void ensureNotInIsMutable(int capacity) {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_, capacity);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Float>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public float getNotIn(int index) {
+      return notIn_.getFloat(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, float value) {
+
+      ensureNotInIsMutable();
+      notIn_.setFloat(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(float value) {
+
+      ensureNotInIsMutable();
+      notIn_.addFloat(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Float> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyFloat {
+     *   // value must not be in list [1.0, 2.0, 3.0]
+     *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyFloatList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+
+    private boolean finite_ ;
+    /**
+     * <pre>
+     * `finite` requires the field value to be finite. If the field value is
+     * infinite or NaN, an error message is generated.
+     * </pre>
+     *
+     * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+     * @return The finite.
+     */
+    @java.lang.Override
+    public boolean getFinite() {
+      return finite_;
+    }
+    /**
+     * <pre>
+     * `finite` requires the field value to be finite. If the field value is
+     * infinite or NaN, an error message is generated.
+     * </pre>
+     *
+     * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The finite to set.
+     * @return This builder for chaining.
+     */
+    public Builder setFinite(boolean value) {
+
+      finite_ = value;
+      bitField0_ |= 0x00000080;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `finite` requires the field value to be finite. If the field value is
+     * infinite or NaN, an error message is generated.
+     * </pre>
+     *
+     * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearFinite() {
+      bitField0_ = (bitField0_ & ~0x00000080);
+      finite_ = false;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.FloatRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.FloatRules)
+  private static final de.danet.buf.validate.FloatRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.FloatRules();
+  }
+
+  public static de.danet.buf.validate.FloatRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<FloatRules>
+      PARSER = new com.google.protobuf.AbstractParser<FloatRules>() {
+    @java.lang.Override
+    public FloatRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<FloatRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<FloatRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.FloatRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/FloatRulesOrBuilder.java b/gen/java/de/danet/buf/validate/FloatRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..c584db76d2940c37db2759c7b2a98d4d8c2933dd
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/FloatRulesOrBuilder.java
@@ -0,0 +1,352 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface FloatRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.FloatRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must equal 42.0
+   *   float value = 1 [(buf.validate.field).float.const = 42.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional float const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must equal 42.0
+   *   float value = 1 [(buf.validate.field).float.const = 42.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional float const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  float getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be less than 10.0
+   *   float value = 1 [(buf.validate.field).float.lt = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be less than 10.0
+   *   float value = 1 [(buf.validate.field).float.lt = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  float getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be less than or equal to 10.0
+   *   float value = 1 [(buf.validate.field).float.lte = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be less than or equal to 10.0
+   *   float value = 1 [(buf.validate.field).float.lte = 10.0];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  float getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be greater than 5.0 [float.gt]
+   *   float value = 1 [(buf.validate.field).float.gt = 5.0];
+   *
+   *   // value must be greater than 5 and less than 10.0 [float.gt_lt]
+   *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+   *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be greater than 5.0 [float.gt]
+   *   float value = 1 [(buf.validate.field).float.gt = 5.0];
+   *
+   *   // value must be greater than 5 and less than 10.0 [float.gt_lt]
+   *   float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
+   *   float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  float getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be greater than or equal to 5.0 [float.gte]
+   *   float value = 1 [(buf.validate.field).float.gte = 5.0];
+   *
+   *   // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+   *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+   *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be greater than or equal to 5.0 [float.gte]
+   *   float value = 1 [(buf.validate.field).float.gte = 5.0];
+   *
+   *   // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
+   *   float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
+   *
+   *   // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
+   *   float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>float gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  float getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Float> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  float getIn(int index);
+
+  /**
+   * <pre>
+   * `in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Float> getNotInList();
+  /**
+   * <pre>
+   * `in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyFloat {
+   *   // value must not be in list [1.0, 2.0, 3.0]
+   *   repeated float value = 1 (buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated float not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  float getNotIn(int index);
+
+  /**
+   * <pre>
+   * `finite` requires the field value to be finite. If the field value is
+   * infinite or NaN, an error message is generated.
+   * </pre>
+   *
+   * <code>bool finite = 8 [json_name = "finite", (.buf.validate.priv.field) = { ... }</code>
+   * @return The finite.
+   */
+  boolean getFinite();
+
+  de.danet.buf.validate.FloatRules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.FloatRules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/Int32Rules.java b/gen/java/de/danet/buf/validate/Int32Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..68a6e6d92b3b6b42d0385fce95026a034d855954
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Int32Rules.java
@@ -0,0 +1,2106 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * Int32Rules describes the constraints applied to `int32` values. These
+ * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.Int32Rules}
+ */
+public final class Int32Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.Int32Rules)
+    Int32RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use Int32Rules.newBuilder() to construct.
+  private Int32Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private Int32Rules() {
+    in_ = emptyIntList();
+    notIn_ = emptyIntList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new Int32Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int32Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int32Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.Int32Rules.class, de.danet.buf.validate.Int32Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private int const_ = 0;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must equal 42
+   *   int32 value = 1 [(buf.validate.field).int32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must equal 42
+   *   int32 value = 1 [(buf.validate.field).int32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public int getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be less than 10
+   *   int32 value = 1 [(buf.validate.field).int32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be less than 10
+   *   int32 value = 1 [(buf.validate.field).int32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public int getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be less than or equal to 10
+   *   int32 value = 1 [(buf.validate.field).int32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be less than or equal to 10
+   *   int32 value = 1 [(buf.validate.field).int32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public int getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be greater than 5 [int32.gt]
+   *   int32 value = 1 [(buf.validate.field).int32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [int32.gt_lt]
+   *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+   *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be greater than 5 [int32.gt]
+   *   int32 value = 1 [(buf.validate.field).int32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [int32.gt_lt]
+   *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+   *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public int getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified value
+   * (exclusive). If the value of `gte` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be greater than or equal to 5 [int32.gte]
+   *   int32 value = 1 [(buf.validate.field).int32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+   *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+   *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified value
+   * (exclusive). If the value of `gte` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be greater than or equal to 5 [int32.gte]
+   *   int32 value = 1 [(buf.validate.field).int32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+   *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+   *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public int getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList in_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public int getIn(int index) {
+    return in_.getInt(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList notIn_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public int getNotIn(int index) {
+    return notIn_.getInt(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeInt32(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeInt32(
+          2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeInt32(
+          3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeInt32(
+          4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeInt32(
+          5, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeInt32NoTag(in_.getInt(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeInt32NoTag(notIn_.getInt(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(
+            2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(
+            3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(
+            4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(
+            5, (int)((java.lang.Integer) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeInt32SizeNoTag(in_.getInt(i));
+      }
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeInt32SizeNoTag(notIn_.getInt(i));
+      }
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.Int32Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.Int32Rules other = (de.danet.buf.validate.Int32Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst();
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + getLt();
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + getLte();
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + getGt();
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + getGte();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.Int32Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.Int32Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.Int32Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Int32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.Int32Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * Int32Rules describes the constraints applied to `int32` values. These
+   * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.Int32Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.Int32Rules)
+      de.danet.buf.validate.Int32RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int32Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.Int32Rules.class, de.danet.buf.validate.Int32Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.Int32Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0;
+      in_ = emptyIntList();
+      notIn_ = emptyIntList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Int32Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.Int32Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Int32Rules build() {
+      de.danet.buf.validate.Int32Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Int32Rules buildPartial() {
+      de.danet.buf.validate.Int32Rules result = new de.danet.buf.validate.Int32Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.Int32Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.Int32Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.Int32Rules) {
+        return mergeFrom((de.danet.buf.validate.Int32Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.Int32Rules other) {
+      if (other == de.danet.buf.validate.Int32Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              const_ = input.readInt32();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              lessThan_ = input.readInt32();
+              lessThanCase_ = 2;
+              break;
+            } // case 16
+            case 24: {
+              lessThan_ = input.readInt32();
+              lessThanCase_ = 3;
+              break;
+            } // case 24
+            case 32: {
+              greaterThan_ = input.readInt32();
+              greaterThanCase_ = 4;
+              break;
+            } // case 32
+            case 40: {
+              greaterThan_ = input.readInt32();
+              greaterThanCase_ = 5;
+              break;
+            } // case 40
+            case 48: {
+              int v = input.readInt32();
+              ensureInIsMutable();
+              in_.addInt(v);
+              break;
+            } // case 48
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addInt(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 56: {
+              int v = input.readInt32();
+              ensureNotInIsMutable();
+              notIn_.addInt(v);
+              break;
+            } // case 56
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureNotInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addInt(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private int const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must equal 42
+     *   int32 value = 1 [(buf.validate.field).int32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must equal 42
+     *   int32 value = 1 [(buf.validate.field).int32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public int getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must equal 42
+     *   int32 value = 1 [(buf.validate.field).int32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(int value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must equal 42
+     *   int32 value = 1 [(buf.validate.field).int32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be less than 10
+     *   int32 value = 1 [(buf.validate.field).int32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be less than 10
+     *   int32 value = 1 [(buf.validate.field).int32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public int getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be less than 10
+     *   int32 value = 1 [(buf.validate.field).int32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(int value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be less than 10
+     *   int32 value = 1 [(buf.validate.field).int32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be less than or equal to 10
+     *   int32 value = 1 [(buf.validate.field).int32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be less than or equal to 10
+     *   int32 value = 1 [(buf.validate.field).int32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public int getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be less than or equal to 10
+     *   int32 value = 1 [(buf.validate.field).int32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(int value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be less than or equal to 10
+     *   int32 value = 1 [(buf.validate.field).int32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be greater than 5 [int32.gt]
+     *   int32 value = 1 [(buf.validate.field).int32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [int32.gt_lt]
+     *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+     *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be greater than 5 [int32.gt]
+     *   int32 value = 1 [(buf.validate.field).int32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [int32.gt_lt]
+     *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+     *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public int getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be greater than 5 [int32.gt]
+     *   int32 value = 1 [(buf.validate.field).int32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [int32.gt_lt]
+     *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+     *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(int value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be greater than 5 [int32.gt]
+     *   int32 value = 1 [(buf.validate.field).int32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [int32.gt_lt]
+     *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+     *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified value
+     * (exclusive). If the value of `gte` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be greater than or equal to 5 [int32.gte]
+     *   int32 value = 1 [(buf.validate.field).int32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+     *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+     *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified value
+     * (exclusive). If the value of `gte` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be greater than or equal to 5 [int32.gte]
+     *   int32 value = 1 [(buf.validate.field).int32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+     *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+     *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public int getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified value
+     * (exclusive). If the value of `gte` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be greater than or equal to 5 [int32.gte]
+     *   int32 value = 1 [(buf.validate.field).int32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+     *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+     *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(int value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified value
+     * (exclusive). If the value of `gte` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be greater than or equal to 5 [int32.gte]
+     *   int32 value = 1 [(buf.validate.field).int32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+     *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+     *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList in_ = emptyIntList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Integer>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public int getIn(int index) {
+      return in_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, int value) {
+
+      ensureInIsMutable();
+      in_.setInt(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(int value) {
+
+      ensureInIsMutable();
+      in_.addInt(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList notIn_ = emptyIntList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Integer>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public int getNotIn(int index) {
+      return notIn_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, int value) {
+
+      ensureNotInIsMutable();
+      notIn_.setInt(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(int value) {
+
+      ensureNotInIsMutable();
+      notIn_.addInt(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MyInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.Int32Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.Int32Rules)
+  private static final de.danet.buf.validate.Int32Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.Int32Rules();
+  }
+
+  public static de.danet.buf.validate.Int32Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Int32Rules>
+      PARSER = new com.google.protobuf.AbstractParser<Int32Rules>() {
+    @java.lang.Override
+    public Int32Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<Int32Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Int32Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.Int32Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/Int32RulesOrBuilder.java b/gen/java/de/danet/buf/validate/Int32RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb08412becb78078c208f4eff57d357bacec1c9c
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Int32RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface Int32RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.Int32Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must equal 42
+   *   int32 value = 1 [(buf.validate.field).int32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must equal 42
+   *   int32 value = 1 [(buf.validate.field).int32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  int getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be less than 10
+   *   int32 value = 1 [(buf.validate.field).int32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be less than 10
+   *   int32 value = 1 [(buf.validate.field).int32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  int getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be less than or equal to 10
+   *   int32 value = 1 [(buf.validate.field).int32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be less than or equal to 10
+   *   int32 value = 1 [(buf.validate.field).int32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  int getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be greater than 5 [int32.gt]
+   *   int32 value = 1 [(buf.validate.field).int32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [int32.gt_lt]
+   *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+   *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be greater than 5 [int32.gt]
+   *   int32 value = 1 [(buf.validate.field).int32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [int32.gt_lt]
+   *   int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
+   *   int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  int getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified value
+   * (exclusive). If the value of `gte` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be greater than or equal to 5 [int32.gte]
+   *   int32 value = 1 [(buf.validate.field).int32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+   *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+   *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified value
+   * (exclusive). If the value of `gte` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be greater than or equal to 5 [int32.gte]
+   *   int32 value = 1 [(buf.validate.field).int32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
+   *   int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
+   *   int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  int getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Integer> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  int getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Integer> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MyInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int32 value = 1 (buf.validate.field).int32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  int getNotIn(int index);
+
+  de.danet.buf.validate.Int32Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.Int32Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/Int64Rules.java b/gen/java/de/danet/buf/validate/Int64Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c739dc7d2ab138364a07977dcb9ea471a43f938
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Int64Rules.java
@@ -0,0 +1,2111 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * Int64Rules describes the constraints applied to `int64` values. These
+ * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.Int64Rules}
+ */
+public final class Int64Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.Int64Rules)
+    Int64RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use Int64Rules.newBuilder() to construct.
+  private Int64Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private Int64Rules() {
+    in_ = emptyLongList();
+    notIn_ = emptyLongList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new Int64Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int64Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int64Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.Int64Rules.class, de.danet.buf.validate.Int64Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private long const_ = 0L;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must equal 42
+   *   int64 value = 1 [(buf.validate.field).int64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must equal 42
+   *   int64 value = 1 [(buf.validate.field).int64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public long getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be less than 10
+   *   int64 value = 1 [(buf.validate.field).int64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be less than 10
+   *   int64 value = 1 [(buf.validate.field).int64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public long getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be less than or equal to 10
+   *   int64 value = 1 [(buf.validate.field).int64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be less than or equal to 10
+   *   int64 value = 1 [(buf.validate.field).int64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public long getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be greater than 5 [int64.gt]
+   *   int64 value = 1 [(buf.validate.field).int64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [int64.gt_lt]
+   *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+   *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be greater than 5 [int64.gt]
+   *   int64 value = 1 [(buf.validate.field).int64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [int64.gt_lt]
+   *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+   *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public long getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be greater than or equal to 5 [int64.gte]
+   *   int64 value = 1 [(buf.validate.field).int64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+   *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+   *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be greater than or equal to 5 [int64.gte]
+   *   int64 value = 1 [(buf.validate.field).int64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+   *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+   *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public long getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList in_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public long getIn(int index) {
+    return in_.getLong(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList notIn_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public long getNotIn(int index) {
+    return notIn_.getLong(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeInt64(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeInt64(
+          2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeInt64(
+          3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeInt64(
+          4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeInt64(
+          5, (long)((java.lang.Long) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeInt64NoTag(in_.getLong(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeInt64NoTag(notIn_.getLong(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(
+            2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(
+            3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(
+            4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(
+            5, (long)((java.lang.Long) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeInt64SizeNoTag(in_.getLong(i));
+      }
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeInt64SizeNoTag(notIn_.getLong(i));
+      }
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.Int64Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.Int64Rules other = (de.danet.buf.validate.Int64Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getConst());
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLt());
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLte());
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGt());
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGte());
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.Int64Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.Int64Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.Int64Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Int64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.Int64Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * Int64Rules describes the constraints applied to `int64` values. These
+   * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.Int64Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.Int64Rules)
+      de.danet.buf.validate.Int64RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int64Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.Int64Rules.class, de.danet.buf.validate.Int64Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.Int64Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0L;
+      in_ = emptyLongList();
+      notIn_ = emptyLongList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_Int64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Int64Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.Int64Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Int64Rules build() {
+      de.danet.buf.validate.Int64Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Int64Rules buildPartial() {
+      de.danet.buf.validate.Int64Rules result = new de.danet.buf.validate.Int64Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.Int64Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.Int64Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.Int64Rules) {
+        return mergeFrom((de.danet.buf.validate.Int64Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.Int64Rules other) {
+      if (other == de.danet.buf.validate.Int64Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              const_ = input.readInt64();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              lessThan_ = input.readInt64();
+              lessThanCase_ = 2;
+              break;
+            } // case 16
+            case 24: {
+              lessThan_ = input.readInt64();
+              lessThanCase_ = 3;
+              break;
+            } // case 24
+            case 32: {
+              greaterThan_ = input.readInt64();
+              greaterThanCase_ = 4;
+              break;
+            } // case 32
+            case 40: {
+              greaterThan_ = input.readInt64();
+              greaterThanCase_ = 5;
+              break;
+            } // case 40
+            case 48: {
+              long v = input.readInt64();
+              ensureInIsMutable();
+              in_.addLong(v);
+              break;
+            } // case 48
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addLong(input.readInt64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 56: {
+              long v = input.readInt64();
+              ensureNotInIsMutable();
+              notIn_.addLong(v);
+              break;
+            } // case 56
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureNotInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addLong(input.readInt64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private long const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must equal 42
+     *   int64 value = 1 [(buf.validate.field).int64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must equal 42
+     *   int64 value = 1 [(buf.validate.field).int64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public long getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must equal 42
+     *   int64 value = 1 [(buf.validate.field).int64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(long value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must equal 42
+     *   int64 value = 1 [(buf.validate.field).int64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional int64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be less than 10
+     *   int64 value = 1 [(buf.validate.field).int64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be less than 10
+     *   int64 value = 1 [(buf.validate.field).int64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public long getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be less than 10
+     *   int64 value = 1 [(buf.validate.field).int64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(long value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be less than 10
+     *   int64 value = 1 [(buf.validate.field).int64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be less than or equal to 10
+     *   int64 value = 1 [(buf.validate.field).int64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be less than or equal to 10
+     *   int64 value = 1 [(buf.validate.field).int64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public long getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be less than or equal to 10
+     *   int64 value = 1 [(buf.validate.field).int64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(long value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be less than or equal to 10
+     *   int64 value = 1 [(buf.validate.field).int64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be greater than 5 [int64.gt]
+     *   int64 value = 1 [(buf.validate.field).int64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [int64.gt_lt]
+     *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+     *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be greater than 5 [int64.gt]
+     *   int64 value = 1 [(buf.validate.field).int64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [int64.gt_lt]
+     *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+     *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public long getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be greater than 5 [int64.gt]
+     *   int64 value = 1 [(buf.validate.field).int64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [int64.gt_lt]
+     *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+     *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(long value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be greater than 5 [int64.gt]
+     *   int64 value = 1 [(buf.validate.field).int64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [int64.gt_lt]
+     *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+     *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be greater than or equal to 5 [int64.gte]
+     *   int64 value = 1 [(buf.validate.field).int64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+     *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+     *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be greater than or equal to 5 [int64.gte]
+     *   int64 value = 1 [(buf.validate.field).int64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+     *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+     *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public long getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be greater than or equal to 5 [int64.gte]
+     *   int64 value = 1 [(buf.validate.field).int64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+     *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+     *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(long value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be greater than or equal to 5 [int64.gte]
+     *   int64 value = 1 [(buf.validate.field).int64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+     *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+     *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>int64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList in_ = emptyLongList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Long>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public long getIn(int index) {
+      return in_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, long value) {
+
+      ensureInIsMutable();
+      in_.setLong(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(long value) {
+
+      ensureInIsMutable();
+      in_.addLong(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList notIn_ = emptyLongList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Long>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public long getNotIn(int index) {
+      return notIn_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, long value) {
+
+      ensureNotInIsMutable();
+      notIn_.setLong(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(long value) {
+
+      ensureNotInIsMutable();
+      notIn_.addLong(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.Int64Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.Int64Rules)
+  private static final de.danet.buf.validate.Int64Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.Int64Rules();
+  }
+
+  public static de.danet.buf.validate.Int64Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Int64Rules>
+      PARSER = new com.google.protobuf.AbstractParser<Int64Rules>() {
+    @java.lang.Override
+    public Int64Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<Int64Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Int64Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.Int64Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/Int64RulesOrBuilder.java b/gen/java/de/danet/buf/validate/Int64RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..cac43e0399d76476304b2878ead75bbb1f07b260
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Int64RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface Int64RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.Int64Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must equal 42
+   *   int64 value = 1 [(buf.validate.field).int64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must equal 42
+   *   int64 value = 1 [(buf.validate.field).int64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional int64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  long getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be less than 10
+   *   int64 value = 1 [(buf.validate.field).int64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be less than 10
+   *   int64 value = 1 [(buf.validate.field).int64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  long getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be less than or equal to 10
+   *   int64 value = 1 [(buf.validate.field).int64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be less than or equal to 10
+   *   int64 value = 1 [(buf.validate.field).int64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  long getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be greater than 5 [int64.gt]
+   *   int64 value = 1 [(buf.validate.field).int64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [int64.gt_lt]
+   *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+   *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be greater than 5 [int64.gt]
+   *   int64 value = 1 [(buf.validate.field).int64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [int64.gt_lt]
+   *   int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
+   *   int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  long getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be greater than or equal to 5 [int64.gte]
+   *   int64 value = 1 [(buf.validate.field).int64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+   *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+   *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be greater than or equal to 5 [int64.gte]
+   *   int64 value = 1 [(buf.validate.field).int64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
+   *   int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
+   *   int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>int64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  long getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Long> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  long getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Long> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated int64 value = 1 (buf.validate.field).int64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated int64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  long getNotIn(int index);
+
+  de.danet.buf.validate.Int64Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.Int64Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/KnownRegex.java b/gen/java/de/danet/buf/validate/KnownRegex.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7d7087ccaf80460b89890ba5907c3afa3496b05
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/KnownRegex.java
@@ -0,0 +1,143 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * WellKnownRegex contain some well-known patterns.
+ * </pre>
+ *
+ * Protobuf enum {@code buf.validate.KnownRegex}
+ */
+public enum KnownRegex
+    implements com.google.protobuf.ProtocolMessageEnum {
+  /**
+   * <code>KNOWN_REGEX_UNSPECIFIED = 0;</code>
+   */
+  KNOWN_REGEX_UNSPECIFIED(0),
+  /**
+   * <pre>
+   * HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2).
+   * </pre>
+   *
+   * <code>KNOWN_REGEX_HTTP_HEADER_NAME = 1;</code>
+   */
+  KNOWN_REGEX_HTTP_HEADER_NAME(1),
+  /**
+   * <pre>
+   * HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4).
+   * </pre>
+   *
+   * <code>KNOWN_REGEX_HTTP_HEADER_VALUE = 2;</code>
+   */
+  KNOWN_REGEX_HTTP_HEADER_VALUE(2),
+  UNRECOGNIZED(-1),
+  ;
+
+  /**
+   * <code>KNOWN_REGEX_UNSPECIFIED = 0;</code>
+   */
+  public static final int KNOWN_REGEX_UNSPECIFIED_VALUE = 0;
+  /**
+   * <pre>
+   * HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2).
+   * </pre>
+   *
+   * <code>KNOWN_REGEX_HTTP_HEADER_NAME = 1;</code>
+   */
+  public static final int KNOWN_REGEX_HTTP_HEADER_NAME_VALUE = 1;
+  /**
+   * <pre>
+   * HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4).
+   * </pre>
+   *
+   * <code>KNOWN_REGEX_HTTP_HEADER_VALUE = 2;</code>
+   */
+  public static final int KNOWN_REGEX_HTTP_HEADER_VALUE_VALUE = 2;
+
+
+  public final int getNumber() {
+    if (this == UNRECOGNIZED) {
+      throw new java.lang.IllegalArgumentException(
+          "Can't get the number of an unknown enum value.");
+    }
+    return value;
+  }
+
+  /**
+   * @param value The numeric wire value of the corresponding enum entry.
+   * @return The enum associated with the given numeric wire value.
+   * @deprecated Use {@link #forNumber(int)} instead.
+   */
+  @java.lang.Deprecated
+  public static KnownRegex valueOf(int value) {
+    return forNumber(value);
+  }
+
+  /**
+   * @param value The numeric wire value of the corresponding enum entry.
+   * @return The enum associated with the given numeric wire value.
+   */
+  public static KnownRegex forNumber(int value) {
+    switch (value) {
+      case 0: return KNOWN_REGEX_UNSPECIFIED;
+      case 1: return KNOWN_REGEX_HTTP_HEADER_NAME;
+      case 2: return KNOWN_REGEX_HTTP_HEADER_VALUE;
+      default: return null;
+    }
+  }
+
+  public static com.google.protobuf.Internal.EnumLiteMap<KnownRegex>
+      internalGetValueMap() {
+    return internalValueMap;
+  }
+  private static final com.google.protobuf.Internal.EnumLiteMap<
+      KnownRegex> internalValueMap =
+        new com.google.protobuf.Internal.EnumLiteMap<KnownRegex>() {
+          public KnownRegex findValueByNumber(int number) {
+            return KnownRegex.forNumber(number);
+          }
+        };
+
+  public final com.google.protobuf.Descriptors.EnumValueDescriptor
+      getValueDescriptor() {
+    if (this == UNRECOGNIZED) {
+      throw new java.lang.IllegalStateException(
+          "Can't get the descriptor of an unrecognized enum value.");
+    }
+    return getDescriptor().getValues().get(ordinal());
+  }
+  public final com.google.protobuf.Descriptors.EnumDescriptor
+      getDescriptorForType() {
+    return getDescriptor();
+  }
+  public static final com.google.protobuf.Descriptors.EnumDescriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.getDescriptor().getEnumTypes().get(0);
+  }
+
+  private static final KnownRegex[] VALUES = values();
+
+  public static KnownRegex valueOf(
+      com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+    if (desc.getType() != getDescriptor()) {
+      throw new java.lang.IllegalArgumentException(
+        "EnumValueDescriptor is not for this type.");
+    }
+    if (desc.getIndex() == -1) {
+      return UNRECOGNIZED;
+    }
+    return VALUES[desc.getIndex()];
+  }
+
+  private final int value;
+
+  private KnownRegex(int value) {
+    this.value = value;
+  }
+
+  // @@protoc_insertion_point(enum_scope:buf.validate.KnownRegex)
+}
+
diff --git a/gen/java/de/danet/buf/validate/MapRules.java b/gen/java/de/danet/buf/validate/MapRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6ca208e542205f048a86cc9fda8c1a21528c516
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/MapRules.java
@@ -0,0 +1,1522 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * MapRules describe the constraints applied to `map` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.MapRules}
+ */
+public final class MapRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.MapRules)
+    MapRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use MapRules.newBuilder() to construct.
+  private MapRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private MapRules() {
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new MapRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MapRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MapRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.MapRules.class, de.danet.buf.validate.MapRules.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int MIN_PAIRS_FIELD_NUMBER = 1;
+  private long minPairs_ = 0L;
+  /**
+   * <pre>
+   *Specifies the minimum number of key-value pairs allowed. If the field has
+   * fewer key-value pairs than specified, an error message is generated.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The field `value` must have at least 2 key-value pairs.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.min_pairs = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_pairs = 1 [json_name = "minPairs", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minPairs field is set.
+   */
+  @java.lang.Override
+  public boolean hasMinPairs() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   *Specifies the minimum number of key-value pairs allowed. If the field has
+   * fewer key-value pairs than specified, an error message is generated.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The field `value` must have at least 2 key-value pairs.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.min_pairs = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_pairs = 1 [json_name = "minPairs", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minPairs.
+   */
+  @java.lang.Override
+  public long getMinPairs() {
+    return minPairs_;
+  }
+
+  public static final int MAX_PAIRS_FIELD_NUMBER = 2;
+  private long maxPairs_ = 0L;
+  /**
+   * <pre>
+   *Specifies the maximum number of key-value pairs allowed. If the field has
+   * more key-value pairs than specified, an error message is generated.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The field `value` must have at most 3 key-value pairs.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.max_pairs = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_pairs = 2 [json_name = "maxPairs", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxPairs field is set.
+   */
+  @java.lang.Override
+  public boolean hasMaxPairs() {
+    return ((bitField0_ & 0x00000002) != 0);
+  }
+  /**
+   * <pre>
+   *Specifies the maximum number of key-value pairs allowed. If the field has
+   * more key-value pairs than specified, an error message is generated.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The field `value` must have at most 3 key-value pairs.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.max_pairs = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_pairs = 2 [json_name = "maxPairs", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxPairs.
+   */
+  @java.lang.Override
+  public long getMaxPairs() {
+    return maxPairs_;
+  }
+
+  public static final int KEYS_FIELD_NUMBER = 4;
+  private de.danet.buf.validate.FieldConstraints keys_;
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to each key in the field.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The keys in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+   * @return Whether the keys field is set.
+   */
+  @java.lang.Override
+  public boolean hasKeys() {
+    return ((bitField0_ & 0x00000004) != 0);
+  }
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to each key in the field.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The keys in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+   * @return The keys.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.FieldConstraints getKeys() {
+    return keys_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : keys_;
+  }
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to each key in the field.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The keys in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.FieldConstraintsOrBuilder getKeysOrBuilder() {
+    return keys_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : keys_;
+  }
+
+  public static final int VALUES_FIELD_NUMBER = 5;
+  private de.danet.buf.validate.FieldConstraints values_;
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to the value of each key in the
+   * field. Message values will still have their validations evaluated unless
+   *skip is specified here.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The values in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+   *     string: {
+   *       min_len: 5
+   *       max_len: 20
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+   * @return Whether the values field is set.
+   */
+  @java.lang.Override
+  public boolean hasValues() {
+    return ((bitField0_ & 0x00000008) != 0);
+  }
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to the value of each key in the
+   * field. Message values will still have their validations evaluated unless
+   *skip is specified here.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The values in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+   *     string: {
+   *       min_len: 5
+   *       max_len: 20
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+   * @return The values.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.FieldConstraints getValues() {
+    return values_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : values_;
+  }
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to the value of each key in the
+   * field. Message values will still have their validations evaluated unless
+   *skip is specified here.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The values in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+   *     string: {
+   *       min_len: 5
+   *       max_len: 20
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.FieldConstraintsOrBuilder getValuesOrBuilder() {
+    return values_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : values_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeUInt64(1, minPairs_);
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      output.writeUInt64(2, maxPairs_);
+    }
+    if (((bitField0_ & 0x00000004) != 0)) {
+      output.writeMessage(4, getKeys());
+    }
+    if (((bitField0_ & 0x00000008) != 0)) {
+      output.writeMessage(5, getValues());
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(1, minPairs_);
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(2, maxPairs_);
+    }
+    if (((bitField0_ & 0x00000004) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(4, getKeys());
+    }
+    if (((bitField0_ & 0x00000008) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(5, getValues());
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.MapRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.MapRules other = (de.danet.buf.validate.MapRules) obj;
+
+    if (hasMinPairs() != other.hasMinPairs()) return false;
+    if (hasMinPairs()) {
+      if (getMinPairs()
+          != other.getMinPairs()) return false;
+    }
+    if (hasMaxPairs() != other.hasMaxPairs()) return false;
+    if (hasMaxPairs()) {
+      if (getMaxPairs()
+          != other.getMaxPairs()) return false;
+    }
+    if (hasKeys() != other.hasKeys()) return false;
+    if (hasKeys()) {
+      if (!getKeys()
+          .equals(other.getKeys())) return false;
+    }
+    if (hasValues() != other.hasValues()) return false;
+    if (hasValues()) {
+      if (!getValues()
+          .equals(other.getValues())) return false;
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasMinPairs()) {
+      hash = (37 * hash) + MIN_PAIRS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMinPairs());
+    }
+    if (hasMaxPairs()) {
+      hash = (37 * hash) + MAX_PAIRS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMaxPairs());
+    }
+    if (hasKeys()) {
+      hash = (37 * hash) + KEYS_FIELD_NUMBER;
+      hash = (53 * hash) + getKeys().hashCode();
+    }
+    if (hasValues()) {
+      hash = (37 * hash) + VALUES_FIELD_NUMBER;
+      hash = (53 * hash) + getValues().hashCode();
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.MapRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.MapRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.MapRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.MapRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.MapRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * MapRules describe the constraints applied to `map` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.MapRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.MapRules)
+      de.danet.buf.validate.MapRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MapRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MapRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.MapRules.class, de.danet.buf.validate.MapRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.MapRules.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+        getKeysFieldBuilder();
+        getValuesFieldBuilder();
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      minPairs_ = 0L;
+      maxPairs_ = 0L;
+      keys_ = null;
+      if (keysBuilder_ != null) {
+        keysBuilder_.dispose();
+        keysBuilder_ = null;
+      }
+      values_ = null;
+      if (valuesBuilder_ != null) {
+        valuesBuilder_.dispose();
+        valuesBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MapRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.MapRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.MapRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.MapRules build() {
+      de.danet.buf.validate.MapRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.MapRules buildPartial() {
+      de.danet.buf.validate.MapRules result = new de.danet.buf.validate.MapRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.MapRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.minPairs_ = minPairs_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.maxPairs_ = maxPairs_;
+        to_bitField0_ |= 0x00000002;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        result.keys_ = keysBuilder_ == null
+            ? keys_
+            : keysBuilder_.build();
+        to_bitField0_ |= 0x00000004;
+      }
+      if (((from_bitField0_ & 0x00000008) != 0)) {
+        result.values_ = valuesBuilder_ == null
+            ? values_
+            : valuesBuilder_.build();
+        to_bitField0_ |= 0x00000008;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.MapRules) {
+        return mergeFrom((de.danet.buf.validate.MapRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.MapRules other) {
+      if (other == de.danet.buf.validate.MapRules.getDefaultInstance()) return this;
+      if (other.hasMinPairs()) {
+        setMinPairs(other.getMinPairs());
+      }
+      if (other.hasMaxPairs()) {
+        setMaxPairs(other.getMaxPairs());
+      }
+      if (other.hasKeys()) {
+        mergeKeys(other.getKeys());
+      }
+      if (other.hasValues()) {
+        mergeValues(other.getValues());
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              minPairs_ = input.readUInt64();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              maxPairs_ = input.readUInt64();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 16
+            case 34: {
+              input.readMessage(
+                  getKeysFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              bitField0_ |= 0x00000004;
+              break;
+            } // case 34
+            case 42: {
+              input.readMessage(
+                  getValuesFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              bitField0_ |= 0x00000008;
+              break;
+            } // case 42
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private long minPairs_ ;
+    /**
+     * <pre>
+     *Specifies the minimum number of key-value pairs allowed. If the field has
+     * fewer key-value pairs than specified, an error message is generated.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The field `value` must have at least 2 key-value pairs.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.min_pairs = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_pairs = 1 [json_name = "minPairs", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the minPairs field is set.
+     */
+    @java.lang.Override
+    public boolean hasMinPairs() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     *Specifies the minimum number of key-value pairs allowed. If the field has
+     * fewer key-value pairs than specified, an error message is generated.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The field `value` must have at least 2 key-value pairs.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.min_pairs = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_pairs = 1 [json_name = "minPairs", (.buf.validate.priv.field) = { ... }</code>
+     * @return The minPairs.
+     */
+    @java.lang.Override
+    public long getMinPairs() {
+      return minPairs_;
+    }
+    /**
+     * <pre>
+     *Specifies the minimum number of key-value pairs allowed. If the field has
+     * fewer key-value pairs than specified, an error message is generated.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The field `value` must have at least 2 key-value pairs.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.min_pairs = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_pairs = 1 [json_name = "minPairs", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The minPairs to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMinPairs(long value) {
+
+      minPairs_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the minimum number of key-value pairs allowed. If the field has
+     * fewer key-value pairs than specified, an error message is generated.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The field `value` must have at least 2 key-value pairs.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.min_pairs = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_pairs = 1 [json_name = "minPairs", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMinPairs() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      minPairs_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long maxPairs_ ;
+    /**
+     * <pre>
+     *Specifies the maximum number of key-value pairs allowed. If the field has
+     * more key-value pairs than specified, an error message is generated.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The field `value` must have at most 3 key-value pairs.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.max_pairs = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_pairs = 2 [json_name = "maxPairs", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the maxPairs field is set.
+     */
+    @java.lang.Override
+    public boolean hasMaxPairs() {
+      return ((bitField0_ & 0x00000002) != 0);
+    }
+    /**
+     * <pre>
+     *Specifies the maximum number of key-value pairs allowed. If the field has
+     * more key-value pairs than specified, an error message is generated.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The field `value` must have at most 3 key-value pairs.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.max_pairs = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_pairs = 2 [json_name = "maxPairs", (.buf.validate.priv.field) = { ... }</code>
+     * @return The maxPairs.
+     */
+    @java.lang.Override
+    public long getMaxPairs() {
+      return maxPairs_;
+    }
+    /**
+     * <pre>
+     *Specifies the maximum number of key-value pairs allowed. If the field has
+     * more key-value pairs than specified, an error message is generated.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The field `value` must have at most 3 key-value pairs.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.max_pairs = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_pairs = 2 [json_name = "maxPairs", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The maxPairs to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMaxPairs(long value) {
+
+      maxPairs_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the maximum number of key-value pairs allowed. If the field has
+     * more key-value pairs than specified, an error message is generated.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The field `value` must have at most 3 key-value pairs.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.max_pairs = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_pairs = 2 [json_name = "maxPairs", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMaxPairs() {
+      bitField0_ = (bitField0_ & ~0x00000002);
+      maxPairs_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private de.danet.buf.validate.FieldConstraints keys_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder> keysBuilder_;
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     * @return Whether the keys field is set.
+     */
+    public boolean hasKeys() {
+      return ((bitField0_ & 0x00000004) != 0);
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     * @return The keys.
+     */
+    public de.danet.buf.validate.FieldConstraints getKeys() {
+      if (keysBuilder_ == null) {
+        return keys_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : keys_;
+      } else {
+        return keysBuilder_.getMessage();
+      }
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     */
+    public Builder setKeys(de.danet.buf.validate.FieldConstraints value) {
+      if (keysBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        keys_ = value;
+      } else {
+        keysBuilder_.setMessage(value);
+      }
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     */
+    public Builder setKeys(
+        de.danet.buf.validate.FieldConstraints.Builder builderForValue) {
+      if (keysBuilder_ == null) {
+        keys_ = builderForValue.build();
+      } else {
+        keysBuilder_.setMessage(builderForValue.build());
+      }
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     */
+    public Builder mergeKeys(de.danet.buf.validate.FieldConstraints value) {
+      if (keysBuilder_ == null) {
+        if (((bitField0_ & 0x00000004) != 0) &&
+          keys_ != null &&
+          keys_ != de.danet.buf.validate.FieldConstraints.getDefaultInstance()) {
+          getKeysBuilder().mergeFrom(value);
+        } else {
+          keys_ = value;
+        }
+      } else {
+        keysBuilder_.mergeFrom(value);
+      }
+      if (keys_ != null) {
+        bitField0_ |= 0x00000004;
+        onChanged();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     */
+    public Builder clearKeys() {
+      bitField0_ = (bitField0_ & ~0x00000004);
+      keys_ = null;
+      if (keysBuilder_ != null) {
+        keysBuilder_.dispose();
+        keysBuilder_ = null;
+      }
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     */
+    public de.danet.buf.validate.FieldConstraints.Builder getKeysBuilder() {
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return getKeysFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     */
+    public de.danet.buf.validate.FieldConstraintsOrBuilder getKeysOrBuilder() {
+      if (keysBuilder_ != null) {
+        return keysBuilder_.getMessageOrBuilder();
+      } else {
+        return keys_ == null ?
+            de.danet.buf.validate.FieldConstraints.getDefaultInstance() : keys_;
+      }
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to each key in the field.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The keys in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder> 
+        getKeysFieldBuilder() {
+      if (keysBuilder_ == null) {
+        keysBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder>(
+                getKeys(),
+                getParentForChildren(),
+                isClean());
+        keys_ = null;
+      }
+      return keysBuilder_;
+    }
+
+    private de.danet.buf.validate.FieldConstraints values_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder> valuesBuilder_;
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     * @return Whether the values field is set.
+     */
+    public boolean hasValues() {
+      return ((bitField0_ & 0x00000008) != 0);
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     * @return The values.
+     */
+    public de.danet.buf.validate.FieldConstraints getValues() {
+      if (valuesBuilder_ == null) {
+        return values_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : values_;
+      } else {
+        return valuesBuilder_.getMessage();
+      }
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     */
+    public Builder setValues(de.danet.buf.validate.FieldConstraints value) {
+      if (valuesBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        values_ = value;
+      } else {
+        valuesBuilder_.setMessage(value);
+      }
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     */
+    public Builder setValues(
+        de.danet.buf.validate.FieldConstraints.Builder builderForValue) {
+      if (valuesBuilder_ == null) {
+        values_ = builderForValue.build();
+      } else {
+        valuesBuilder_.setMessage(builderForValue.build());
+      }
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     */
+    public Builder mergeValues(de.danet.buf.validate.FieldConstraints value) {
+      if (valuesBuilder_ == null) {
+        if (((bitField0_ & 0x00000008) != 0) &&
+          values_ != null &&
+          values_ != de.danet.buf.validate.FieldConstraints.getDefaultInstance()) {
+          getValuesBuilder().mergeFrom(value);
+        } else {
+          values_ = value;
+        }
+      } else {
+        valuesBuilder_.mergeFrom(value);
+      }
+      if (values_ != null) {
+        bitField0_ |= 0x00000008;
+        onChanged();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     */
+    public Builder clearValues() {
+      bitField0_ = (bitField0_ & ~0x00000008);
+      values_ = null;
+      if (valuesBuilder_ != null) {
+        valuesBuilder_.dispose();
+        valuesBuilder_ = null;
+      }
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     */
+    public de.danet.buf.validate.FieldConstraints.Builder getValuesBuilder() {
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return getValuesFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     */
+    public de.danet.buf.validate.FieldConstraintsOrBuilder getValuesOrBuilder() {
+      if (valuesBuilder_ != null) {
+        return valuesBuilder_.getMessageOrBuilder();
+      } else {
+        return values_ == null ?
+            de.danet.buf.validate.FieldConstraints.getDefaultInstance() : values_;
+      }
+    }
+    /**
+     * <pre>
+     *Specifies the constraints to be applied to the value of each key in the
+     * field. Message values will still have their validations evaluated unless
+     *skip is specified here.
+     *
+     * ```proto
+     * message MyMap {
+     *   // The values in the field `value` must follow the specified constraints.
+     *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+     *     string: {
+     *       min_len: 5
+     *       max_len: 20
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder> 
+        getValuesFieldBuilder() {
+      if (valuesBuilder_ == null) {
+        valuesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder>(
+                getValues(),
+                getParentForChildren(),
+                isClean());
+        values_ = null;
+      }
+      return valuesBuilder_;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.MapRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.MapRules)
+  private static final de.danet.buf.validate.MapRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.MapRules();
+  }
+
+  public static de.danet.buf.validate.MapRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<MapRules>
+      PARSER = new com.google.protobuf.AbstractParser<MapRules>() {
+    @java.lang.Override
+    public MapRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<MapRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<MapRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.MapRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/MapRulesOrBuilder.java b/gen/java/de/danet/buf/validate/MapRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..53acbbb2422d6304dc00f1be2efff70ae0130ced
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/MapRulesOrBuilder.java
@@ -0,0 +1,212 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface MapRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.MapRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   *Specifies the minimum number of key-value pairs allowed. If the field has
+   * fewer key-value pairs than specified, an error message is generated.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The field `value` must have at least 2 key-value pairs.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.min_pairs = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_pairs = 1 [json_name = "minPairs", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minPairs field is set.
+   */
+  boolean hasMinPairs();
+  /**
+   * <pre>
+   *Specifies the minimum number of key-value pairs allowed. If the field has
+   * fewer key-value pairs than specified, an error message is generated.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The field `value` must have at least 2 key-value pairs.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.min_pairs = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_pairs = 1 [json_name = "minPairs", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minPairs.
+   */
+  long getMinPairs();
+
+  /**
+   * <pre>
+   *Specifies the maximum number of key-value pairs allowed. If the field has
+   * more key-value pairs than specified, an error message is generated.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The field `value` must have at most 3 key-value pairs.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.max_pairs = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_pairs = 2 [json_name = "maxPairs", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxPairs field is set.
+   */
+  boolean hasMaxPairs();
+  /**
+   * <pre>
+   *Specifies the maximum number of key-value pairs allowed. If the field has
+   * more key-value pairs than specified, an error message is generated.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The field `value` must have at most 3 key-value pairs.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.max_pairs = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_pairs = 2 [json_name = "maxPairs", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxPairs.
+   */
+  long getMaxPairs();
+
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to each key in the field.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The keys in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+   * @return Whether the keys field is set.
+   */
+  boolean hasKeys();
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to each key in the field.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The keys in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+   * @return The keys.
+   */
+  de.danet.buf.validate.FieldConstraints getKeys();
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to each key in the field.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The keys in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.keys = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints keys = 4 [json_name = "keys"];</code>
+   */
+  de.danet.buf.validate.FieldConstraintsOrBuilder getKeysOrBuilder();
+
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to the value of each key in the
+   * field. Message values will still have their validations evaluated unless
+   *skip is specified here.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The values in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+   *     string: {
+   *       min_len: 5
+   *       max_len: 20
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+   * @return Whether the values field is set.
+   */
+  boolean hasValues();
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to the value of each key in the
+   * field. Message values will still have their validations evaluated unless
+   *skip is specified here.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The values in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+   *     string: {
+   *       min_len: 5
+   *       max_len: 20
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+   * @return The values.
+   */
+  de.danet.buf.validate.FieldConstraints getValues();
+  /**
+   * <pre>
+   *Specifies the constraints to be applied to the value of each key in the
+   * field. Message values will still have their validations evaluated unless
+   *skip is specified here.
+   *
+   * ```proto
+   * message MyMap {
+   *   // The values in the field `value` must follow the specified constraints.
+   *   map&lt;string, string&gt; value = 1 [(buf.validate.field).map.values = {
+   *     string: {
+   *       min_len: 5
+   *       max_len: 20
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints values = 5 [json_name = "values"];</code>
+   */
+  de.danet.buf.validate.FieldConstraintsOrBuilder getValuesOrBuilder();
+}
diff --git a/gen/java/de/danet/buf/validate/MessageConstraints.java b/gen/java/de/danet/buf/validate/MessageConstraints.java
new file mode 100644
index 0000000000000000000000000000000000000000..8cb12c4f0933e3bfc3387a55bf079308fc33c287
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/MessageConstraints.java
@@ -0,0 +1,1371 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * MessageConstraints represents validation rules that are applied to the entire message.
+ * It includes disabling options and a list of Constraint messages representing Common Expression Language (CEL) validation rules.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.MessageConstraints}
+ */
+public final class MessageConstraints extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.MessageConstraints)
+    MessageConstraintsOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use MessageConstraints.newBuilder() to construct.
+  private MessageConstraints(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private MessageConstraints() {
+    cel_ = java.util.Collections.emptyList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new MessageConstraints();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MessageConstraints_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MessageConstraints_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.MessageConstraints.class, de.danet.buf.validate.MessageConstraints.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int DISABLED_FIELD_NUMBER = 1;
+  private boolean disabled_ = false;
+  /**
+   * <pre>
+   * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
+   * This includes any fields within the message that would otherwise support validation.
+   *
+   * ```proto
+   * message MyMessage {
+   *   // validation will be bypassed for this message
+   *   option (buf.validate.message).disabled = true;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool disabled = 1 [json_name = "disabled"];</code>
+   * @return Whether the disabled field is set.
+   */
+  @java.lang.Override
+  public boolean hasDisabled() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
+   * This includes any fields within the message that would otherwise support validation.
+   *
+   * ```proto
+   * message MyMessage {
+   *   // validation will be bypassed for this message
+   *   option (buf.validate.message).disabled = true;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool disabled = 1 [json_name = "disabled"];</code>
+   * @return The disabled.
+   */
+  @java.lang.Override
+  public boolean getDisabled() {
+    return disabled_;
+  }
+
+  public static final int CEL_FIELD_NUMBER = 3;
+  @SuppressWarnings("serial")
+  private java.util.List<de.danet.buf.validate.Constraint> cel_;
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public java.util.List<de.danet.buf.validate.Constraint> getCelList() {
+    return cel_;
+  }
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public java.util.List<? extends de.danet.buf.validate.ConstraintOrBuilder> 
+      getCelOrBuilderList() {
+    return cel_;
+  }
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public int getCelCount() {
+    return cel_.size();
+  }
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Constraint getCel(int index) {
+    return cel_.get(index);
+  }
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.ConstraintOrBuilder getCelOrBuilder(
+      int index) {
+    return cel_.get(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeBool(1, disabled_);
+    }
+    for (int i = 0; i < cel_.size(); i++) {
+      output.writeMessage(3, cel_.get(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(1, disabled_);
+    }
+    for (int i = 0; i < cel_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(3, cel_.get(i));
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.MessageConstraints)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.MessageConstraints other = (de.danet.buf.validate.MessageConstraints) obj;
+
+    if (hasDisabled() != other.hasDisabled()) return false;
+    if (hasDisabled()) {
+      if (getDisabled()
+          != other.getDisabled()) return false;
+    }
+    if (!getCelList()
+        .equals(other.getCelList())) return false;
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasDisabled()) {
+      hash = (37 * hash) + DISABLED_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getDisabled());
+    }
+    if (getCelCount() > 0) {
+      hash = (37 * hash) + CEL_FIELD_NUMBER;
+      hash = (53 * hash) + getCelList().hashCode();
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.MessageConstraints parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.MessageConstraints parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.MessageConstraints parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.MessageConstraints parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.MessageConstraints prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * MessageConstraints represents validation rules that are applied to the entire message.
+   * It includes disabling options and a list of Constraint messages representing Common Expression Language (CEL) validation rules.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.MessageConstraints}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.MessageConstraints)
+      de.danet.buf.validate.MessageConstraintsOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MessageConstraints_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MessageConstraints_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.MessageConstraints.class, de.danet.buf.validate.MessageConstraints.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.MessageConstraints.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      disabled_ = false;
+      if (celBuilder_ == null) {
+        cel_ = java.util.Collections.emptyList();
+      } else {
+        cel_ = null;
+        celBuilder_.clear();
+      }
+      bitField0_ = (bitField0_ & ~0x00000002);
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_MessageConstraints_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.MessageConstraints getDefaultInstanceForType() {
+      return de.danet.buf.validate.MessageConstraints.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.MessageConstraints build() {
+      de.danet.buf.validate.MessageConstraints result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.MessageConstraints buildPartial() {
+      de.danet.buf.validate.MessageConstraints result = new de.danet.buf.validate.MessageConstraints(this);
+      buildPartialRepeatedFields(result);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartialRepeatedFields(de.danet.buf.validate.MessageConstraints result) {
+      if (celBuilder_ == null) {
+        if (((bitField0_ & 0x00000002) != 0)) {
+          cel_ = java.util.Collections.unmodifiableList(cel_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.cel_ = cel_;
+      } else {
+        result.cel_ = celBuilder_.build();
+      }
+    }
+
+    private void buildPartial0(de.danet.buf.validate.MessageConstraints result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.disabled_ = disabled_;
+        to_bitField0_ |= 0x00000001;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.MessageConstraints) {
+        return mergeFrom((de.danet.buf.validate.MessageConstraints)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.MessageConstraints other) {
+      if (other == de.danet.buf.validate.MessageConstraints.getDefaultInstance()) return this;
+      if (other.hasDisabled()) {
+        setDisabled(other.getDisabled());
+      }
+      if (celBuilder_ == null) {
+        if (!other.cel_.isEmpty()) {
+          if (cel_.isEmpty()) {
+            cel_ = other.cel_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureCelIsMutable();
+            cel_.addAll(other.cel_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.cel_.isEmpty()) {
+          if (celBuilder_.isEmpty()) {
+            celBuilder_.dispose();
+            celBuilder_ = null;
+            cel_ = other.cel_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+            celBuilder_ = 
+              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                 getCelFieldBuilder() : null;
+          } else {
+            celBuilder_.addAllMessages(other.cel_);
+          }
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              disabled_ = input.readBool();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 26: {
+              de.danet.buf.validate.Constraint m =
+                  input.readMessage(
+                      de.danet.buf.validate.Constraint.parser(),
+                      extensionRegistry);
+              if (celBuilder_ == null) {
+                ensureCelIsMutable();
+                cel_.add(m);
+              } else {
+                celBuilder_.addMessage(m);
+              }
+              break;
+            } // case 26
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private boolean disabled_ ;
+    /**
+     * <pre>
+     * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
+     * This includes any fields within the message that would otherwise support validation.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // validation will be bypassed for this message
+     *   option (buf.validate.message).disabled = true;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool disabled = 1 [json_name = "disabled"];</code>
+     * @return Whether the disabled field is set.
+     */
+    @java.lang.Override
+    public boolean hasDisabled() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
+     * This includes any fields within the message that would otherwise support validation.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // validation will be bypassed for this message
+     *   option (buf.validate.message).disabled = true;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool disabled = 1 [json_name = "disabled"];</code>
+     * @return The disabled.
+     */
+    @java.lang.Override
+    public boolean getDisabled() {
+      return disabled_;
+    }
+    /**
+     * <pre>
+     * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
+     * This includes any fields within the message that would otherwise support validation.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // validation will be bypassed for this message
+     *   option (buf.validate.message).disabled = true;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool disabled = 1 [json_name = "disabled"];</code>
+     * @param value The disabled to set.
+     * @return This builder for chaining.
+     */
+    public Builder setDisabled(boolean value) {
+
+      disabled_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
+     * This includes any fields within the message that would otherwise support validation.
+     *
+     * ```proto
+     * message MyMessage {
+     *   // validation will be bypassed for this message
+     *   option (buf.validate.message).disabled = true;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool disabled = 1 [json_name = "disabled"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearDisabled() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      disabled_ = false;
+      onChanged();
+      return this;
+    }
+
+    private java.util.List<de.danet.buf.validate.Constraint> cel_ =
+      java.util.Collections.emptyList();
+    private void ensureCelIsMutable() {
+      if (!((bitField0_ & 0x00000002) != 0)) {
+        cel_ = new java.util.ArrayList<de.danet.buf.validate.Constraint>(cel_);
+        bitField0_ |= 0x00000002;
+       }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        de.danet.buf.validate.Constraint, de.danet.buf.validate.Constraint.Builder, de.danet.buf.validate.ConstraintOrBuilder> celBuilder_;
+
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public java.util.List<de.danet.buf.validate.Constraint> getCelList() {
+      if (celBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(cel_);
+      } else {
+        return celBuilder_.getMessageList();
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public int getCelCount() {
+      if (celBuilder_ == null) {
+        return cel_.size();
+      } else {
+        return celBuilder_.getCount();
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.Constraint getCel(int index) {
+      if (celBuilder_ == null) {
+        return cel_.get(index);
+      } else {
+        return celBuilder_.getMessage(index);
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder setCel(
+        int index, de.danet.buf.validate.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.set(index, value);
+        onChanged();
+      } else {
+        celBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder setCel(
+        int index, de.danet.buf.validate.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder addCel(de.danet.buf.validate.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.add(value);
+        onChanged();
+      } else {
+        celBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        int index, de.danet.buf.validate.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.add(index, value);
+        onChanged();
+      } else {
+        celBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        de.danet.buf.validate.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.add(builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        int index, de.danet.buf.validate.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder addAllCel(
+        java.lang.Iterable<? extends de.danet.buf.validate.Constraint> values) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, cel_);
+        onChanged();
+      } else {
+        celBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder clearCel() {
+      if (celBuilder_ == null) {
+        cel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
+      } else {
+        celBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public Builder removeCel(int index) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.remove(index);
+        onChanged();
+      } else {
+        celBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.Constraint.Builder getCelBuilder(
+        int index) {
+      return getCelFieldBuilder().getBuilder(index);
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.ConstraintOrBuilder getCelOrBuilder(
+        int index) {
+      if (celBuilder_ == null) {
+        return cel_.get(index);  } else {
+        return celBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public java.util.List<? extends de.danet.buf.validate.ConstraintOrBuilder> 
+         getCelOrBuilderList() {
+      if (celBuilder_ != null) {
+        return celBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(cel_);
+      }
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.Constraint.Builder addCelBuilder() {
+      return getCelFieldBuilder().addBuilder(
+          de.danet.buf.validate.Constraint.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.Constraint.Builder addCelBuilder(
+        int index) {
+      return getCelFieldBuilder().addBuilder(
+          index, de.danet.buf.validate.Constraint.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+     * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+     * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+     *
+     *
+     * ```proto
+     * message MyMessage {
+     *   // The field `foo` must be greater than 42.
+     *   option (buf.validate.message).cel = {
+     *     id: "my_message.value",
+     *     message: "value must be greater than 42",
+     *     expression: "this.foo &gt; 42",
+     *   };
+     *   optional int32 foo = 1;
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+     */
+    public java.util.List<de.danet.buf.validate.Constraint.Builder> 
+         getCelBuilderList() {
+      return getCelFieldBuilder().getBuilderList();
+    }
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        de.danet.buf.validate.Constraint, de.danet.buf.validate.Constraint.Builder, de.danet.buf.validate.ConstraintOrBuilder> 
+        getCelFieldBuilder() {
+      if (celBuilder_ == null) {
+        celBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+            de.danet.buf.validate.Constraint, de.danet.buf.validate.Constraint.Builder, de.danet.buf.validate.ConstraintOrBuilder>(
+                cel_,
+                ((bitField0_ & 0x00000002) != 0),
+                getParentForChildren(),
+                isClean());
+        cel_ = null;
+      }
+      return celBuilder_;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.MessageConstraints)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.MessageConstraints)
+  private static final de.danet.buf.validate.MessageConstraints DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.MessageConstraints();
+  }
+
+  public static de.danet.buf.validate.MessageConstraints getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<MessageConstraints>
+      PARSER = new com.google.protobuf.AbstractParser<MessageConstraints>() {
+    @java.lang.Override
+    public MessageConstraints parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<MessageConstraints> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<MessageConstraints> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.MessageConstraints getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/MessageConstraintsOrBuilder.java b/gen/java/de/danet/buf/validate/MessageConstraintsOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b4a9e65223907f9aa7e4c68e601d0816ad303e2
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/MessageConstraintsOrBuilder.java
@@ -0,0 +1,164 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface MessageConstraintsOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.MessageConstraints)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
+   * This includes any fields within the message that would otherwise support validation.
+   *
+   * ```proto
+   * message MyMessage {
+   *   // validation will be bypassed for this message
+   *   option (buf.validate.message).disabled = true;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool disabled = 1 [json_name = "disabled"];</code>
+   * @return Whether the disabled field is set.
+   */
+  boolean hasDisabled();
+  /**
+   * <pre>
+   * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
+   * This includes any fields within the message that would otherwise support validation.
+   *
+   * ```proto
+   * message MyMessage {
+   *   // validation will be bypassed for this message
+   *   option (buf.validate.message).disabled = true;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool disabled = 1 [json_name = "disabled"];</code>
+   * @return The disabled.
+   */
+  boolean getDisabled();
+
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  java.util.List<de.danet.buf.validate.Constraint> 
+      getCelList();
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  de.danet.buf.validate.Constraint getCel(int index);
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  int getCelCount();
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  java.util.List<? extends de.danet.buf.validate.ConstraintOrBuilder> 
+      getCelOrBuilderList();
+  /**
+   * <pre>
+   * `cel` is a repeated field of type Constraint. Each Constraint specifies a validation rule to be applied to this message.
+   * These constraints are written in Common Expression Language (CEL) syntax. For more information on
+   * CEL, [see our documentation](https://github.com/bufbuild/protovalidate/blob/main/docs/cel.md).
+   *
+   *
+   * ```proto
+   * message MyMessage {
+   *   // The field `foo` must be greater than 42.
+   *   option (buf.validate.message).cel = {
+   *     id: "my_message.value",
+   *     message: "value must be greater than 42",
+   *     expression: "this.foo &gt; 42",
+   *   };
+   *   optional int32 foo = 1;
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Constraint cel = 3 [json_name = "cel"];</code>
+   */
+  de.danet.buf.validate.ConstraintOrBuilder getCelOrBuilder(
+      int index);
+}
diff --git a/gen/java/de/danet/buf/validate/OneofConstraints.java b/gen/java/de/danet/buf/validate/OneofConstraints.java
new file mode 100644
index 0000000000000000000000000000000000000000..33d91a7bb6bca582107b3390d9a9201be73ef36d
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/OneofConstraints.java
@@ -0,0 +1,614 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * The `OneofConstraints` message type enables you to manage constraints for
+ * oneof fields in your protobuf messages. Use the `required` constraint to ensure
+ * that exactly one of the fields within a oneof is set; validation will fail
+ * if none of the fields in the oneof are set:
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.OneofConstraints}
+ */
+public final class OneofConstraints extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.OneofConstraints)
+    OneofConstraintsOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use OneofConstraints.newBuilder() to construct.
+  private OneofConstraints(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private OneofConstraints() {
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new OneofConstraints();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_OneofConstraints_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_OneofConstraints_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.OneofConstraints.class, de.danet.buf.validate.OneofConstraints.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int REQUIRED_FIELD_NUMBER = 1;
+  private boolean required_ = false;
+  /**
+   * <pre>
+   * `required` is an optional boolean attribute that ensures that
+   * exactly one of the field options in a oneof is set; validation fails if
+   * no fields in the oneof are set.
+   *
+   * ```proto
+   * message MyMessage {
+   *   oneof value {
+   *     // The field `a` or `b` must be set.
+   *     option (buf.validate.oneof).required = true;
+   *     optional string a = 1;
+   *     optional string b = 2;
+   *   }
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool required = 1 [json_name = "required"];</code>
+   * @return Whether the required field is set.
+   */
+  @java.lang.Override
+  public boolean hasRequired() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `required` is an optional boolean attribute that ensures that
+   * exactly one of the field options in a oneof is set; validation fails if
+   * no fields in the oneof are set.
+   *
+   * ```proto
+   * message MyMessage {
+   *   oneof value {
+   *     // The field `a` or `b` must be set.
+   *     option (buf.validate.oneof).required = true;
+   *     optional string a = 1;
+   *     optional string b = 2;
+   *   }
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool required = 1 [json_name = "required"];</code>
+   * @return The required.
+   */
+  @java.lang.Override
+  public boolean getRequired() {
+    return required_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeBool(1, required_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(1, required_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.OneofConstraints)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.OneofConstraints other = (de.danet.buf.validate.OneofConstraints) obj;
+
+    if (hasRequired() != other.hasRequired()) return false;
+    if (hasRequired()) {
+      if (getRequired()
+          != other.getRequired()) return false;
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasRequired()) {
+      hash = (37 * hash) + REQUIRED_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getRequired());
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.OneofConstraints parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.OneofConstraints parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.OneofConstraints parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.OneofConstraints parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.OneofConstraints prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * The `OneofConstraints` message type enables you to manage constraints for
+   * oneof fields in your protobuf messages. Use the `required` constraint to ensure
+   * that exactly one of the fields within a oneof is set; validation will fail
+   * if none of the fields in the oneof are set:
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.OneofConstraints}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.OneofConstraints)
+      de.danet.buf.validate.OneofConstraintsOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_OneofConstraints_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_OneofConstraints_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.OneofConstraints.class, de.danet.buf.validate.OneofConstraints.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.OneofConstraints.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      required_ = false;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_OneofConstraints_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.OneofConstraints getDefaultInstanceForType() {
+      return de.danet.buf.validate.OneofConstraints.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.OneofConstraints build() {
+      de.danet.buf.validate.OneofConstraints result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.OneofConstraints buildPartial() {
+      de.danet.buf.validate.OneofConstraints result = new de.danet.buf.validate.OneofConstraints(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.OneofConstraints result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.required_ = required_;
+        to_bitField0_ |= 0x00000001;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.OneofConstraints) {
+        return mergeFrom((de.danet.buf.validate.OneofConstraints)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.OneofConstraints other) {
+      if (other == de.danet.buf.validate.OneofConstraints.getDefaultInstance()) return this;
+      if (other.hasRequired()) {
+        setRequired(other.getRequired());
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              required_ = input.readBool();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private boolean required_ ;
+    /**
+     * <pre>
+     * `required` is an optional boolean attribute that ensures that
+     * exactly one of the field options in a oneof is set; validation fails if
+     * no fields in the oneof are set.
+     *
+     * ```proto
+     * message MyMessage {
+     *   oneof value {
+     *     // The field `a` or `b` must be set.
+     *     option (buf.validate.oneof).required = true;
+     *     optional string a = 1;
+     *     optional string b = 2;
+     *   }
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool required = 1 [json_name = "required"];</code>
+     * @return Whether the required field is set.
+     */
+    @java.lang.Override
+    public boolean hasRequired() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `required` is an optional boolean attribute that ensures that
+     * exactly one of the field options in a oneof is set; validation fails if
+     * no fields in the oneof are set.
+     *
+     * ```proto
+     * message MyMessage {
+     *   oneof value {
+     *     // The field `a` or `b` must be set.
+     *     option (buf.validate.oneof).required = true;
+     *     optional string a = 1;
+     *     optional string b = 2;
+     *   }
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool required = 1 [json_name = "required"];</code>
+     * @return The required.
+     */
+    @java.lang.Override
+    public boolean getRequired() {
+      return required_;
+    }
+    /**
+     * <pre>
+     * `required` is an optional boolean attribute that ensures that
+     * exactly one of the field options in a oneof is set; validation fails if
+     * no fields in the oneof are set.
+     *
+     * ```proto
+     * message MyMessage {
+     *   oneof value {
+     *     // The field `a` or `b` must be set.
+     *     option (buf.validate.oneof).required = true;
+     *     optional string a = 1;
+     *     optional string b = 2;
+     *   }
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool required = 1 [json_name = "required"];</code>
+     * @param value The required to set.
+     * @return This builder for chaining.
+     */
+    public Builder setRequired(boolean value) {
+
+      required_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `required` is an optional boolean attribute that ensures that
+     * exactly one of the field options in a oneof is set; validation fails if
+     * no fields in the oneof are set.
+     *
+     * ```proto
+     * message MyMessage {
+     *   oneof value {
+     *     // The field `a` or `b` must be set.
+     *     option (buf.validate.oneof).required = true;
+     *     optional string a = 1;
+     *     optional string b = 2;
+     *   }
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool required = 1 [json_name = "required"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearRequired() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      required_ = false;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.OneofConstraints)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.OneofConstraints)
+  private static final de.danet.buf.validate.OneofConstraints DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.OneofConstraints();
+  }
+
+  public static de.danet.buf.validate.OneofConstraints getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<OneofConstraints>
+      PARSER = new com.google.protobuf.AbstractParser<OneofConstraints>() {
+    @java.lang.Override
+    public OneofConstraints parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<OneofConstraints> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<OneofConstraints> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.OneofConstraints getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/OneofConstraintsOrBuilder.java b/gen/java/de/danet/buf/validate/OneofConstraintsOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..09b2e1696c528ab98ed90591dd1348b081d40b73
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/OneofConstraintsOrBuilder.java
@@ -0,0 +1,55 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface OneofConstraintsOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.OneofConstraints)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `required` is an optional boolean attribute that ensures that
+   * exactly one of the field options in a oneof is set; validation fails if
+   * no fields in the oneof are set.
+   *
+   * ```proto
+   * message MyMessage {
+   *   oneof value {
+   *     // The field `a` or `b` must be set.
+   *     option (buf.validate.oneof).required = true;
+   *     optional string a = 1;
+   *     optional string b = 2;
+   *   }
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool required = 1 [json_name = "required"];</code>
+   * @return Whether the required field is set.
+   */
+  boolean hasRequired();
+  /**
+   * <pre>
+   * `required` is an optional boolean attribute that ensures that
+   * exactly one of the field options in a oneof is set; validation fails if
+   * no fields in the oneof are set.
+   *
+   * ```proto
+   * message MyMessage {
+   *   oneof value {
+   *     // The field `a` or `b` must be set.
+   *     option (buf.validate.oneof).required = true;
+   *     optional string a = 1;
+   *     optional string b = 2;
+   *   }
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool required = 1 [json_name = "required"];</code>
+   * @return The required.
+   */
+  boolean getRequired();
+}
diff --git a/gen/java/de/danet/buf/validate/RepeatedRules.java b/gen/java/de/danet/buf/validate/RepeatedRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..4f9199ec2885e5d238dad6abf83db66c2159641f
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/RepeatedRules.java
@@ -0,0 +1,1336 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * RepeatedRules describe the constraints applied to `repeated` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.RepeatedRules}
+ */
+public final class RepeatedRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.RepeatedRules)
+    RepeatedRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use RepeatedRules.newBuilder() to construct.
+  private RepeatedRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private RepeatedRules() {
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new RepeatedRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_RepeatedRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_RepeatedRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.RepeatedRules.class, de.danet.buf.validate.RepeatedRules.Builder.class);
+  }
+
+  private int bitField0_;
+  public static final int MIN_ITEMS_FIELD_NUMBER = 1;
+  private long minItems_ = 0L;
+  /**
+   * <pre>
+   * `min_items` requires that this field must contain at least the specified
+   * minimum number of items.
+   *
+   * Note that `min_items = 1` is equivalent to setting a field as `required`.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // value must contain at least  2 items
+   *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_items = 1 [json_name = "minItems", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minItems field is set.
+   */
+  @java.lang.Override
+  public boolean hasMinItems() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `min_items` requires that this field must contain at least the specified
+   * minimum number of items.
+   *
+   * Note that `min_items = 1` is equivalent to setting a field as `required`.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // value must contain at least  2 items
+   *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_items = 1 [json_name = "minItems", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minItems.
+   */
+  @java.lang.Override
+  public long getMinItems() {
+    return minItems_;
+  }
+
+  public static final int MAX_ITEMS_FIELD_NUMBER = 2;
+  private long maxItems_ = 0L;
+  /**
+   * <pre>
+   * `max_items` denotes that this field must not exceed a
+   * certain number of items as the upper limit. If the field contains more
+   * items than specified, an error message will be generated, requiring the
+   * field to maintain no more than the specified number of items.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // value must contain no more than 3 item(s)
+   *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_items = 2 [json_name = "maxItems", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxItems field is set.
+   */
+  @java.lang.Override
+  public boolean hasMaxItems() {
+    return ((bitField0_ & 0x00000002) != 0);
+  }
+  /**
+   * <pre>
+   * `max_items` denotes that this field must not exceed a
+   * certain number of items as the upper limit. If the field contains more
+   * items than specified, an error message will be generated, requiring the
+   * field to maintain no more than the specified number of items.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // value must contain no more than 3 item(s)
+   *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_items = 2 [json_name = "maxItems", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxItems.
+   */
+  @java.lang.Override
+  public long getMaxItems() {
+    return maxItems_;
+  }
+
+  public static final int UNIQUE_FIELD_NUMBER = 3;
+  private boolean unique_ = false;
+  /**
+   * <pre>
+   * `unique` indicates that all elements in this field must
+   * be unique. This constraint is strictly applicable to scalar and enum
+   * types, with message types not being supported.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // repeated value must contain unique items
+   *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool unique = 3 [json_name = "unique", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the unique field is set.
+   */
+  @java.lang.Override
+  public boolean hasUnique() {
+    return ((bitField0_ & 0x00000004) != 0);
+  }
+  /**
+   * <pre>
+   * `unique` indicates that all elements in this field must
+   * be unique. This constraint is strictly applicable to scalar and enum
+   * types, with message types not being supported.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // repeated value must contain unique items
+   *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool unique = 3 [json_name = "unique", (.buf.validate.priv.field) = { ... }</code>
+   * @return The unique.
+   */
+  @java.lang.Override
+  public boolean getUnique() {
+    return unique_;
+  }
+
+  public static final int ITEMS_FIELD_NUMBER = 4;
+  private de.danet.buf.validate.FieldConstraints items_;
+  /**
+   * <pre>
+   * `items` details the constraints to be applied to each item
+   * in the field. Even for repeated message fields, validation is executed
+   * against each item unless skip is explicitly specified.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // The items in the field `value` must follow the specified constraints.
+   *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+   * @return Whether the items field is set.
+   */
+  @java.lang.Override
+  public boolean hasItems() {
+    return ((bitField0_ & 0x00000008) != 0);
+  }
+  /**
+   * <pre>
+   * `items` details the constraints to be applied to each item
+   * in the field. Even for repeated message fields, validation is executed
+   * against each item unless skip is explicitly specified.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // The items in the field `value` must follow the specified constraints.
+   *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+   * @return The items.
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.FieldConstraints getItems() {
+    return items_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : items_;
+  }
+  /**
+   * <pre>
+   * `items` details the constraints to be applied to each item
+   * in the field. Even for repeated message fields, validation is executed
+   * against each item unless skip is explicitly specified.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // The items in the field `value` must follow the specified constraints.
+   *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.FieldConstraintsOrBuilder getItemsOrBuilder() {
+    return items_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : items_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeUInt64(1, minItems_);
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      output.writeUInt64(2, maxItems_);
+    }
+    if (((bitField0_ & 0x00000004) != 0)) {
+      output.writeBool(3, unique_);
+    }
+    if (((bitField0_ & 0x00000008) != 0)) {
+      output.writeMessage(4, getItems());
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(1, minItems_);
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(2, maxItems_);
+    }
+    if (((bitField0_ & 0x00000004) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(3, unique_);
+    }
+    if (((bitField0_ & 0x00000008) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(4, getItems());
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.RepeatedRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.RepeatedRules other = (de.danet.buf.validate.RepeatedRules) obj;
+
+    if (hasMinItems() != other.hasMinItems()) return false;
+    if (hasMinItems()) {
+      if (getMinItems()
+          != other.getMinItems()) return false;
+    }
+    if (hasMaxItems() != other.hasMaxItems()) return false;
+    if (hasMaxItems()) {
+      if (getMaxItems()
+          != other.getMaxItems()) return false;
+    }
+    if (hasUnique() != other.hasUnique()) return false;
+    if (hasUnique()) {
+      if (getUnique()
+          != other.getUnique()) return false;
+    }
+    if (hasItems() != other.hasItems()) return false;
+    if (hasItems()) {
+      if (!getItems()
+          .equals(other.getItems())) return false;
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasMinItems()) {
+      hash = (37 * hash) + MIN_ITEMS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMinItems());
+    }
+    if (hasMaxItems()) {
+      hash = (37 * hash) + MAX_ITEMS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMaxItems());
+    }
+    if (hasUnique()) {
+      hash = (37 * hash) + UNIQUE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getUnique());
+    }
+    if (hasItems()) {
+      hash = (37 * hash) + ITEMS_FIELD_NUMBER;
+      hash = (53 * hash) + getItems().hashCode();
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.RepeatedRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.RepeatedRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.RepeatedRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.RepeatedRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.RepeatedRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * RepeatedRules describe the constraints applied to `repeated` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.RepeatedRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.RepeatedRules)
+      de.danet.buf.validate.RepeatedRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_RepeatedRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_RepeatedRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.RepeatedRules.class, de.danet.buf.validate.RepeatedRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.RepeatedRules.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+        getItemsFieldBuilder();
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      minItems_ = 0L;
+      maxItems_ = 0L;
+      unique_ = false;
+      items_ = null;
+      if (itemsBuilder_ != null) {
+        itemsBuilder_.dispose();
+        itemsBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_RepeatedRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.RepeatedRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.RepeatedRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.RepeatedRules build() {
+      de.danet.buf.validate.RepeatedRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.RepeatedRules buildPartial() {
+      de.danet.buf.validate.RepeatedRules result = new de.danet.buf.validate.RepeatedRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.RepeatedRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.minItems_ = minItems_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.maxItems_ = maxItems_;
+        to_bitField0_ |= 0x00000002;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        result.unique_ = unique_;
+        to_bitField0_ |= 0x00000004;
+      }
+      if (((from_bitField0_ & 0x00000008) != 0)) {
+        result.items_ = itemsBuilder_ == null
+            ? items_
+            : itemsBuilder_.build();
+        to_bitField0_ |= 0x00000008;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.RepeatedRules) {
+        return mergeFrom((de.danet.buf.validate.RepeatedRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.RepeatedRules other) {
+      if (other == de.danet.buf.validate.RepeatedRules.getDefaultInstance()) return this;
+      if (other.hasMinItems()) {
+        setMinItems(other.getMinItems());
+      }
+      if (other.hasMaxItems()) {
+        setMaxItems(other.getMaxItems());
+      }
+      if (other.hasUnique()) {
+        setUnique(other.getUnique());
+      }
+      if (other.hasItems()) {
+        mergeItems(other.getItems());
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              minItems_ = input.readUInt64();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              maxItems_ = input.readUInt64();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 16
+            case 24: {
+              unique_ = input.readBool();
+              bitField0_ |= 0x00000004;
+              break;
+            } // case 24
+            case 34: {
+              input.readMessage(
+                  getItemsFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              bitField0_ |= 0x00000008;
+              break;
+            } // case 34
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private long minItems_ ;
+    /**
+     * <pre>
+     * `min_items` requires that this field must contain at least the specified
+     * minimum number of items.
+     *
+     * Note that `min_items = 1` is equivalent to setting a field as `required`.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // value must contain at least  2 items
+     *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_items = 1 [json_name = "minItems", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the minItems field is set.
+     */
+    @java.lang.Override
+    public boolean hasMinItems() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `min_items` requires that this field must contain at least the specified
+     * minimum number of items.
+     *
+     * Note that `min_items = 1` is equivalent to setting a field as `required`.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // value must contain at least  2 items
+     *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_items = 1 [json_name = "minItems", (.buf.validate.priv.field) = { ... }</code>
+     * @return The minItems.
+     */
+    @java.lang.Override
+    public long getMinItems() {
+      return minItems_;
+    }
+    /**
+     * <pre>
+     * `min_items` requires that this field must contain at least the specified
+     * minimum number of items.
+     *
+     * Note that `min_items = 1` is equivalent to setting a field as `required`.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // value must contain at least  2 items
+     *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_items = 1 [json_name = "minItems", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The minItems to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMinItems(long value) {
+
+      minItems_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `min_items` requires that this field must contain at least the specified
+     * minimum number of items.
+     *
+     * Note that `min_items = 1` is equivalent to setting a field as `required`.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // value must contain at least  2 items
+     *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_items = 1 [json_name = "minItems", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMinItems() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      minItems_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long maxItems_ ;
+    /**
+     * <pre>
+     * `max_items` denotes that this field must not exceed a
+     * certain number of items as the upper limit. If the field contains more
+     * items than specified, an error message will be generated, requiring the
+     * field to maintain no more than the specified number of items.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // value must contain no more than 3 item(s)
+     *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_items = 2 [json_name = "maxItems", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the maxItems field is set.
+     */
+    @java.lang.Override
+    public boolean hasMaxItems() {
+      return ((bitField0_ & 0x00000002) != 0);
+    }
+    /**
+     * <pre>
+     * `max_items` denotes that this field must not exceed a
+     * certain number of items as the upper limit. If the field contains more
+     * items than specified, an error message will be generated, requiring the
+     * field to maintain no more than the specified number of items.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // value must contain no more than 3 item(s)
+     *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_items = 2 [json_name = "maxItems", (.buf.validate.priv.field) = { ... }</code>
+     * @return The maxItems.
+     */
+    @java.lang.Override
+    public long getMaxItems() {
+      return maxItems_;
+    }
+    /**
+     * <pre>
+     * `max_items` denotes that this field must not exceed a
+     * certain number of items as the upper limit. If the field contains more
+     * items than specified, an error message will be generated, requiring the
+     * field to maintain no more than the specified number of items.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // value must contain no more than 3 item(s)
+     *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_items = 2 [json_name = "maxItems", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The maxItems to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMaxItems(long value) {
+
+      maxItems_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `max_items` denotes that this field must not exceed a
+     * certain number of items as the upper limit. If the field contains more
+     * items than specified, an error message will be generated, requiring the
+     * field to maintain no more than the specified number of items.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // value must contain no more than 3 item(s)
+     *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_items = 2 [json_name = "maxItems", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMaxItems() {
+      bitField0_ = (bitField0_ & ~0x00000002);
+      maxItems_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private boolean unique_ ;
+    /**
+     * <pre>
+     * `unique` indicates that all elements in this field must
+     * be unique. This constraint is strictly applicable to scalar and enum
+     * types, with message types not being supported.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // repeated value must contain unique items
+     *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool unique = 3 [json_name = "unique", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the unique field is set.
+     */
+    @java.lang.Override
+    public boolean hasUnique() {
+      return ((bitField0_ & 0x00000004) != 0);
+    }
+    /**
+     * <pre>
+     * `unique` indicates that all elements in this field must
+     * be unique. This constraint is strictly applicable to scalar and enum
+     * types, with message types not being supported.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // repeated value must contain unique items
+     *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool unique = 3 [json_name = "unique", (.buf.validate.priv.field) = { ... }</code>
+     * @return The unique.
+     */
+    @java.lang.Override
+    public boolean getUnique() {
+      return unique_;
+    }
+    /**
+     * <pre>
+     * `unique` indicates that all elements in this field must
+     * be unique. This constraint is strictly applicable to scalar and enum
+     * types, with message types not being supported.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // repeated value must contain unique items
+     *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool unique = 3 [json_name = "unique", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The unique to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUnique(boolean value) {
+
+      unique_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `unique` indicates that all elements in this field must
+     * be unique. This constraint is strictly applicable to scalar and enum
+     * types, with message types not being supported.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // repeated value must contain unique items
+     *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool unique = 3 [json_name = "unique", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUnique() {
+      bitField0_ = (bitField0_ & ~0x00000004);
+      unique_ = false;
+      onChanged();
+      return this;
+    }
+
+    private de.danet.buf.validate.FieldConstraints items_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder> itemsBuilder_;
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     * @return Whether the items field is set.
+     */
+    public boolean hasItems() {
+      return ((bitField0_ & 0x00000008) != 0);
+    }
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     * @return The items.
+     */
+    public de.danet.buf.validate.FieldConstraints getItems() {
+      if (itemsBuilder_ == null) {
+        return items_ == null ? de.danet.buf.validate.FieldConstraints.getDefaultInstance() : items_;
+      } else {
+        return itemsBuilder_.getMessage();
+      }
+    }
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     */
+    public Builder setItems(de.danet.buf.validate.FieldConstraints value) {
+      if (itemsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        items_ = value;
+      } else {
+        itemsBuilder_.setMessage(value);
+      }
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     */
+    public Builder setItems(
+        de.danet.buf.validate.FieldConstraints.Builder builderForValue) {
+      if (itemsBuilder_ == null) {
+        items_ = builderForValue.build();
+      } else {
+        itemsBuilder_.setMessage(builderForValue.build());
+      }
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     */
+    public Builder mergeItems(de.danet.buf.validate.FieldConstraints value) {
+      if (itemsBuilder_ == null) {
+        if (((bitField0_ & 0x00000008) != 0) &&
+          items_ != null &&
+          items_ != de.danet.buf.validate.FieldConstraints.getDefaultInstance()) {
+          getItemsBuilder().mergeFrom(value);
+        } else {
+          items_ = value;
+        }
+      } else {
+        itemsBuilder_.mergeFrom(value);
+      }
+      if (items_ != null) {
+        bitField0_ |= 0x00000008;
+        onChanged();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     */
+    public Builder clearItems() {
+      bitField0_ = (bitField0_ & ~0x00000008);
+      items_ = null;
+      if (itemsBuilder_ != null) {
+        itemsBuilder_.dispose();
+        itemsBuilder_ = null;
+      }
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     */
+    public de.danet.buf.validate.FieldConstraints.Builder getItemsBuilder() {
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return getItemsFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     */
+    public de.danet.buf.validate.FieldConstraintsOrBuilder getItemsOrBuilder() {
+      if (itemsBuilder_ != null) {
+        return itemsBuilder_.getMessageOrBuilder();
+      } else {
+        return items_ == null ?
+            de.danet.buf.validate.FieldConstraints.getDefaultInstance() : items_;
+      }
+    }
+    /**
+     * <pre>
+     * `items` details the constraints to be applied to each item
+     * in the field. Even for repeated message fields, validation is executed
+     * against each item unless skip is explicitly specified.
+     *
+     * ```proto
+     * message MyRepeated {
+     *   // The items in the field `value` must follow the specified constraints.
+     *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+     *     string: {
+     *       min_len: 3
+     *       max_len: 10
+     *     }
+     *   }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder> 
+        getItemsFieldBuilder() {
+      if (itemsBuilder_ == null) {
+        itemsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            de.danet.buf.validate.FieldConstraints, de.danet.buf.validate.FieldConstraints.Builder, de.danet.buf.validate.FieldConstraintsOrBuilder>(
+                getItems(),
+                getParentForChildren(),
+                isClean());
+        items_ = null;
+      }
+      return itemsBuilder_;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.RepeatedRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.RepeatedRules)
+  private static final de.danet.buf.validate.RepeatedRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.RepeatedRules();
+  }
+
+  public static de.danet.buf.validate.RepeatedRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<RepeatedRules>
+      PARSER = new com.google.protobuf.AbstractParser<RepeatedRules>() {
+    @java.lang.Override
+    public RepeatedRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<RepeatedRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<RepeatedRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.RepeatedRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/RepeatedRulesOrBuilder.java b/gen/java/de/danet/buf/validate/RepeatedRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..28a21c5bf8aa8d4bb8ab4898a4d7e277b2234ad9
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/RepeatedRulesOrBuilder.java
@@ -0,0 +1,194 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface RepeatedRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.RepeatedRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `min_items` requires that this field must contain at least the specified
+   * minimum number of items.
+   *
+   * Note that `min_items = 1` is equivalent to setting a field as `required`.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // value must contain at least  2 items
+   *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_items = 1 [json_name = "minItems", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minItems field is set.
+   */
+  boolean hasMinItems();
+  /**
+   * <pre>
+   * `min_items` requires that this field must contain at least the specified
+   * minimum number of items.
+   *
+   * Note that `min_items = 1` is equivalent to setting a field as `required`.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // value must contain at least  2 items
+   *   repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_items = 1 [json_name = "minItems", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minItems.
+   */
+  long getMinItems();
+
+  /**
+   * <pre>
+   * `max_items` denotes that this field must not exceed a
+   * certain number of items as the upper limit. If the field contains more
+   * items than specified, an error message will be generated, requiring the
+   * field to maintain no more than the specified number of items.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // value must contain no more than 3 item(s)
+   *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_items = 2 [json_name = "maxItems", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxItems field is set.
+   */
+  boolean hasMaxItems();
+  /**
+   * <pre>
+   * `max_items` denotes that this field must not exceed a
+   * certain number of items as the upper limit. If the field contains more
+   * items than specified, an error message will be generated, requiring the
+   * field to maintain no more than the specified number of items.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // value must contain no more than 3 item(s)
+   *   repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_items = 2 [json_name = "maxItems", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxItems.
+   */
+  long getMaxItems();
+
+  /**
+   * <pre>
+   * `unique` indicates that all elements in this field must
+   * be unique. This constraint is strictly applicable to scalar and enum
+   * types, with message types not being supported.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // repeated value must contain unique items
+   *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool unique = 3 [json_name = "unique", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the unique field is set.
+   */
+  boolean hasUnique();
+  /**
+   * <pre>
+   * `unique` indicates that all elements in this field must
+   * be unique. This constraint is strictly applicable to scalar and enum
+   * types, with message types not being supported.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // repeated value must contain unique items
+   *   repeated string value = 1 [(buf.validate.field).repeated.unique = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool unique = 3 [json_name = "unique", (.buf.validate.priv.field) = { ... }</code>
+   * @return The unique.
+   */
+  boolean getUnique();
+
+  /**
+   * <pre>
+   * `items` details the constraints to be applied to each item
+   * in the field. Even for repeated message fields, validation is executed
+   * against each item unless skip is explicitly specified.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // The items in the field `value` must follow the specified constraints.
+   *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+   * @return Whether the items field is set.
+   */
+  boolean hasItems();
+  /**
+   * <pre>
+   * `items` details the constraints to be applied to each item
+   * in the field. Even for repeated message fields, validation is executed
+   * against each item unless skip is explicitly specified.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // The items in the field `value` must follow the specified constraints.
+   *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+   * @return The items.
+   */
+  de.danet.buf.validate.FieldConstraints getItems();
+  /**
+   * <pre>
+   * `items` details the constraints to be applied to each item
+   * in the field. Even for repeated message fields, validation is executed
+   * against each item unless skip is explicitly specified.
+   *
+   * ```proto
+   * message MyRepeated {
+   *   // The items in the field `value` must follow the specified constraints.
+   *   repeated string value = 1 [(buf.validate.field).repeated.items = {
+   *     string: {
+   *       min_len: 3
+   *       max_len: 10
+   *     }
+   *   }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .buf.validate.FieldConstraints items = 4 [json_name = "items"];</code>
+   */
+  de.danet.buf.validate.FieldConstraintsOrBuilder getItemsOrBuilder();
+}
diff --git a/gen/java/de/danet/buf/validate/SFixed32Rules.java b/gen/java/de/danet/buf/validate/SFixed32Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..b415fc7b8e68bc7c90cc32874c34e96248435574
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/SFixed32Rules.java
@@ -0,0 +1,2112 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * SFixed32Rules describes the constraints applied to `fixed32` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.SFixed32Rules}
+ */
+public final class SFixed32Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.SFixed32Rules)
+    SFixed32RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use SFixed32Rules.newBuilder() to construct.
+  private SFixed32Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private SFixed32Rules() {
+    in_ = emptyIntList();
+    notIn_ = emptyIntList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new SFixed32Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed32Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed32Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.SFixed32Rules.class, de.danet.buf.validate.SFixed32Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private int const_ = 0;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must equal 42
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sfixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must equal 42
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sfixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public int getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be less than 10
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be less than 10
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public int getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be less than or equal to 10
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be less than or equal to 10
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public int getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be greater than 5 [sfixed32.gt]
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+   *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+   *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be greater than 5 [sfixed32.gt]
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+   *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+   *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public int getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be greater than or equal to 5 [sfixed32.gte]
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+   *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+   *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be greater than or equal to 5 [sfixed32.gte]
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+   *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+   *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public int getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList in_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public int getIn(int index) {
+    return in_.getInt(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList notIn_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public int getNotIn(int index) {
+    return notIn_.getInt(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeSFixed32(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeSFixed32(
+          2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeSFixed32(
+          3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeSFixed32(
+          4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeSFixed32(
+          5, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeSFixed32NoTag(in_.getInt(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeSFixed32NoTag(notIn_.getInt(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed32Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed32Size(
+            2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed32Size(
+            3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed32Size(
+            4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed32Size(
+            5, (int)((java.lang.Integer) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      dataSize = 4 * getInList().size();
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      dataSize = 4 * getNotInList().size();
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.SFixed32Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.SFixed32Rules other = (de.danet.buf.validate.SFixed32Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst();
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + getLt();
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + getLte();
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + getGt();
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + getGte();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.SFixed32Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.SFixed32Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.SFixed32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.SFixed32Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * SFixed32Rules describes the constraints applied to `fixed32` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.SFixed32Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.SFixed32Rules)
+      de.danet.buf.validate.SFixed32RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed32Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.SFixed32Rules.class, de.danet.buf.validate.SFixed32Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.SFixed32Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0;
+      in_ = emptyIntList();
+      notIn_ = emptyIntList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed32Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.SFixed32Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed32Rules build() {
+      de.danet.buf.validate.SFixed32Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed32Rules buildPartial() {
+      de.danet.buf.validate.SFixed32Rules result = new de.danet.buf.validate.SFixed32Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.SFixed32Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.SFixed32Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.SFixed32Rules) {
+        return mergeFrom((de.danet.buf.validate.SFixed32Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.SFixed32Rules other) {
+      if (other == de.danet.buf.validate.SFixed32Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 13: {
+              const_ = input.readSFixed32();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 13
+            case 21: {
+              lessThan_ = input.readSFixed32();
+              lessThanCase_ = 2;
+              break;
+            } // case 21
+            case 29: {
+              lessThan_ = input.readSFixed32();
+              lessThanCase_ = 3;
+              break;
+            } // case 29
+            case 37: {
+              greaterThan_ = input.readSFixed32();
+              greaterThanCase_ = 4;
+              break;
+            } // case 37
+            case 45: {
+              greaterThan_ = input.readSFixed32();
+              greaterThanCase_ = 5;
+              break;
+            } // case 45
+            case 53: {
+              int v = input.readSFixed32();
+              ensureInIsMutable();
+              in_.addInt(v);
+              break;
+            } // case 53
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureInIsMutable(alloc / 4);
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addInt(input.readSFixed32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 61: {
+              int v = input.readSFixed32();
+              ensureNotInIsMutable();
+              notIn_.addInt(v);
+              break;
+            } // case 61
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureNotInIsMutable(alloc / 4);
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addInt(input.readSFixed32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private int const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must equal 42
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sfixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must equal 42
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sfixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public int getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must equal 42
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sfixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(int value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must equal 42
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sfixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be less than 10
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be less than 10
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public int getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be less than 10
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(int value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be less than 10
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be less than or equal to 10
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be less than or equal to 10
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public int getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be less than or equal to 10
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(int value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be less than or equal to 10
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be greater than 5 [sfixed32.gt]
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be greater than 5 [sfixed32.gt]
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public int getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be greater than 5 [sfixed32.gt]
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(int value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be greater than 5 [sfixed32.gt]
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be greater than or equal to 5 [sfixed32.gte]
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be greater than or equal to 5 [sfixed32.gte]
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public int getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be greater than or equal to 5 [sfixed32.gte]
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(int value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be greater than or equal to 5 [sfixed32.gte]
+     *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+     *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+     *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList in_ = emptyIntList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    private void ensureInIsMutable(int capacity) {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_, capacity);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Integer>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public int getIn(int index) {
+      return in_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, int value) {
+
+      ensureInIsMutable();
+      in_.setInt(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(int value) {
+
+      ensureInIsMutable();
+      in_.addInt(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList notIn_ = emptyIntList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    private void ensureNotInIsMutable(int capacity) {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_, capacity);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Integer>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public int getNotIn(int index) {
+      return notIn_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, int value) {
+
+      ensureNotInIsMutable();
+      notIn_.setInt(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(int value) {
+
+      ensureNotInIsMutable();
+      notIn_.addInt(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.SFixed32Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.SFixed32Rules)
+  private static final de.danet.buf.validate.SFixed32Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.SFixed32Rules();
+  }
+
+  public static de.danet.buf.validate.SFixed32Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<SFixed32Rules>
+      PARSER = new com.google.protobuf.AbstractParser<SFixed32Rules>() {
+    @java.lang.Override
+    public SFixed32Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<SFixed32Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<SFixed32Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.SFixed32Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/SFixed32RulesOrBuilder.java b/gen/java/de/danet/buf/validate/SFixed32RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..318272b0c23590f67c2abb76850e39021df9eeff
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/SFixed32RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface SFixed32RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.SFixed32Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must equal 42
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sfixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must equal 42
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sfixed32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  int getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be less than 10
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be less than 10
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  int getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be less than or equal to 10
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be less than or equal to 10
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  int getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be greater than 5 [sfixed32.gt]
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+   *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+   *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be greater than 5 [sfixed32.gt]
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
+   *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
+   *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  int getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be greater than or equal to 5 [sfixed32.gte]
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+   *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+   *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be greater than or equal to 5 [sfixed32.gte]
+   *   sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
+   *   sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
+   *   sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  int getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Integer> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  int getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Integer> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed32 value = 1 (buf.validate.field).sfixed32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  int getNotIn(int index);
+
+  de.danet.buf.validate.SFixed32Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.SFixed32Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/SFixed64Rules.java b/gen/java/de/danet/buf/validate/SFixed64Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..035a86041f687775198b542c0572b3c8336a8291
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/SFixed64Rules.java
@@ -0,0 +1,2117 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * SFixed64Rules describes the constraints applied to `fixed64` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.SFixed64Rules}
+ */
+public final class SFixed64Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.SFixed64Rules)
+    SFixed64RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use SFixed64Rules.newBuilder() to construct.
+  private SFixed64Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private SFixed64Rules() {
+    in_ = emptyLongList();
+    notIn_ = emptyLongList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new SFixed64Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed64Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed64Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.SFixed64Rules.class, de.danet.buf.validate.SFixed64Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private long const_ = 0L;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must equal 42
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sfixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must equal 42
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sfixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public long getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be less than 10
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be less than 10
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public long getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be less than or equal to 10
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be less than or equal to 10
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public long getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be greater than 5 [sfixed64.gt]
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+   *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+   *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be greater than 5 [sfixed64.gt]
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+   *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+   *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public long getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be greater than or equal to 5 [sfixed64.gte]
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+   *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+   *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be greater than or equal to 5 [sfixed64.gte]
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+   *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+   *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public long getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList in_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public long getIn(int index) {
+    return in_.getLong(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList notIn_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public long getNotIn(int index) {
+    return notIn_.getLong(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeSFixed64(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeSFixed64(
+          2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeSFixed64(
+          3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeSFixed64(
+          4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeSFixed64(
+          5, (long)((java.lang.Long) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeSFixed64NoTag(in_.getLong(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeSFixed64NoTag(notIn_.getLong(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed64Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed64Size(
+            2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed64Size(
+            3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed64Size(
+            4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSFixed64Size(
+            5, (long)((java.lang.Long) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      dataSize = 8 * getInList().size();
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      dataSize = 8 * getNotInList().size();
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.SFixed64Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.SFixed64Rules other = (de.danet.buf.validate.SFixed64Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getConst());
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLt());
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLte());
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGt());
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGte());
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.SFixed64Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.SFixed64Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.SFixed64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.SFixed64Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * SFixed64Rules describes the constraints applied to `fixed64` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.SFixed64Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.SFixed64Rules)
+      de.danet.buf.validate.SFixed64RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed64Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.SFixed64Rules.class, de.danet.buf.validate.SFixed64Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.SFixed64Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0L;
+      in_ = emptyLongList();
+      notIn_ = emptyLongList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SFixed64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed64Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.SFixed64Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed64Rules build() {
+      de.danet.buf.validate.SFixed64Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SFixed64Rules buildPartial() {
+      de.danet.buf.validate.SFixed64Rules result = new de.danet.buf.validate.SFixed64Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.SFixed64Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.SFixed64Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.SFixed64Rules) {
+        return mergeFrom((de.danet.buf.validate.SFixed64Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.SFixed64Rules other) {
+      if (other == de.danet.buf.validate.SFixed64Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 9: {
+              const_ = input.readSFixed64();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 9
+            case 17: {
+              lessThan_ = input.readSFixed64();
+              lessThanCase_ = 2;
+              break;
+            } // case 17
+            case 25: {
+              lessThan_ = input.readSFixed64();
+              lessThanCase_ = 3;
+              break;
+            } // case 25
+            case 33: {
+              greaterThan_ = input.readSFixed64();
+              greaterThanCase_ = 4;
+              break;
+            } // case 33
+            case 41: {
+              greaterThan_ = input.readSFixed64();
+              greaterThanCase_ = 5;
+              break;
+            } // case 41
+            case 49: {
+              long v = input.readSFixed64();
+              ensureInIsMutable();
+              in_.addLong(v);
+              break;
+            } // case 49
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureInIsMutable(alloc / 8);
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addLong(input.readSFixed64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 57: {
+              long v = input.readSFixed64();
+              ensureNotInIsMutable();
+              notIn_.addLong(v);
+              break;
+            } // case 57
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              int alloc = length > 4096 ? 4096 : length;
+              ensureNotInIsMutable(alloc / 8);
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addLong(input.readSFixed64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private long const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must equal 42
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sfixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must equal 42
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sfixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public long getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must equal 42
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sfixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(long value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must equal 42
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sfixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be less than 10
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be less than 10
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public long getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be less than 10
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(long value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be less than 10
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be less than or equal to 10
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be less than or equal to 10
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public long getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be less than or equal to 10
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(long value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be less than or equal to 10
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be greater than 5 [sfixed64.gt]
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be greater than 5 [sfixed64.gt]
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public long getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be greater than 5 [sfixed64.gt]
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(long value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be greater than 5 [sfixed64.gt]
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be greater than or equal to 5 [sfixed64.gte]
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be greater than or equal to 5 [sfixed64.gte]
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public long getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be greater than or equal to 5 [sfixed64.gte]
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(long value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be greater than or equal to 5 [sfixed64.gte]
+     *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+     *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+     *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sfixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList in_ = emptyLongList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    private void ensureInIsMutable(int capacity) {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_, capacity);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Long>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public long getIn(int index) {
+      return in_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, long value) {
+
+      ensureInIsMutable();
+      in_.setLong(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(long value) {
+
+      ensureInIsMutable();
+      in_.addLong(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList notIn_ = emptyLongList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    private void ensureNotInIsMutable(int capacity) {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_, capacity);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Long>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public long getNotIn(int index) {
+      return notIn_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, long value) {
+
+      ensureNotInIsMutable();
+      notIn_.setLong(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(long value) {
+
+      ensureNotInIsMutable();
+      notIn_.addLong(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySFixed64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.SFixed64Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.SFixed64Rules)
+  private static final de.danet.buf.validate.SFixed64Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.SFixed64Rules();
+  }
+
+  public static de.danet.buf.validate.SFixed64Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<SFixed64Rules>
+      PARSER = new com.google.protobuf.AbstractParser<SFixed64Rules>() {
+    @java.lang.Override
+    public SFixed64Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<SFixed64Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<SFixed64Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.SFixed64Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/SFixed64RulesOrBuilder.java b/gen/java/de/danet/buf/validate/SFixed64RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..717bc30a7dbd65c84d5a1e5405ea9249867ac47c
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/SFixed64RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface SFixed64RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.SFixed64Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must equal 42
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sfixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must equal 42
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sfixed64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  long getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be less than 10
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be less than 10
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  long getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be less than or equal to 10
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be less than or equal to 10
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  long getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be greater than 5 [sfixed64.gt]
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+   *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+   *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be greater than 5 [sfixed64.gt]
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
+   *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
+   *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  long getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be greater than or equal to 5 [sfixed64.gte]
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+   *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+   *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be greater than or equal to 5 [sfixed64.gte]
+   *   sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
+   *   sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
+   *   sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sfixed64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  long getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Long> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  long getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Long> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySFixed64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sfixed64 value = 1 (buf.validate.field).sfixed64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sfixed64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  long getNotIn(int index);
+
+  de.danet.buf.validate.SFixed64Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.SFixed64Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/SInt32Rules.java b/gen/java/de/danet/buf/validate/SInt32Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..e64cca3b19244271290a1ebb50498b1481294f5b
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/SInt32Rules.java
@@ -0,0 +1,2104 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * SInt32Rules describes the constraints applied to `sint32` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.SInt32Rules}
+ */
+public final class SInt32Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.SInt32Rules)
+    SInt32RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use SInt32Rules.newBuilder() to construct.
+  private SInt32Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private SInt32Rules() {
+    in_ = emptyIntList();
+    notIn_ = emptyIntList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new SInt32Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt32Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt32Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.SInt32Rules.class, de.danet.buf.validate.SInt32Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private int const_ = 0;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must equal 42
+   *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must equal 42
+   *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public int getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be less than 10
+   *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be less than 10
+   *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public int getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be less than or equal to 10
+   *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be less than or equal to 10
+   *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public int getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be greater than 5 [sint32.gt]
+   *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sint32.gt_lt]
+   *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+   *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be greater than 5 [sint32.gt]
+   *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sint32.gt_lt]
+   *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+   *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public int getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *  // value must be greater than or equal to 5 [sint32.gte]
+   *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+   *
+   *  // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+   *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+   *
+   *  // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+   *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *  // value must be greater than or equal to 5 [sint32.gte]
+   *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+   *
+   *  // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+   *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+   *
+   *  // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+   *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public int getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList in_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public int getIn(int index) {
+    return in_.getInt(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList notIn_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public int getNotIn(int index) {
+    return notIn_.getInt(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeSInt32(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeSInt32(
+          2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeSInt32(
+          3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeSInt32(
+          4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeSInt32(
+          5, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeSInt32NoTag(in_.getInt(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeSInt32NoTag(notIn_.getInt(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt32Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt32Size(
+            2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt32Size(
+            3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt32Size(
+            4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt32Size(
+            5, (int)((java.lang.Integer) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeSInt32SizeNoTag(in_.getInt(i));
+      }
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeSInt32SizeNoTag(notIn_.getInt(i));
+      }
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.SInt32Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.SInt32Rules other = (de.danet.buf.validate.SInt32Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst();
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + getLt();
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + getLte();
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + getGt();
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + getGte();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.SInt32Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.SInt32Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.SInt32Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.SInt32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.SInt32Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * SInt32Rules describes the constraints applied to `sint32` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.SInt32Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.SInt32Rules)
+      de.danet.buf.validate.SInt32RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt32Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.SInt32Rules.class, de.danet.buf.validate.SInt32Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.SInt32Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0;
+      in_ = emptyIntList();
+      notIn_ = emptyIntList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SInt32Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.SInt32Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SInt32Rules build() {
+      de.danet.buf.validate.SInt32Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SInt32Rules buildPartial() {
+      de.danet.buf.validate.SInt32Rules result = new de.danet.buf.validate.SInt32Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.SInt32Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.SInt32Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.SInt32Rules) {
+        return mergeFrom((de.danet.buf.validate.SInt32Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.SInt32Rules other) {
+      if (other == de.danet.buf.validate.SInt32Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              const_ = input.readSInt32();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              lessThan_ = input.readSInt32();
+              lessThanCase_ = 2;
+              break;
+            } // case 16
+            case 24: {
+              lessThan_ = input.readSInt32();
+              lessThanCase_ = 3;
+              break;
+            } // case 24
+            case 32: {
+              greaterThan_ = input.readSInt32();
+              greaterThanCase_ = 4;
+              break;
+            } // case 32
+            case 40: {
+              greaterThan_ = input.readSInt32();
+              greaterThanCase_ = 5;
+              break;
+            } // case 40
+            case 48: {
+              int v = input.readSInt32();
+              ensureInIsMutable();
+              in_.addInt(v);
+              break;
+            } // case 48
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addInt(input.readSInt32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 56: {
+              int v = input.readSInt32();
+              ensureNotInIsMutable();
+              notIn_.addInt(v);
+              break;
+            } // case 56
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureNotInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addInt(input.readSInt32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private int const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must equal 42
+     *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must equal 42
+     *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public int getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must equal 42
+     *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(int value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must equal 42
+     *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be less than 10
+     *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be less than 10
+     *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public int getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be less than 10
+     *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(int value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be less than 10
+     *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be less than or equal to 10
+     *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be less than or equal to 10
+     *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public int getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be less than or equal to 10
+     *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(int value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be less than or equal to 10
+     *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be greater than 5 [sint32.gt]
+     *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sint32.gt_lt]
+     *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+     *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be greater than 5 [sint32.gt]
+     *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sint32.gt_lt]
+     *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+     *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public int getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be greater than 5 [sint32.gt]
+     *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sint32.gt_lt]
+     *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+     *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(int value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be greater than 5 [sint32.gt]
+     *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sint32.gt_lt]
+     *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+     *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *  // value must be greater than or equal to 5 [sint32.gte]
+     *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+     *
+     *  // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+     *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+     *
+     *  // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+     *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *  // value must be greater than or equal to 5 [sint32.gte]
+     *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+     *
+     *  // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+     *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+     *
+     *  // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+     *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public int getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *  // value must be greater than or equal to 5 [sint32.gte]
+     *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+     *
+     *  // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+     *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+     *
+     *  // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+     *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(int value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *  // value must be greater than or equal to 5 [sint32.gte]
+     *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+     *
+     *  // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+     *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+     *
+     *  // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+     *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList in_ = emptyIntList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Integer>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public int getIn(int index) {
+      return in_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, int value) {
+
+      ensureInIsMutable();
+      in_.setInt(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(int value) {
+
+      ensureInIsMutable();
+      in_.addInt(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList notIn_ = emptyIntList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Integer>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public int getNotIn(int index) {
+      return notIn_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, int value) {
+
+      ensureNotInIsMutable();
+      notIn_.setInt(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(int value) {
+
+      ensureNotInIsMutable();
+      notIn_.addInt(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.SInt32Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.SInt32Rules)
+  private static final de.danet.buf.validate.SInt32Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.SInt32Rules();
+  }
+
+  public static de.danet.buf.validate.SInt32Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<SInt32Rules>
+      PARSER = new com.google.protobuf.AbstractParser<SInt32Rules>() {
+    @java.lang.Override
+    public SInt32Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<SInt32Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<SInt32Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.SInt32Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/SInt32RulesOrBuilder.java b/gen/java/de/danet/buf/validate/SInt32RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..726d2e647fea59046c04cb2ab6c7a311fd63d351
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/SInt32RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface SInt32RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.SInt32Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must equal 42
+   *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must equal 42
+   *   sint32 value = 1 [(buf.validate.field).sint32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  int getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be less than 10
+   *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be less than 10
+   *   sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  int getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be less than or equal to 10
+   *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be less than or equal to 10
+   *   sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  int getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be greater than 5 [sint32.gt]
+   *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sint32.gt_lt]
+   *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+   *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be greater than 5 [sint32.gt]
+   *   sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sint32.gt_lt]
+   *   sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
+   *   sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  int getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *  // value must be greater than or equal to 5 [sint32.gte]
+   *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+   *
+   *  // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+   *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+   *
+   *  // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+   *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *  // value must be greater than or equal to 5 [sint32.gte]
+   *  sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
+   *
+   *  // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
+   *  sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
+   *
+   *  // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
+   *  sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  int getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Integer> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  int getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Integer> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint32 value = 1 (buf.validate.field).sint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  int getNotIn(int index);
+
+  de.danet.buf.validate.SInt32Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.SInt32Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/SInt64Rules.java b/gen/java/de/danet/buf/validate/SInt64Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..d4933f3a5e2faa1b38449af34f3a9e3e54613482
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/SInt64Rules.java
@@ -0,0 +1,2109 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * SInt64Rules describes the constraints applied to `sint64` values.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.SInt64Rules}
+ */
+public final class SInt64Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.SInt64Rules)
+    SInt64RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use SInt64Rules.newBuilder() to construct.
+  private SInt64Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private SInt64Rules() {
+    in_ = emptyLongList();
+    notIn_ = emptyLongList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new SInt64Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt64Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt64Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.SInt64Rules.class, de.danet.buf.validate.SInt64Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private long const_ = 0L;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must equal 42
+   *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must equal 42
+   *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public long getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be less than 10
+   *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be less than 10
+   *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public long getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be less than or equal to 10
+   *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be less than or equal to 10
+   *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public long getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be greater than 5 [sint64.gt]
+   *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sint64.gt_lt]
+   *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+   *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be greater than 5 [sint64.gt]
+   *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sint64.gt_lt]
+   *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+   *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public long getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be greater than or equal to 5 [sint64.gte]
+   *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+   *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+   *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be greater than or equal to 5 [sint64.gte]
+   *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+   *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+   *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public long getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList in_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public long getIn(int index) {
+    return in_.getLong(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList notIn_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public long getNotIn(int index) {
+    return notIn_.getLong(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeSInt64(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeSInt64(
+          2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeSInt64(
+          3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeSInt64(
+          4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeSInt64(
+          5, (long)((java.lang.Long) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeSInt64NoTag(in_.getLong(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeSInt64NoTag(notIn_.getLong(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt64Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt64Size(
+            2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt64Size(
+            3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt64Size(
+            4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeSInt64Size(
+            5, (long)((java.lang.Long) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeSInt64SizeNoTag(in_.getLong(i));
+      }
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeSInt64SizeNoTag(notIn_.getLong(i));
+      }
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.SInt64Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.SInt64Rules other = (de.danet.buf.validate.SInt64Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getConst());
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLt());
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLte());
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGt());
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGte());
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.SInt64Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.SInt64Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.SInt64Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.SInt64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.SInt64Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * SInt64Rules describes the constraints applied to `sint64` values.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.SInt64Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.SInt64Rules)
+      de.danet.buf.validate.SInt64RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt64Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.SInt64Rules.class, de.danet.buf.validate.SInt64Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.SInt64Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0L;
+      in_ = emptyLongList();
+      notIn_ = emptyLongList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_SInt64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SInt64Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.SInt64Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SInt64Rules build() {
+      de.danet.buf.validate.SInt64Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.SInt64Rules buildPartial() {
+      de.danet.buf.validate.SInt64Rules result = new de.danet.buf.validate.SInt64Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.SInt64Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.SInt64Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.SInt64Rules) {
+        return mergeFrom((de.danet.buf.validate.SInt64Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.SInt64Rules other) {
+      if (other == de.danet.buf.validate.SInt64Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              const_ = input.readSInt64();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              lessThan_ = input.readSInt64();
+              lessThanCase_ = 2;
+              break;
+            } // case 16
+            case 24: {
+              lessThan_ = input.readSInt64();
+              lessThanCase_ = 3;
+              break;
+            } // case 24
+            case 32: {
+              greaterThan_ = input.readSInt64();
+              greaterThanCase_ = 4;
+              break;
+            } // case 32
+            case 40: {
+              greaterThan_ = input.readSInt64();
+              greaterThanCase_ = 5;
+              break;
+            } // case 40
+            case 48: {
+              long v = input.readSInt64();
+              ensureInIsMutable();
+              in_.addLong(v);
+              break;
+            } // case 48
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addLong(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 56: {
+              long v = input.readSInt64();
+              ensureNotInIsMutable();
+              notIn_.addLong(v);
+              break;
+            } // case 56
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureNotInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addLong(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private long const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must equal 42
+     *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must equal 42
+     *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public long getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must equal 42
+     *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(long value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must equal 42
+     *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional sint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be less than 10
+     *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be less than 10
+     *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public long getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be less than 10
+     *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(long value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field
+     * &lt; value). If the field value is equal to or greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be less than 10
+     *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be less than or equal to 10
+     *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be less than or equal to 10
+     *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public long getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be less than or equal to 10
+     *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(long value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be less than or equal to 10
+     *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be greater than 5 [sint64.gt]
+     *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sint64.gt_lt]
+     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be greater than 5 [sint64.gt]
+     *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sint64.gt_lt]
+     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public long getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be greater than 5 [sint64.gt]
+     *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sint64.gt_lt]
+     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(long value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be greater than 5 [sint64.gt]
+     *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [sint64.gt_lt]
+     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be greater than or equal to 5 [sint64.gte]
+     *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be greater than or equal to 5 [sint64.gte]
+     *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public long getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be greater than or equal to 5 [sint64.gte]
+     *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(long value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be greater than or equal to 5 [sint64.gte]
+     *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+     *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+     *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>sint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList in_ = emptyLongList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Long>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public long getIn(int index) {
+      return in_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, long value) {
+
+      ensureInIsMutable();
+      in_.setLong(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(long value) {
+
+      ensureInIsMutable();
+      in_.addLong(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message
+     * is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList notIn_ = emptyLongList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Long>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public long getNotIn(int index) {
+      return notIn_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, long value) {
+
+      ensureNotInIsMutable();
+      notIn_.setLong(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(long value) {
+
+      ensureNotInIsMutable();
+      notIn_.addLong(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MySInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.SInt64Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.SInt64Rules)
+  private static final de.danet.buf.validate.SInt64Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.SInt64Rules();
+  }
+
+  public static de.danet.buf.validate.SInt64Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<SInt64Rules>
+      PARSER = new com.google.protobuf.AbstractParser<SInt64Rules>() {
+    @java.lang.Override
+    public SInt64Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<SInt64Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<SInt64Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.SInt64Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/SInt64RulesOrBuilder.java b/gen/java/de/danet/buf/validate/SInt64RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa8372e685bc86c75860c6407e95b669bfd6cb73
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/SInt64RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface SInt64RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.SInt64Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must equal 42
+   *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must equal 42
+   *   sint64 value = 1 [(buf.validate.field).sint64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional sint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  long getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be less than 10
+   *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field
+   * &lt; value). If the field value is equal to or greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be less than 10
+   *   sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  long getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be less than or equal to 10
+   *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be less than or equal to 10
+   *   sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  long getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be greater than 5 [sint64.gt]
+   *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sint64.gt_lt]
+   *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+   *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be greater than 5 [sint64.gt]
+   *   sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [sint64.gt_lt]
+   *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
+   *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  long getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be greater than or equal to 5 [sint64.gte]
+   *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+   *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+   *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be greater than or equal to 5 [sint64.gte]
+   *   sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
+   *   sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
+   *   sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>sint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  long getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Long> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message
+   * is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  long getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Long> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MySInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated sint64 value = 1 (buf.validate.field).sint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated sint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  long getNotIn(int index);
+
+  de.danet.buf.validate.SInt64Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.SInt64Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/StringRules.java b/gen/java/de/danet/buf/validate/StringRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..f70953d01acc11cd2fc5a4b2f322ad2496f34a12
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/StringRules.java
@@ -0,0 +1,7000 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * StringRules describes the constraints applied to `string` values These
+ * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.StringRules}
+ */
+public final class StringRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.StringRules)
+    StringRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use StringRules.newBuilder() to construct.
+  private StringRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private StringRules() {
+    const_ = "";
+    pattern_ = "";
+    prefix_ = "";
+    suffix_ = "";
+    contains_ = "";
+    notContains_ = "";
+    in_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+    notIn_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new StringRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_StringRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_StringRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.StringRules.class, de.danet.buf.validate.StringRules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int wellKnownCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object wellKnown_;
+  public enum WellKnownCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    EMAIL(12),
+    HOSTNAME(13),
+    IP(14),
+    IPV4(15),
+    IPV6(16),
+    URI(17),
+    URI_REF(18),
+    ADDRESS(21),
+    UUID(22),
+    IP_WITH_PREFIXLEN(26),
+    IPV4_WITH_PREFIXLEN(27),
+    IPV6_WITH_PREFIXLEN(28),
+    IP_PREFIX(29),
+    IPV4_PREFIX(30),
+    IPV6_PREFIX(31),
+    WELL_KNOWN_REGEX(24),
+    WELLKNOWN_NOT_SET(0);
+    private final int value;
+    private WellKnownCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static WellKnownCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static WellKnownCase forNumber(int value) {
+      switch (value) {
+        case 12: return EMAIL;
+        case 13: return HOSTNAME;
+        case 14: return IP;
+        case 15: return IPV4;
+        case 16: return IPV6;
+        case 17: return URI;
+        case 18: return URI_REF;
+        case 21: return ADDRESS;
+        case 22: return UUID;
+        case 26: return IP_WITH_PREFIXLEN;
+        case 27: return IPV4_WITH_PREFIXLEN;
+        case 28: return IPV6_WITH_PREFIXLEN;
+        case 29: return IP_PREFIX;
+        case 30: return IPV4_PREFIX;
+        case 31: return IPV6_PREFIX;
+        case 24: return WELL_KNOWN_REGEX;
+        case 0: return WELLKNOWN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public WellKnownCase
+  getWellKnownCase() {
+    return WellKnownCase.forNumber(
+        wellKnownCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object const_ = "";
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must equal `hello`
+   *   string value = 1 [(buf.validate.field).string.const = "hello"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must equal `hello`
+   *   string value = 1 [(buf.validate.field).string.const = "hello"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public java.lang.String getConst() {
+    java.lang.Object ref = const_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      const_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must equal `hello`
+   *   string value = 1 [(buf.validate.field).string.const = "hello"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for const.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getConstBytes() {
+    java.lang.Object ref = const_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      const_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int LEN_FIELD_NUMBER = 19;
+  private long len_ = 0L;
+  /**
+   * <pre>
+   * `len` dictates that the field value must have the specified
+   * number of characters (Unicode code points), which may differ from the number
+   * of bytes in the string. If the field value does not meet the specified
+   * length, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be 5 characters
+   *   string value = 1 [(buf.validate.field).string.len = 5];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len = 19 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the len field is set.
+   */
+  @java.lang.Override
+  public boolean hasLen() {
+    return ((bitField0_ & 0x00000002) != 0);
+  }
+  /**
+   * <pre>
+   * `len` dictates that the field value must have the specified
+   * number of characters (Unicode code points), which may differ from the number
+   * of bytes in the string. If the field value does not meet the specified
+   * length, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be 5 characters
+   *   string value = 1 [(buf.validate.field).string.len = 5];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len = 19 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+   * @return The len.
+   */
+  @java.lang.Override
+  public long getLen() {
+    return len_;
+  }
+
+  public static final int MIN_LEN_FIELD_NUMBER = 2;
+  private long minLen_ = 0L;
+  /**
+   * <pre>
+   * `min_len` specifies that the field value must have at least the specified
+   * number of characters (Unicode code points), which may differ from the number
+   * of bytes in the string. If the field value contains fewer characters, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at least 3 characters
+   *   string value = 1 [(buf.validate.field).string.min_len = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minLen field is set.
+   */
+  @java.lang.Override
+  public boolean hasMinLen() {
+    return ((bitField0_ & 0x00000004) != 0);
+  }
+  /**
+   * <pre>
+   * `min_len` specifies that the field value must have at least the specified
+   * number of characters (Unicode code points), which may differ from the number
+   * of bytes in the string. If the field value contains fewer characters, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at least 3 characters
+   *   string value = 1 [(buf.validate.field).string.min_len = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minLen.
+   */
+  @java.lang.Override
+  public long getMinLen() {
+    return minLen_;
+  }
+
+  public static final int MAX_LEN_FIELD_NUMBER = 3;
+  private long maxLen_ = 0L;
+  /**
+   * <pre>
+   * `max_len` specifies that the field value must have no more than the specified
+   * number of characters (Unicode code points), which may differ from the
+   * number of bytes in the string. If the field value contains more characters,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at most 10 characters
+   *   string value = 1 [(buf.validate.field).string.max_len = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxLen field is set.
+   */
+  @java.lang.Override
+  public boolean hasMaxLen() {
+    return ((bitField0_ & 0x00000008) != 0);
+  }
+  /**
+   * <pre>
+   * `max_len` specifies that the field value must have no more than the specified
+   * number of characters (Unicode code points), which may differ from the
+   * number of bytes in the string. If the field value contains more characters,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at most 10 characters
+   *   string value = 1 [(buf.validate.field).string.max_len = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxLen.
+   */
+  @java.lang.Override
+  public long getMaxLen() {
+    return maxLen_;
+  }
+
+  public static final int LEN_BYTES_FIELD_NUMBER = 20;
+  private long lenBytes_ = 0L;
+  /**
+   * <pre>
+   * `len_bytes` dictates that the field value must have the specified number of
+   * bytes. If the field value does not match the specified length in bytes,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be 6 bytes
+   *   string value = 1 [(buf.validate.field).string.len_bytes = 6];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len_bytes = 20 [json_name = "lenBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lenBytes field is set.
+   */
+  @java.lang.Override
+  public boolean hasLenBytes() {
+    return ((bitField0_ & 0x00000010) != 0);
+  }
+  /**
+   * <pre>
+   * `len_bytes` dictates that the field value must have the specified number of
+   * bytes. If the field value does not match the specified length in bytes,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be 6 bytes
+   *   string value = 1 [(buf.validate.field).string.len_bytes = 6];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len_bytes = 20 [json_name = "lenBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lenBytes.
+   */
+  @java.lang.Override
+  public long getLenBytes() {
+    return lenBytes_;
+  }
+
+  public static final int MIN_BYTES_FIELD_NUMBER = 4;
+  private long minBytes_ = 0L;
+  /**
+   * <pre>
+   * `min_bytes` specifies that the field value must have at least the specified
+   * number of bytes. If the field value contains fewer bytes, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at least 4 bytes
+   *   string value = 1 [(buf.validate.field).string.min_bytes = 4];
+   * }
+   *
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_bytes = 4 [json_name = "minBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minBytes field is set.
+   */
+  @java.lang.Override
+  public boolean hasMinBytes() {
+    return ((bitField0_ & 0x00000020) != 0);
+  }
+  /**
+   * <pre>
+   * `min_bytes` specifies that the field value must have at least the specified
+   * number of bytes. If the field value contains fewer bytes, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at least 4 bytes
+   *   string value = 1 [(buf.validate.field).string.min_bytes = 4];
+   * }
+   *
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_bytes = 4 [json_name = "minBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minBytes.
+   */
+  @java.lang.Override
+  public long getMinBytes() {
+    return minBytes_;
+  }
+
+  public static final int MAX_BYTES_FIELD_NUMBER = 5;
+  private long maxBytes_ = 0L;
+  /**
+   * <pre>
+   * `max_bytes` specifies that the field value must have no more than the
+   *specified number of bytes. If the field value contains more bytes, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at most 8 bytes
+   *   string value = 1 [(buf.validate.field).string.max_bytes = 8];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_bytes = 5 [json_name = "maxBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxBytes field is set.
+   */
+  @java.lang.Override
+  public boolean hasMaxBytes() {
+    return ((bitField0_ & 0x00000040) != 0);
+  }
+  /**
+   * <pre>
+   * `max_bytes` specifies that the field value must have no more than the
+   *specified number of bytes. If the field value contains more bytes, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at most 8 bytes
+   *   string value = 1 [(buf.validate.field).string.max_bytes = 8];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_bytes = 5 [json_name = "maxBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxBytes.
+   */
+  @java.lang.Override
+  public long getMaxBytes() {
+    return maxBytes_;
+  }
+
+  public static final int PATTERN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object pattern_ = "";
+  /**
+   * <pre>
+   * `pattern` specifies that the field value must match the specified
+   * regular expression (RE2 syntax), with the expression provided without any
+   * delimiters. If the field value doesn't match the regular expression, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not match regex pattern `^[a-zA-Z]//$`
+   *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the pattern field is set.
+   */
+  @java.lang.Override
+  public boolean hasPattern() {
+    return ((bitField0_ & 0x00000080) != 0);
+  }
+  /**
+   * <pre>
+   * `pattern` specifies that the field value must match the specified
+   * regular expression (RE2 syntax), with the expression provided without any
+   * delimiters. If the field value doesn't match the regular expression, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not match regex pattern `^[a-zA-Z]//$`
+   *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return The pattern.
+   */
+  @java.lang.Override
+  public java.lang.String getPattern() {
+    java.lang.Object ref = pattern_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      pattern_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `pattern` specifies that the field value must match the specified
+   * regular expression (RE2 syntax), with the expression provided without any
+   * delimiters. If the field value doesn't match the regular expression, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not match regex pattern `^[a-zA-Z]//$`
+   *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for pattern.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getPatternBytes() {
+    java.lang.Object ref = pattern_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      pattern_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int PREFIX_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object prefix_ = "";
+  /**
+   * <pre>
+   * `prefix` specifies that the field value must have the
+   *specified substring at the beginning of the string. If the field value
+   * doesn't start with the specified prefix, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have prefix `pre`
+   *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the prefix field is set.
+   */
+  @java.lang.Override
+  public boolean hasPrefix() {
+    return ((bitField0_ & 0x00000100) != 0);
+  }
+  /**
+   * <pre>
+   * `prefix` specifies that the field value must have the
+   *specified substring at the beginning of the string. If the field value
+   * doesn't start with the specified prefix, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have prefix `pre`
+   *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The prefix.
+   */
+  @java.lang.Override
+  public java.lang.String getPrefix() {
+    java.lang.Object ref = prefix_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      prefix_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `prefix` specifies that the field value must have the
+   *specified substring at the beginning of the string. If the field value
+   * doesn't start with the specified prefix, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have prefix `pre`
+   *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for prefix.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getPrefixBytes() {
+    java.lang.Object ref = prefix_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      prefix_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int SUFFIX_FIELD_NUMBER = 8;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object suffix_ = "";
+  /**
+   * <pre>
+   * `suffix` specifies that the field value must have the
+   *specified substring at the end of the string. If the field value doesn't
+   * end with the specified suffix, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have suffix `post`
+   *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the suffix field is set.
+   */
+  @java.lang.Override
+  public boolean hasSuffix() {
+    return ((bitField0_ & 0x00000200) != 0);
+  }
+  /**
+   * <pre>
+   * `suffix` specifies that the field value must have the
+   *specified substring at the end of the string. If the field value doesn't
+   * end with the specified suffix, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have suffix `post`
+   *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The suffix.
+   */
+  @java.lang.Override
+  public java.lang.String getSuffix() {
+    java.lang.Object ref = suffix_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      suffix_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `suffix` specifies that the field value must have the
+   *specified substring at the end of the string. If the field value doesn't
+   * end with the specified suffix, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have suffix `post`
+   *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for suffix.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getSuffixBytes() {
+    java.lang.Object ref = suffix_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      suffix_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int CONTAINS_FIELD_NUMBER = 9;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object contains_ = "";
+  /**
+   * <pre>
+   * `contains` specifies that the field value must have the
+   *specified substring anywhere in the string. If the field value doesn't
+   * contain the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not contain substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the contains field is set.
+   */
+  @java.lang.Override
+  public boolean hasContains() {
+    return ((bitField0_ & 0x00000400) != 0);
+  }
+  /**
+   * <pre>
+   * `contains` specifies that the field value must have the
+   *specified substring anywhere in the string. If the field value doesn't
+   * contain the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not contain substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The contains.
+   */
+  @java.lang.Override
+  public java.lang.String getContains() {
+    java.lang.Object ref = contains_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      contains_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `contains` specifies that the field value must have the
+   *specified substring anywhere in the string. If the field value doesn't
+   * contain the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not contain substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for contains.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getContainsBytes() {
+    java.lang.Object ref = contains_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      contains_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int NOT_CONTAINS_FIELD_NUMBER = 23;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object notContains_ = "";
+  /**
+   * <pre>
+   * `not_contains` specifies that the field value must not have the
+   *specified substring anywhere in the string. If the field value contains
+   * the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value contains substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the notContains field is set.
+   */
+  @java.lang.Override
+  public boolean hasNotContains() {
+    return ((bitField0_ & 0x00000800) != 0);
+  }
+  /**
+   * <pre>
+   * `not_contains` specifies that the field value must not have the
+   *specified substring anywhere in the string. If the field value contains
+   * the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value contains substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The notContains.
+   */
+  @java.lang.Override
+  public java.lang.String getNotContains() {
+    java.lang.Object ref = notContains_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      notContains_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `not_contains` specifies that the field value must not have the
+   *specified substring anywhere in the string. If the field value contains
+   * the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value contains substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for notContains.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getNotContainsBytes() {
+    java.lang.Object ref = notContains_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      notContains_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int IN_FIELD_NUMBER = 10;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.LazyStringArrayList in_ =
+      com.google.protobuf.LazyStringArrayList.emptyList();
+  /**
+   * <pre>
+   * `in` specifies that the field value must be equal to one of the specified
+   * values. If the field value isn't one of the specified values, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be in list ["apple", "banana"]
+   *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  public com.google.protobuf.ProtocolStringList
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` specifies that the field value must be equal to one of the specified
+   * values. If the field value isn't one of the specified values, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be in list ["apple", "banana"]
+   *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` specifies that the field value must be equal to one of the specified
+   * values. If the field value isn't one of the specified values, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be in list ["apple", "banana"]
+   *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public java.lang.String getIn(int index) {
+    return in_.get(index);
+  }
+  /**
+   * <pre>
+   * `in` specifies that the field value must be equal to one of the specified
+   * values. If the field value isn't one of the specified values, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be in list ["apple", "banana"]
+   *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the in at the given index.
+   */
+  public com.google.protobuf.ByteString
+      getInBytes(int index) {
+    return in_.getByteString(index);
+  }
+
+  public static final int NOT_IN_FIELD_NUMBER = 11;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.LazyStringArrayList notIn_ =
+      com.google.protobuf.LazyStringArrayList.emptyList();
+  /**
+   * <pre>
+   * `not_in` specifies that the field value cannot be equal to any
+   * of the specified values. If the field value is one of the specified values,
+   * an error message will be generated.
+   * ```proto
+   * message MyString {
+   *   // value must not be in list ["orange", "grape"]
+   *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  public com.google.protobuf.ProtocolStringList
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` specifies that the field value cannot be equal to any
+   * of the specified values. If the field value is one of the specified values,
+   * an error message will be generated.
+   * ```proto
+   * message MyString {
+   *   // value must not be in list ["orange", "grape"]
+   *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` specifies that the field value cannot be equal to any
+   * of the specified values. If the field value is one of the specified values,
+   * an error message will be generated.
+   * ```proto
+   * message MyString {
+   *   // value must not be in list ["orange", "grape"]
+   *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public java.lang.String getNotIn(int index) {
+    return notIn_.get(index);
+  }
+  /**
+   * <pre>
+   * `not_in` specifies that the field value cannot be equal to any
+   * of the specified values. If the field value is one of the specified values,
+   * an error message will be generated.
+   * ```proto
+   * message MyString {
+   *   // value must not be in list ["orange", "grape"]
+   *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the notIn at the given index.
+   */
+  public com.google.protobuf.ByteString
+      getNotInBytes(int index) {
+    return notIn_.getByteString(index);
+  }
+
+  public static final int EMAIL_FIELD_NUMBER = 12;
+  /**
+   * <pre>
+   * `email` specifies that the field value must be a valid email address
+   * (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
+   * If the field value isn't a valid email address, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid email address
+   *   string value = 1 [(buf.validate.field).string.email = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool email = 12 [json_name = "email", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the email field is set.
+   */
+  @java.lang.Override
+  public boolean hasEmail() {
+    return wellKnownCase_ == 12;
+  }
+  /**
+   * <pre>
+   * `email` specifies that the field value must be a valid email address
+   * (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
+   * If the field value isn't a valid email address, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid email address
+   *   string value = 1 [(buf.validate.field).string.email = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool email = 12 [json_name = "email", (.buf.validate.priv.field) = { ... }</code>
+   * @return The email.
+   */
+  @java.lang.Override
+  public boolean getEmail() {
+    if (wellKnownCase_ == 12) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int HOSTNAME_FIELD_NUMBER = 13;
+  /**
+   * <pre>
+   * `hostname` specifies that the field value must be a valid
+   * hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
+   * internationalized domain names (IDNs). If the field value isn't a
+   * valid hostname, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid hostname
+   *   string value = 1 [(buf.validate.field).string.hostname = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool hostname = 13 [json_name = "hostname", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the hostname field is set.
+   */
+  @java.lang.Override
+  public boolean hasHostname() {
+    return wellKnownCase_ == 13;
+  }
+  /**
+   * <pre>
+   * `hostname` specifies that the field value must be a valid
+   * hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
+   * internationalized domain names (IDNs). If the field value isn't a
+   * valid hostname, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid hostname
+   *   string value = 1 [(buf.validate.field).string.hostname = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool hostname = 13 [json_name = "hostname", (.buf.validate.priv.field) = { ... }</code>
+   * @return The hostname.
+   */
+  @java.lang.Override
+  public boolean getHostname() {
+    if (wellKnownCase_ == 13) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IP_FIELD_NUMBER = 14;
+  /**
+   * <pre>
+   * `ip` specifies that the field value must be a valid IP
+   * (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
+   * If the field value isn't a valid IP address, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP address
+   *   string value = 1 [(buf.validate.field).string.ip = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip = 14 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ip field is set.
+   */
+  @java.lang.Override
+  public boolean hasIp() {
+    return wellKnownCase_ == 14;
+  }
+  /**
+   * <pre>
+   * `ip` specifies that the field value must be a valid IP
+   * (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
+   * If the field value isn't a valid IP address, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP address
+   *   string value = 1 [(buf.validate.field).string.ip = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip = 14 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ip.
+   */
+  @java.lang.Override
+  public boolean getIp() {
+    if (wellKnownCase_ == 14) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IPV4_FIELD_NUMBER = 15;
+  /**
+   * <pre>
+   * `ipv4` specifies that the field value must be a valid IPv4
+   * address. If the field value isn't a valid IPv4 address, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 address
+   *   string value = 1 [(buf.validate.field).string.ipv4 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4 = 15 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv4 field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpv4() {
+    return wellKnownCase_ == 15;
+  }
+  /**
+   * <pre>
+   * `ipv4` specifies that the field value must be a valid IPv4
+   * address. If the field value isn't a valid IPv4 address, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 address
+   *   string value = 1 [(buf.validate.field).string.ipv4 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4 = 15 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv4.
+   */
+  @java.lang.Override
+  public boolean getIpv4() {
+    if (wellKnownCase_ == 15) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IPV6_FIELD_NUMBER = 16;
+  /**
+   * <pre>
+   * `ipv6` specifies that the field value must be a valid
+   * IPv6 address, without surrounding square brackets. If the field value is
+   * not a valid IPv6 address, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 address
+   *   string value = 1 [(buf.validate.field).string.ipv6 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6 = 16 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv6 field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpv6() {
+    return wellKnownCase_ == 16;
+  }
+  /**
+   * <pre>
+   * `ipv6` specifies that the field value must be a valid
+   * IPv6 address, without surrounding square brackets. If the field value is
+   * not a valid IPv6 address, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 address
+   *   string value = 1 [(buf.validate.field).string.ipv6 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6 = 16 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv6.
+   */
+  @java.lang.Override
+  public boolean getIpv6() {
+    if (wellKnownCase_ == 16) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int URI_FIELD_NUMBER = 17;
+  /**
+   * <pre>
+   * `uri` specifies that the field value must be a valid,
+   * absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
+   * absolute URI, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid URI
+   *   string value = 1 [(buf.validate.field).string.uri = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uri = 17 [json_name = "uri", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the uri field is set.
+   */
+  @java.lang.Override
+  public boolean hasUri() {
+    return wellKnownCase_ == 17;
+  }
+  /**
+   * <pre>
+   * `uri` specifies that the field value must be a valid,
+   * absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
+   * absolute URI, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid URI
+   *   string value = 1 [(buf.validate.field).string.uri = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uri = 17 [json_name = "uri", (.buf.validate.priv.field) = { ... }</code>
+   * @return The uri.
+   */
+  @java.lang.Override
+  public boolean getUri() {
+    if (wellKnownCase_ == 17) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int URI_REF_FIELD_NUMBER = 18;
+  /**
+   * <pre>
+   * `uri_ref` specifies that the field value must be a valid URI
+   * as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
+   * field value isn't a valid URI, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid URI
+   *   string value = 1 [(buf.validate.field).string.uri_ref = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uri_ref = 18 [json_name = "uriRef", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the uriRef field is set.
+   */
+  @java.lang.Override
+  public boolean hasUriRef() {
+    return wellKnownCase_ == 18;
+  }
+  /**
+   * <pre>
+   * `uri_ref` specifies that the field value must be a valid URI
+   * as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
+   * field value isn't a valid URI, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid URI
+   *   string value = 1 [(buf.validate.field).string.uri_ref = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uri_ref = 18 [json_name = "uriRef", (.buf.validate.priv.field) = { ... }</code>
+   * @return The uriRef.
+   */
+  @java.lang.Override
+  public boolean getUriRef() {
+    if (wellKnownCase_ == 18) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int ADDRESS_FIELD_NUMBER = 21;
+  /**
+   * <pre>
+   * `address` specifies that the field value must be either a valid hostname
+   * as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
+   * (which doesn't support internationalized domain names or IDNs) or a valid
+   * IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid hostname, or ip address
+   *   string value = 1 [(buf.validate.field).string.address = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool address = 21 [json_name = "address", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the address field is set.
+   */
+  @java.lang.Override
+  public boolean hasAddress() {
+    return wellKnownCase_ == 21;
+  }
+  /**
+   * <pre>
+   * `address` specifies that the field value must be either a valid hostname
+   * as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
+   * (which doesn't support internationalized domain names or IDNs) or a valid
+   * IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid hostname, or ip address
+   *   string value = 1 [(buf.validate.field).string.address = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool address = 21 [json_name = "address", (.buf.validate.priv.field) = { ... }</code>
+   * @return The address.
+   */
+  @java.lang.Override
+  public boolean getAddress() {
+    if (wellKnownCase_ == 21) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int UUID_FIELD_NUMBER = 22;
+  /**
+   * <pre>
+   * `uuid` specifies that the field value must be a valid UUID as defined by
+   * [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
+   * field value isn't a valid UUID, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid UUID
+   *   string value = 1 [(buf.validate.field).string.uuid = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uuid = 22 [json_name = "uuid", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the uuid field is set.
+   */
+  @java.lang.Override
+  public boolean hasUuid() {
+    return wellKnownCase_ == 22;
+  }
+  /**
+   * <pre>
+   * `uuid` specifies that the field value must be a valid UUID as defined by
+   * [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
+   * field value isn't a valid UUID, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid UUID
+   *   string value = 1 [(buf.validate.field).string.uuid = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uuid = 22 [json_name = "uuid", (.buf.validate.priv.field) = { ... }</code>
+   * @return The uuid.
+   */
+  @java.lang.Override
+  public boolean getUuid() {
+    if (wellKnownCase_ == 22) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IP_WITH_PREFIXLEN_FIELD_NUMBER = 26;
+  /**
+   * <pre>
+   * `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
+   * address with prefix length. If the field value isn't a valid IP with prefix
+   * length, an error message will be generated.
+   *
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP with prefix length
+   *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip_with_prefixlen = 26 [json_name = "ipWithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipWithPrefixlen field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpWithPrefixlen() {
+    return wellKnownCase_ == 26;
+  }
+  /**
+   * <pre>
+   * `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
+   * address with prefix length. If the field value isn't a valid IP with prefix
+   * length, an error message will be generated.
+   *
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP with prefix length
+   *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip_with_prefixlen = 26 [json_name = "ipWithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipWithPrefixlen.
+   */
+  @java.lang.Override
+  public boolean getIpWithPrefixlen() {
+    if (wellKnownCase_ == 26) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IPV4_WITH_PREFIXLEN_FIELD_NUMBER = 27;
+  /**
+   * <pre>
+   * `ipv4_with_prefixlen` specifies that the field value must be a valid
+   * IPv4 address with prefix.
+   * If the field value isn't a valid IPv4 address with prefix length,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 address with prefix lentgh
+   *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4_with_prefixlen = 27 [json_name = "ipv4WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv4WithPrefixlen field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpv4WithPrefixlen() {
+    return wellKnownCase_ == 27;
+  }
+  /**
+   * <pre>
+   * `ipv4_with_prefixlen` specifies that the field value must be a valid
+   * IPv4 address with prefix.
+   * If the field value isn't a valid IPv4 address with prefix length,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 address with prefix lentgh
+   *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4_with_prefixlen = 27 [json_name = "ipv4WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv4WithPrefixlen.
+   */
+  @java.lang.Override
+  public boolean getIpv4WithPrefixlen() {
+    if (wellKnownCase_ == 27) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IPV6_WITH_PREFIXLEN_FIELD_NUMBER = 28;
+  /**
+   * <pre>
+   * `ipv6_with_prefixlen` specifies that the field value must be a valid
+   * IPv6 address with prefix length.
+   * If the field value is not a valid IPv6 address with prefix length,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 address prefix length
+   *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6_with_prefixlen = 28 [json_name = "ipv6WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv6WithPrefixlen field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpv6WithPrefixlen() {
+    return wellKnownCase_ == 28;
+  }
+  /**
+   * <pre>
+   * `ipv6_with_prefixlen` specifies that the field value must be a valid
+   * IPv6 address with prefix length.
+   * If the field value is not a valid IPv6 address with prefix length,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 address prefix length
+   *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6_with_prefixlen = 28 [json_name = "ipv6WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv6WithPrefixlen.
+   */
+  @java.lang.Override
+  public boolean getIpv6WithPrefixlen() {
+    if (wellKnownCase_ == 28) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IP_PREFIX_FIELD_NUMBER = 29;
+  /**
+   * <pre>
+   * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
+   * If the field value isn't a valid IP prefix, an error message will be
+   * generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
+   * `127.0.0.0/16`, not `127.0.0.1/16`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP prefix
+   *    string value = 1 [(buf.validate.field).string.ip_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip_prefix = 29 [json_name = "ipPrefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipPrefix field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpPrefix() {
+    return wellKnownCase_ == 29;
+  }
+  /**
+   * <pre>
+   * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
+   * If the field value isn't a valid IP prefix, an error message will be
+   * generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
+   * `127.0.0.0/16`, not `127.0.0.1/16`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP prefix
+   *    string value = 1 [(buf.validate.field).string.ip_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip_prefix = 29 [json_name = "ipPrefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipPrefix.
+   */
+  @java.lang.Override
+  public boolean getIpPrefix() {
+    if (wellKnownCase_ == 29) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IPV4_PREFIX_FIELD_NUMBER = 30;
+  /**
+   * <pre>
+   * `ipv4_prefix` specifies that the field value must be a valid IPv4
+   * prefix. If the field value isn't a valid IPv4 prefix, an error message
+   * will be generated. The prefix must have all zeros for the masked bits of
+   * the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 prefix
+   *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4_prefix = 30 [json_name = "ipv4Prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv4Prefix field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpv4Prefix() {
+    return wellKnownCase_ == 30;
+  }
+  /**
+   * <pre>
+   * `ipv4_prefix` specifies that the field value must be a valid IPv4
+   * prefix. If the field value isn't a valid IPv4 prefix, an error message
+   * will be generated. The prefix must have all zeros for the masked bits of
+   * the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 prefix
+   *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4_prefix = 30 [json_name = "ipv4Prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv4Prefix.
+   */
+  @java.lang.Override
+  public boolean getIpv4Prefix() {
+    if (wellKnownCase_ == 30) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int IPV6_PREFIX_FIELD_NUMBER = 31;
+  /**
+   * <pre>
+   * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
+   * If the field value is not a valid IPv6 prefix, an error message will be
+   * generated. The prefix must have all zeros for the masked bits of the prefix
+   * (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 prefix
+   *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6_prefix = 31 [json_name = "ipv6Prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv6Prefix field is set.
+   */
+  @java.lang.Override
+  public boolean hasIpv6Prefix() {
+    return wellKnownCase_ == 31;
+  }
+  /**
+   * <pre>
+   * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
+   * If the field value is not a valid IPv6 prefix, an error message will be
+   * generated. The prefix must have all zeros for the masked bits of the prefix
+   * (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 prefix
+   *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6_prefix = 31 [json_name = "ipv6Prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv6Prefix.
+   */
+  @java.lang.Override
+  public boolean getIpv6Prefix() {
+    if (wellKnownCase_ == 31) {
+      return (java.lang.Boolean) wellKnown_;
+    }
+    return false;
+  }
+
+  public static final int WELL_KNOWN_REGEX_FIELD_NUMBER = 24;
+  /**
+   * <pre>
+   * `well_known_regex` specifies a common well-known pattern
+   * defined as a regex. If the field value doesn't match the well-known
+   * regex, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid HTTP header value
+   *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+   * }
+   * ```
+   *
+   * #### KnownRegex
+   *
+   * `well_known_regex` contains some well-known patterns.
+   *
+   * | Name                          | Number | Description                               |
+   * |-------------------------------|--------|-------------------------------------------|
+   * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+   * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+   * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+   * </pre>
+   *
+   * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the wellKnownRegex field is set.
+   */
+  public boolean hasWellKnownRegex() {
+    return wellKnownCase_ == 24;
+  }
+  /**
+   * <pre>
+   * `well_known_regex` specifies a common well-known pattern
+   * defined as a regex. If the field value doesn't match the well-known
+   * regex, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid HTTP header value
+   *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+   * }
+   * ```
+   *
+   * #### KnownRegex
+   *
+   * `well_known_regex` contains some well-known patterns.
+   *
+   * | Name                          | Number | Description                               |
+   * |-------------------------------|--------|-------------------------------------------|
+   * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+   * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+   * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+   * </pre>
+   *
+   * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+   * @return The enum numeric value on the wire for wellKnownRegex.
+   */
+  public int getWellKnownRegexValue() {
+    if (wellKnownCase_ == 24) {
+      return (java.lang.Integer) wellKnown_;
+    }
+    return 0;
+  }
+  /**
+   * <pre>
+   * `well_known_regex` specifies a common well-known pattern
+   * defined as a regex. If the field value doesn't match the well-known
+   * regex, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid HTTP header value
+   *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+   * }
+   * ```
+   *
+   * #### KnownRegex
+   *
+   * `well_known_regex` contains some well-known patterns.
+   *
+   * | Name                          | Number | Description                               |
+   * |-------------------------------|--------|-------------------------------------------|
+   * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+   * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+   * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+   * </pre>
+   *
+   * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+   * @return The wellKnownRegex.
+   */
+  public de.danet.buf.validate.KnownRegex getWellKnownRegex() {
+    if (wellKnownCase_ == 24) {
+      de.danet.buf.validate.KnownRegex result = de.danet.buf.validate.KnownRegex.forNumber(
+          (java.lang.Integer) wellKnown_);
+      return result == null ? de.danet.buf.validate.KnownRegex.UNRECOGNIZED : result;
+    }
+    return de.danet.buf.validate.KnownRegex.KNOWN_REGEX_UNSPECIFIED;
+  }
+
+  public static final int STRICT_FIELD_NUMBER = 25;
+  private boolean strict_ = false;
+  /**
+   * <pre>
+   * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+   * enable strict header validation. By default, this is true, and HTTP header
+   * validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
+   * validations that only disallow `&#92;r&#92;n&#92;0` characters, which can be used to
+   * bypass header matching rules.
+   *
+   * ```proto
+   * message MyString {
+   *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+   *   string value = 1 [(buf.validate.field).string.strict = false];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool strict = 25 [json_name = "strict"];</code>
+   * @return Whether the strict field is set.
+   */
+  @java.lang.Override
+  public boolean hasStrict() {
+    return ((bitField0_ & 0x00001000) != 0);
+  }
+  /**
+   * <pre>
+   * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+   * enable strict header validation. By default, this is true, and HTTP header
+   * validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
+   * validations that only disallow `&#92;r&#92;n&#92;0` characters, which can be used to
+   * bypass header matching rules.
+   *
+   * ```proto
+   * message MyString {
+   *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+   *   string value = 1 [(buf.validate.field).string.strict = false];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool strict = 25 [json_name = "strict"];</code>
+   * @return The strict.
+   */
+  @java.lang.Override
+  public boolean getStrict() {
+    return strict_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, const_);
+    }
+    if (((bitField0_ & 0x00000004) != 0)) {
+      output.writeUInt64(2, minLen_);
+    }
+    if (((bitField0_ & 0x00000008) != 0)) {
+      output.writeUInt64(3, maxLen_);
+    }
+    if (((bitField0_ & 0x00000020) != 0)) {
+      output.writeUInt64(4, minBytes_);
+    }
+    if (((bitField0_ & 0x00000040) != 0)) {
+      output.writeUInt64(5, maxBytes_);
+    }
+    if (((bitField0_ & 0x00000080) != 0)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 6, pattern_);
+    }
+    if (((bitField0_ & 0x00000100) != 0)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 7, prefix_);
+    }
+    if (((bitField0_ & 0x00000200) != 0)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 8, suffix_);
+    }
+    if (((bitField0_ & 0x00000400) != 0)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 9, contains_);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 10, in_.getRaw(i));
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 11, notIn_.getRaw(i));
+    }
+    if (wellKnownCase_ == 12) {
+      output.writeBool(
+          12, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 13) {
+      output.writeBool(
+          13, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 14) {
+      output.writeBool(
+          14, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 15) {
+      output.writeBool(
+          15, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 16) {
+      output.writeBool(
+          16, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 17) {
+      output.writeBool(
+          17, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 18) {
+      output.writeBool(
+          18, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      output.writeUInt64(19, len_);
+    }
+    if (((bitField0_ & 0x00000010) != 0)) {
+      output.writeUInt64(20, lenBytes_);
+    }
+    if (wellKnownCase_ == 21) {
+      output.writeBool(
+          21, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 22) {
+      output.writeBool(
+          22, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (((bitField0_ & 0x00000800) != 0)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 23, notContains_);
+    }
+    if (wellKnownCase_ == 24) {
+      output.writeEnum(24, ((java.lang.Integer) wellKnown_));
+    }
+    if (((bitField0_ & 0x00001000) != 0)) {
+      output.writeBool(25, strict_);
+    }
+    if (wellKnownCase_ == 26) {
+      output.writeBool(
+          26, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 27) {
+      output.writeBool(
+          27, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 28) {
+      output.writeBool(
+          28, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 29) {
+      output.writeBool(
+          29, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 30) {
+      output.writeBool(
+          30, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 31) {
+      output.writeBool(
+          31, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, const_);
+    }
+    if (((bitField0_ & 0x00000004) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(2, minLen_);
+    }
+    if (((bitField0_ & 0x00000008) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(3, maxLen_);
+    }
+    if (((bitField0_ & 0x00000020) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(4, minBytes_);
+    }
+    if (((bitField0_ & 0x00000040) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(5, maxBytes_);
+    }
+    if (((bitField0_ & 0x00000080) != 0)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, pattern_);
+    }
+    if (((bitField0_ & 0x00000100) != 0)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, prefix_);
+    }
+    if (((bitField0_ & 0x00000200) != 0)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, suffix_);
+    }
+    if (((bitField0_ & 0x00000400) != 0)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, contains_);
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += computeStringSizeNoTag(in_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getInList().size();
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += computeStringSizeNoTag(notIn_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getNotInList().size();
+    }
+    if (wellKnownCase_ == 12) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            12, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 13) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            13, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 14) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            14, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 15) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            15, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 16) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            16, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 17) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            17, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 18) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            18, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(19, len_);
+    }
+    if (((bitField0_ & 0x00000010) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(20, lenBytes_);
+    }
+    if (wellKnownCase_ == 21) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            21, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 22) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            22, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (((bitField0_ & 0x00000800) != 0)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(23, notContains_);
+    }
+    if (wellKnownCase_ == 24) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeEnumSize(24, ((java.lang.Integer) wellKnown_));
+    }
+    if (((bitField0_ & 0x00001000) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(25, strict_);
+    }
+    if (wellKnownCase_ == 26) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            26, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 27) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            27, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 28) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            28, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 29) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            29, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 30) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            30, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    if (wellKnownCase_ == 31) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            31, (boolean)((java.lang.Boolean) wellKnown_));
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.StringRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.StringRules other = (de.danet.buf.validate.StringRules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (!getConst()
+          .equals(other.getConst())) return false;
+    }
+    if (hasLen() != other.hasLen()) return false;
+    if (hasLen()) {
+      if (getLen()
+          != other.getLen()) return false;
+    }
+    if (hasMinLen() != other.hasMinLen()) return false;
+    if (hasMinLen()) {
+      if (getMinLen()
+          != other.getMinLen()) return false;
+    }
+    if (hasMaxLen() != other.hasMaxLen()) return false;
+    if (hasMaxLen()) {
+      if (getMaxLen()
+          != other.getMaxLen()) return false;
+    }
+    if (hasLenBytes() != other.hasLenBytes()) return false;
+    if (hasLenBytes()) {
+      if (getLenBytes()
+          != other.getLenBytes()) return false;
+    }
+    if (hasMinBytes() != other.hasMinBytes()) return false;
+    if (hasMinBytes()) {
+      if (getMinBytes()
+          != other.getMinBytes()) return false;
+    }
+    if (hasMaxBytes() != other.hasMaxBytes()) return false;
+    if (hasMaxBytes()) {
+      if (getMaxBytes()
+          != other.getMaxBytes()) return false;
+    }
+    if (hasPattern() != other.hasPattern()) return false;
+    if (hasPattern()) {
+      if (!getPattern()
+          .equals(other.getPattern())) return false;
+    }
+    if (hasPrefix() != other.hasPrefix()) return false;
+    if (hasPrefix()) {
+      if (!getPrefix()
+          .equals(other.getPrefix())) return false;
+    }
+    if (hasSuffix() != other.hasSuffix()) return false;
+    if (hasSuffix()) {
+      if (!getSuffix()
+          .equals(other.getSuffix())) return false;
+    }
+    if (hasContains() != other.hasContains()) return false;
+    if (hasContains()) {
+      if (!getContains()
+          .equals(other.getContains())) return false;
+    }
+    if (hasNotContains() != other.hasNotContains()) return false;
+    if (hasNotContains()) {
+      if (!getNotContains()
+          .equals(other.getNotContains())) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (hasStrict() != other.hasStrict()) return false;
+    if (hasStrict()) {
+      if (getStrict()
+          != other.getStrict()) return false;
+    }
+    if (!getWellKnownCase().equals(other.getWellKnownCase())) return false;
+    switch (wellKnownCase_) {
+      case 12:
+        if (getEmail()
+            != other.getEmail()) return false;
+        break;
+      case 13:
+        if (getHostname()
+            != other.getHostname()) return false;
+        break;
+      case 14:
+        if (getIp()
+            != other.getIp()) return false;
+        break;
+      case 15:
+        if (getIpv4()
+            != other.getIpv4()) return false;
+        break;
+      case 16:
+        if (getIpv6()
+            != other.getIpv6()) return false;
+        break;
+      case 17:
+        if (getUri()
+            != other.getUri()) return false;
+        break;
+      case 18:
+        if (getUriRef()
+            != other.getUriRef()) return false;
+        break;
+      case 21:
+        if (getAddress()
+            != other.getAddress()) return false;
+        break;
+      case 22:
+        if (getUuid()
+            != other.getUuid()) return false;
+        break;
+      case 26:
+        if (getIpWithPrefixlen()
+            != other.getIpWithPrefixlen()) return false;
+        break;
+      case 27:
+        if (getIpv4WithPrefixlen()
+            != other.getIpv4WithPrefixlen()) return false;
+        break;
+      case 28:
+        if (getIpv6WithPrefixlen()
+            != other.getIpv6WithPrefixlen()) return false;
+        break;
+      case 29:
+        if (getIpPrefix()
+            != other.getIpPrefix()) return false;
+        break;
+      case 30:
+        if (getIpv4Prefix()
+            != other.getIpv4Prefix()) return false;
+        break;
+      case 31:
+        if (getIpv6Prefix()
+            != other.getIpv6Prefix()) return false;
+        break;
+      case 24:
+        if (getWellKnownRegexValue()
+            != other.getWellKnownRegexValue()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst().hashCode();
+    }
+    if (hasLen()) {
+      hash = (37 * hash) + LEN_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getLen());
+    }
+    if (hasMinLen()) {
+      hash = (37 * hash) + MIN_LEN_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMinLen());
+    }
+    if (hasMaxLen()) {
+      hash = (37 * hash) + MAX_LEN_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMaxLen());
+    }
+    if (hasLenBytes()) {
+      hash = (37 * hash) + LEN_BYTES_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getLenBytes());
+    }
+    if (hasMinBytes()) {
+      hash = (37 * hash) + MIN_BYTES_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMinBytes());
+    }
+    if (hasMaxBytes()) {
+      hash = (37 * hash) + MAX_BYTES_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMaxBytes());
+    }
+    if (hasPattern()) {
+      hash = (37 * hash) + PATTERN_FIELD_NUMBER;
+      hash = (53 * hash) + getPattern().hashCode();
+    }
+    if (hasPrefix()) {
+      hash = (37 * hash) + PREFIX_FIELD_NUMBER;
+      hash = (53 * hash) + getPrefix().hashCode();
+    }
+    if (hasSuffix()) {
+      hash = (37 * hash) + SUFFIX_FIELD_NUMBER;
+      hash = (53 * hash) + getSuffix().hashCode();
+    }
+    if (hasContains()) {
+      hash = (37 * hash) + CONTAINS_FIELD_NUMBER;
+      hash = (53 * hash) + getContains().hashCode();
+    }
+    if (hasNotContains()) {
+      hash = (37 * hash) + NOT_CONTAINS_FIELD_NUMBER;
+      hash = (53 * hash) + getNotContains().hashCode();
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    if (hasStrict()) {
+      hash = (37 * hash) + STRICT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getStrict());
+    }
+    switch (wellKnownCase_) {
+      case 12:
+        hash = (37 * hash) + EMAIL_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getEmail());
+        break;
+      case 13:
+        hash = (37 * hash) + HOSTNAME_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getHostname());
+        break;
+      case 14:
+        hash = (37 * hash) + IP_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIp());
+        break;
+      case 15:
+        hash = (37 * hash) + IPV4_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpv4());
+        break;
+      case 16:
+        hash = (37 * hash) + IPV6_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpv6());
+        break;
+      case 17:
+        hash = (37 * hash) + URI_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getUri());
+        break;
+      case 18:
+        hash = (37 * hash) + URI_REF_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getUriRef());
+        break;
+      case 21:
+        hash = (37 * hash) + ADDRESS_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getAddress());
+        break;
+      case 22:
+        hash = (37 * hash) + UUID_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getUuid());
+        break;
+      case 26:
+        hash = (37 * hash) + IP_WITH_PREFIXLEN_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpWithPrefixlen());
+        break;
+      case 27:
+        hash = (37 * hash) + IPV4_WITH_PREFIXLEN_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpv4WithPrefixlen());
+        break;
+      case 28:
+        hash = (37 * hash) + IPV6_WITH_PREFIXLEN_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpv6WithPrefixlen());
+        break;
+      case 29:
+        hash = (37 * hash) + IP_PREFIX_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpPrefix());
+        break;
+      case 30:
+        hash = (37 * hash) + IPV4_PREFIX_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpv4Prefix());
+        break;
+      case 31:
+        hash = (37 * hash) + IPV6_PREFIX_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getIpv6Prefix());
+        break;
+      case 24:
+        hash = (37 * hash) + WELL_KNOWN_REGEX_FIELD_NUMBER;
+        hash = (53 * hash) + getWellKnownRegexValue();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.StringRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.StringRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.StringRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.StringRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.StringRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * StringRules describes the constraints applied to `string` values These
+   * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.StringRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.StringRules)
+      de.danet.buf.validate.StringRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_StringRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_StringRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.StringRules.class, de.danet.buf.validate.StringRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.StringRules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = "";
+      len_ = 0L;
+      minLen_ = 0L;
+      maxLen_ = 0L;
+      lenBytes_ = 0L;
+      minBytes_ = 0L;
+      maxBytes_ = 0L;
+      pattern_ = "";
+      prefix_ = "";
+      suffix_ = "";
+      contains_ = "";
+      notContains_ = "";
+      in_ =
+          com.google.protobuf.LazyStringArrayList.emptyList();
+      notIn_ =
+          com.google.protobuf.LazyStringArrayList.emptyList();
+      strict_ = false;
+      wellKnownCase_ = 0;
+      wellKnown_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_StringRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.StringRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.StringRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.StringRules build() {
+      de.danet.buf.validate.StringRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.StringRules buildPartial() {
+      de.danet.buf.validate.StringRules result = new de.danet.buf.validate.StringRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.StringRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.len_ = len_;
+        to_bitField0_ |= 0x00000002;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        result.minLen_ = minLen_;
+        to_bitField0_ |= 0x00000004;
+      }
+      if (((from_bitField0_ & 0x00000008) != 0)) {
+        result.maxLen_ = maxLen_;
+        to_bitField0_ |= 0x00000008;
+      }
+      if (((from_bitField0_ & 0x00000010) != 0)) {
+        result.lenBytes_ = lenBytes_;
+        to_bitField0_ |= 0x00000010;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        result.minBytes_ = minBytes_;
+        to_bitField0_ |= 0x00000020;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        result.maxBytes_ = maxBytes_;
+        to_bitField0_ |= 0x00000040;
+      }
+      if (((from_bitField0_ & 0x00000080) != 0)) {
+        result.pattern_ = pattern_;
+        to_bitField0_ |= 0x00000080;
+      }
+      if (((from_bitField0_ & 0x00000100) != 0)) {
+        result.prefix_ = prefix_;
+        to_bitField0_ |= 0x00000100;
+      }
+      if (((from_bitField0_ & 0x00000200) != 0)) {
+        result.suffix_ = suffix_;
+        to_bitField0_ |= 0x00000200;
+      }
+      if (((from_bitField0_ & 0x00000400) != 0)) {
+        result.contains_ = contains_;
+        to_bitField0_ |= 0x00000400;
+      }
+      if (((from_bitField0_ & 0x00000800) != 0)) {
+        result.notContains_ = notContains_;
+        to_bitField0_ |= 0x00000800;
+      }
+      if (((from_bitField0_ & 0x00001000) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00002000) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      if (((from_bitField0_ & 0x40000000) != 0)) {
+        result.strict_ = strict_;
+        to_bitField0_ |= 0x00001000;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.StringRules result) {
+      result.wellKnownCase_ = wellKnownCase_;
+      result.wellKnown_ = this.wellKnown_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.StringRules) {
+        return mergeFrom((de.danet.buf.validate.StringRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.StringRules other) {
+      if (other == de.danet.buf.validate.StringRules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        const_ = other.const_;
+        bitField0_ |= 0x00000001;
+        onChanged();
+      }
+      if (other.hasLen()) {
+        setLen(other.getLen());
+      }
+      if (other.hasMinLen()) {
+        setMinLen(other.getMinLen());
+      }
+      if (other.hasMaxLen()) {
+        setMaxLen(other.getMaxLen());
+      }
+      if (other.hasLenBytes()) {
+        setLenBytes(other.getLenBytes());
+      }
+      if (other.hasMinBytes()) {
+        setMinBytes(other.getMinBytes());
+      }
+      if (other.hasMaxBytes()) {
+        setMaxBytes(other.getMaxBytes());
+      }
+      if (other.hasPattern()) {
+        pattern_ = other.pattern_;
+        bitField0_ |= 0x00000080;
+        onChanged();
+      }
+      if (other.hasPrefix()) {
+        prefix_ = other.prefix_;
+        bitField0_ |= 0x00000100;
+        onChanged();
+      }
+      if (other.hasSuffix()) {
+        suffix_ = other.suffix_;
+        bitField0_ |= 0x00000200;
+        onChanged();
+      }
+      if (other.hasContains()) {
+        contains_ = other.contains_;
+        bitField0_ |= 0x00000400;
+        onChanged();
+      }
+      if (other.hasNotContains()) {
+        notContains_ = other.notContains_;
+        bitField0_ |= 0x00000800;
+        onChanged();
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          bitField0_ |= 0x00001000;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          bitField0_ |= 0x00002000;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      if (other.hasStrict()) {
+        setStrict(other.getStrict());
+      }
+      switch (other.getWellKnownCase()) {
+        case EMAIL: {
+          setEmail(other.getEmail());
+          break;
+        }
+        case HOSTNAME: {
+          setHostname(other.getHostname());
+          break;
+        }
+        case IP: {
+          setIp(other.getIp());
+          break;
+        }
+        case IPV4: {
+          setIpv4(other.getIpv4());
+          break;
+        }
+        case IPV6: {
+          setIpv6(other.getIpv6());
+          break;
+        }
+        case URI: {
+          setUri(other.getUri());
+          break;
+        }
+        case URI_REF: {
+          setUriRef(other.getUriRef());
+          break;
+        }
+        case ADDRESS: {
+          setAddress(other.getAddress());
+          break;
+        }
+        case UUID: {
+          setUuid(other.getUuid());
+          break;
+        }
+        case IP_WITH_PREFIXLEN: {
+          setIpWithPrefixlen(other.getIpWithPrefixlen());
+          break;
+        }
+        case IPV4_WITH_PREFIXLEN: {
+          setIpv4WithPrefixlen(other.getIpv4WithPrefixlen());
+          break;
+        }
+        case IPV6_WITH_PREFIXLEN: {
+          setIpv6WithPrefixlen(other.getIpv6WithPrefixlen());
+          break;
+        }
+        case IP_PREFIX: {
+          setIpPrefix(other.getIpPrefix());
+          break;
+        }
+        case IPV4_PREFIX: {
+          setIpv4Prefix(other.getIpv4Prefix());
+          break;
+        }
+        case IPV6_PREFIX: {
+          setIpv6Prefix(other.getIpv6Prefix());
+          break;
+        }
+        case WELL_KNOWN_REGEX: {
+          setWellKnownRegexValue(other.getWellKnownRegexValue());
+          break;
+        }
+        case WELLKNOWN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              const_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 10
+            case 16: {
+              minLen_ = input.readUInt64();
+              bitField0_ |= 0x00000004;
+              break;
+            } // case 16
+            case 24: {
+              maxLen_ = input.readUInt64();
+              bitField0_ |= 0x00000008;
+              break;
+            } // case 24
+            case 32: {
+              minBytes_ = input.readUInt64();
+              bitField0_ |= 0x00000020;
+              break;
+            } // case 32
+            case 40: {
+              maxBytes_ = input.readUInt64();
+              bitField0_ |= 0x00000040;
+              break;
+            } // case 40
+            case 50: {
+              pattern_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000080;
+              break;
+            } // case 50
+            case 58: {
+              prefix_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000100;
+              break;
+            } // case 58
+            case 66: {
+              suffix_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000200;
+              break;
+            } // case 66
+            case 74: {
+              contains_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000400;
+              break;
+            } // case 74
+            case 82: {
+              java.lang.String s = input.readStringRequireUtf8();
+              ensureInIsMutable();
+              in_.add(s);
+              break;
+            } // case 82
+            case 90: {
+              java.lang.String s = input.readStringRequireUtf8();
+              ensureNotInIsMutable();
+              notIn_.add(s);
+              break;
+            } // case 90
+            case 96: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 12;
+              break;
+            } // case 96
+            case 104: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 13;
+              break;
+            } // case 104
+            case 112: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 14;
+              break;
+            } // case 112
+            case 120: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 15;
+              break;
+            } // case 120
+            case 128: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 16;
+              break;
+            } // case 128
+            case 136: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 17;
+              break;
+            } // case 136
+            case 144: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 18;
+              break;
+            } // case 144
+            case 152: {
+              len_ = input.readUInt64();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 152
+            case 160: {
+              lenBytes_ = input.readUInt64();
+              bitField0_ |= 0x00000010;
+              break;
+            } // case 160
+            case 168: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 21;
+              break;
+            } // case 168
+            case 176: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 22;
+              break;
+            } // case 176
+            case 186: {
+              notContains_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000800;
+              break;
+            } // case 186
+            case 192: {
+              int rawValue = input.readEnum();
+              wellKnownCase_ = 24;
+              wellKnown_ = rawValue;
+              break;
+            } // case 192
+            case 200: {
+              strict_ = input.readBool();
+              bitField0_ |= 0x40000000;
+              break;
+            } // case 200
+            case 208: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 26;
+              break;
+            } // case 208
+            case 216: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 27;
+              break;
+            } // case 216
+            case 224: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 28;
+              break;
+            } // case 224
+            case 232: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 29;
+              break;
+            } // case 232
+            case 240: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 30;
+              break;
+            } // case 240
+            case 248: {
+              wellKnown_ = input.readBool();
+              wellKnownCase_ = 31;
+              break;
+            } // case 248
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int wellKnownCase_ = 0;
+    private java.lang.Object wellKnown_;
+    public WellKnownCase
+        getWellKnownCase() {
+      return WellKnownCase.forNumber(
+          wellKnownCase_);
+    }
+
+    public Builder clearWellKnown() {
+      wellKnownCase_ = 0;
+      wellKnown_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private java.lang.Object const_ = "";
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must equal `hello`
+     *   string value = 1 [(buf.validate.field).string.const = "hello"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must equal `hello`
+     *   string value = 1 [(buf.validate.field).string.const = "hello"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    public java.lang.String getConst() {
+      java.lang.Object ref = const_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        const_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must equal `hello`
+     *   string value = 1 [(buf.validate.field).string.const = "hello"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The bytes for const.
+     */
+    public com.google.protobuf.ByteString
+        getConstBytes() {
+      java.lang.Object ref = const_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        const_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must equal `hello`
+     *   string value = 1 [(buf.validate.field).string.const = "hello"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must equal `hello`
+     *   string value = 1 [(buf.validate.field).string.const = "hello"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      const_ = getDefaultInstance().getConst();
+      bitField0_ = (bitField0_ & ~0x00000001);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must equal `hello`
+     *   string value = 1 [(buf.validate.field).string.const = "hello"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes for const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConstBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+
+    private long len_ ;
+    /**
+     * <pre>
+     * `len` dictates that the field value must have the specified
+     * number of characters (Unicode code points), which may differ from the number
+     * of bytes in the string. If the field value does not meet the specified
+     * length, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be 5 characters
+     *   string value = 1 [(buf.validate.field).string.len = 5];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len = 19 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the len field is set.
+     */
+    @java.lang.Override
+    public boolean hasLen() {
+      return ((bitField0_ & 0x00000002) != 0);
+    }
+    /**
+     * <pre>
+     * `len` dictates that the field value must have the specified
+     * number of characters (Unicode code points), which may differ from the number
+     * of bytes in the string. If the field value does not meet the specified
+     * length, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be 5 characters
+     *   string value = 1 [(buf.validate.field).string.len = 5];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len = 19 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+     * @return The len.
+     */
+    @java.lang.Override
+    public long getLen() {
+      return len_;
+    }
+    /**
+     * <pre>
+     * `len` dictates that the field value must have the specified
+     * number of characters (Unicode code points), which may differ from the number
+     * of bytes in the string. If the field value does not meet the specified
+     * length, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be 5 characters
+     *   string value = 1 [(buf.validate.field).string.len = 5];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len = 19 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The len to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLen(long value) {
+
+      len_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `len` dictates that the field value must have the specified
+     * number of characters (Unicode code points), which may differ from the number
+     * of bytes in the string. If the field value does not meet the specified
+     * length, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be 5 characters
+     *   string value = 1 [(buf.validate.field).string.len = 5];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len = 19 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLen() {
+      bitField0_ = (bitField0_ & ~0x00000002);
+      len_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long minLen_ ;
+    /**
+     * <pre>
+     * `min_len` specifies that the field value must have at least the specified
+     * number of characters (Unicode code points), which may differ from the number
+     * of bytes in the string. If the field value contains fewer characters, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at least 3 characters
+     *   string value = 1 [(buf.validate.field).string.min_len = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the minLen field is set.
+     */
+    @java.lang.Override
+    public boolean hasMinLen() {
+      return ((bitField0_ & 0x00000004) != 0);
+    }
+    /**
+     * <pre>
+     * `min_len` specifies that the field value must have at least the specified
+     * number of characters (Unicode code points), which may differ from the number
+     * of bytes in the string. If the field value contains fewer characters, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at least 3 characters
+     *   string value = 1 [(buf.validate.field).string.min_len = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return The minLen.
+     */
+    @java.lang.Override
+    public long getMinLen() {
+      return minLen_;
+    }
+    /**
+     * <pre>
+     * `min_len` specifies that the field value must have at least the specified
+     * number of characters (Unicode code points), which may differ from the number
+     * of bytes in the string. If the field value contains fewer characters, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at least 3 characters
+     *   string value = 1 [(buf.validate.field).string.min_len = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The minLen to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMinLen(long value) {
+
+      minLen_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `min_len` specifies that the field value must have at least the specified
+     * number of characters (Unicode code points), which may differ from the number
+     * of bytes in the string. If the field value contains fewer characters, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at least 3 characters
+     *   string value = 1 [(buf.validate.field).string.min_len = 3];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMinLen() {
+      bitField0_ = (bitField0_ & ~0x00000004);
+      minLen_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long maxLen_ ;
+    /**
+     * <pre>
+     * `max_len` specifies that the field value must have no more than the specified
+     * number of characters (Unicode code points), which may differ from the
+     * number of bytes in the string. If the field value contains more characters,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at most 10 characters
+     *   string value = 1 [(buf.validate.field).string.max_len = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the maxLen field is set.
+     */
+    @java.lang.Override
+    public boolean hasMaxLen() {
+      return ((bitField0_ & 0x00000008) != 0);
+    }
+    /**
+     * <pre>
+     * `max_len` specifies that the field value must have no more than the specified
+     * number of characters (Unicode code points), which may differ from the
+     * number of bytes in the string. If the field value contains more characters,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at most 10 characters
+     *   string value = 1 [(buf.validate.field).string.max_len = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return The maxLen.
+     */
+    @java.lang.Override
+    public long getMaxLen() {
+      return maxLen_;
+    }
+    /**
+     * <pre>
+     * `max_len` specifies that the field value must have no more than the specified
+     * number of characters (Unicode code points), which may differ from the
+     * number of bytes in the string. If the field value contains more characters,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at most 10 characters
+     *   string value = 1 [(buf.validate.field).string.max_len = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The maxLen to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMaxLen(long value) {
+
+      maxLen_ = value;
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `max_len` specifies that the field value must have no more than the specified
+     * number of characters (Unicode code points), which may differ from the
+     * number of bytes in the string. If the field value contains more characters,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at most 10 characters
+     *   string value = 1 [(buf.validate.field).string.max_len = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMaxLen() {
+      bitField0_ = (bitField0_ & ~0x00000008);
+      maxLen_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long lenBytes_ ;
+    /**
+     * <pre>
+     * `len_bytes` dictates that the field value must have the specified number of
+     * bytes. If the field value does not match the specified length in bytes,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be 6 bytes
+     *   string value = 1 [(buf.validate.field).string.len_bytes = 6];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len_bytes = 20 [json_name = "lenBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lenBytes field is set.
+     */
+    @java.lang.Override
+    public boolean hasLenBytes() {
+      return ((bitField0_ & 0x00000010) != 0);
+    }
+    /**
+     * <pre>
+     * `len_bytes` dictates that the field value must have the specified number of
+     * bytes. If the field value does not match the specified length in bytes,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be 6 bytes
+     *   string value = 1 [(buf.validate.field).string.len_bytes = 6];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len_bytes = 20 [json_name = "lenBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lenBytes.
+     */
+    @java.lang.Override
+    public long getLenBytes() {
+      return lenBytes_;
+    }
+    /**
+     * <pre>
+     * `len_bytes` dictates that the field value must have the specified number of
+     * bytes. If the field value does not match the specified length in bytes,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be 6 bytes
+     *   string value = 1 [(buf.validate.field).string.len_bytes = 6];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len_bytes = 20 [json_name = "lenBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lenBytes to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLenBytes(long value) {
+
+      lenBytes_ = value;
+      bitField0_ |= 0x00000010;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `len_bytes` dictates that the field value must have the specified number of
+     * bytes. If the field value does not match the specified length in bytes,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be 6 bytes
+     *   string value = 1 [(buf.validate.field).string.len_bytes = 6];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 len_bytes = 20 [json_name = "lenBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLenBytes() {
+      bitField0_ = (bitField0_ & ~0x00000010);
+      lenBytes_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long minBytes_ ;
+    /**
+     * <pre>
+     * `min_bytes` specifies that the field value must have at least the specified
+     * number of bytes. If the field value contains fewer bytes, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at least 4 bytes
+     *   string value = 1 [(buf.validate.field).string.min_bytes = 4];
+     * }
+     *
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_bytes = 4 [json_name = "minBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the minBytes field is set.
+     */
+    @java.lang.Override
+    public boolean hasMinBytes() {
+      return ((bitField0_ & 0x00000020) != 0);
+    }
+    /**
+     * <pre>
+     * `min_bytes` specifies that the field value must have at least the specified
+     * number of bytes. If the field value contains fewer bytes, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at least 4 bytes
+     *   string value = 1 [(buf.validate.field).string.min_bytes = 4];
+     * }
+     *
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_bytes = 4 [json_name = "minBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return The minBytes.
+     */
+    @java.lang.Override
+    public long getMinBytes() {
+      return minBytes_;
+    }
+    /**
+     * <pre>
+     * `min_bytes` specifies that the field value must have at least the specified
+     * number of bytes. If the field value contains fewer bytes, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at least 4 bytes
+     *   string value = 1 [(buf.validate.field).string.min_bytes = 4];
+     * }
+     *
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_bytes = 4 [json_name = "minBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The minBytes to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMinBytes(long value) {
+
+      minBytes_ = value;
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `min_bytes` specifies that the field value must have at least the specified
+     * number of bytes. If the field value contains fewer bytes, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at least 4 bytes
+     *   string value = 1 [(buf.validate.field).string.min_bytes = 4];
+     * }
+     *
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 min_bytes = 4 [json_name = "minBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMinBytes() {
+      bitField0_ = (bitField0_ & ~0x00000020);
+      minBytes_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long maxBytes_ ;
+    /**
+     * <pre>
+     * `max_bytes` specifies that the field value must have no more than the
+     *specified number of bytes. If the field value contains more bytes, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at most 8 bytes
+     *   string value = 1 [(buf.validate.field).string.max_bytes = 8];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_bytes = 5 [json_name = "maxBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the maxBytes field is set.
+     */
+    @java.lang.Override
+    public boolean hasMaxBytes() {
+      return ((bitField0_ & 0x00000040) != 0);
+    }
+    /**
+     * <pre>
+     * `max_bytes` specifies that the field value must have no more than the
+     *specified number of bytes. If the field value contains more bytes, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at most 8 bytes
+     *   string value = 1 [(buf.validate.field).string.max_bytes = 8];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_bytes = 5 [json_name = "maxBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return The maxBytes.
+     */
+    @java.lang.Override
+    public long getMaxBytes() {
+      return maxBytes_;
+    }
+    /**
+     * <pre>
+     * `max_bytes` specifies that the field value must have no more than the
+     *specified number of bytes. If the field value contains more bytes, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at most 8 bytes
+     *   string value = 1 [(buf.validate.field).string.max_bytes = 8];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_bytes = 5 [json_name = "maxBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The maxBytes to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMaxBytes(long value) {
+
+      maxBytes_ = value;
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `max_bytes` specifies that the field value must have no more than the
+     *specified number of bytes. If the field value contains more bytes, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value length must be at most 8 bytes
+     *   string value = 1 [(buf.validate.field).string.max_bytes = 8];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 max_bytes = 5 [json_name = "maxBytes", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMaxBytes() {
+      bitField0_ = (bitField0_ & ~0x00000040);
+      maxBytes_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object pattern_ = "";
+    /**
+     * <pre>
+     * `pattern` specifies that the field value must match the specified
+     * regular expression (RE2 syntax), with the expression provided without any
+     * delimiters. If the field value doesn't match the regular expression, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not match regex pattern `^[a-zA-Z]//$`
+     *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the pattern field is set.
+     */
+    public boolean hasPattern() {
+      return ((bitField0_ & 0x00000080) != 0);
+    }
+    /**
+     * <pre>
+     * `pattern` specifies that the field value must match the specified
+     * regular expression (RE2 syntax), with the expression provided without any
+     * delimiters. If the field value doesn't match the regular expression, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not match regex pattern `^[a-zA-Z]//$`
+     *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @return The pattern.
+     */
+    public java.lang.String getPattern() {
+      java.lang.Object ref = pattern_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        pattern_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `pattern` specifies that the field value must match the specified
+     * regular expression (RE2 syntax), with the expression provided without any
+     * delimiters. If the field value doesn't match the regular expression, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not match regex pattern `^[a-zA-Z]//$`
+     *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @return The bytes for pattern.
+     */
+    public com.google.protobuf.ByteString
+        getPatternBytes() {
+      java.lang.Object ref = pattern_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        pattern_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `pattern` specifies that the field value must match the specified
+     * regular expression (RE2 syntax), with the expression provided without any
+     * delimiters. If the field value doesn't match the regular expression, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not match regex pattern `^[a-zA-Z]//$`
+     *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The pattern to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPattern(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      pattern_ = value;
+      bitField0_ |= 0x00000080;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `pattern` specifies that the field value must match the specified
+     * regular expression (RE2 syntax), with the expression provided without any
+     * delimiters. If the field value doesn't match the regular expression, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not match regex pattern `^[a-zA-Z]//$`
+     *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPattern() {
+      pattern_ = getDefaultInstance().getPattern();
+      bitField0_ = (bitField0_ & ~0x00000080);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `pattern` specifies that the field value must match the specified
+     * regular expression (RE2 syntax), with the expression provided without any
+     * delimiters. If the field value doesn't match the regular expression, an
+     * error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not match regex pattern `^[a-zA-Z]//$`
+     *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes for pattern to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPatternBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      pattern_ = value;
+      bitField0_ |= 0x00000080;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object prefix_ = "";
+    /**
+     * <pre>
+     * `prefix` specifies that the field value must have the
+     *specified substring at the beginning of the string. If the field value
+     * doesn't start with the specified prefix, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have prefix `pre`
+     *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the prefix field is set.
+     */
+    public boolean hasPrefix() {
+      return ((bitField0_ & 0x00000100) != 0);
+    }
+    /**
+     * <pre>
+     * `prefix` specifies that the field value must have the
+     *specified substring at the beginning of the string. If the field value
+     * doesn't start with the specified prefix, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have prefix `pre`
+     *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The prefix.
+     */
+    public java.lang.String getPrefix() {
+      java.lang.Object ref = prefix_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        prefix_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `prefix` specifies that the field value must have the
+     *specified substring at the beginning of the string. If the field value
+     * doesn't start with the specified prefix, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have prefix `pre`
+     *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The bytes for prefix.
+     */
+    public com.google.protobuf.ByteString
+        getPrefixBytes() {
+      java.lang.Object ref = prefix_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        prefix_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `prefix` specifies that the field value must have the
+     *specified substring at the beginning of the string. If the field value
+     * doesn't start with the specified prefix, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have prefix `pre`
+     *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The prefix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPrefix(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      prefix_ = value;
+      bitField0_ |= 0x00000100;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `prefix` specifies that the field value must have the
+     *specified substring at the beginning of the string. If the field value
+     * doesn't start with the specified prefix, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have prefix `pre`
+     *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPrefix() {
+      prefix_ = getDefaultInstance().getPrefix();
+      bitField0_ = (bitField0_ & ~0x00000100);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `prefix` specifies that the field value must have the
+     *specified substring at the beginning of the string. If the field value
+     * doesn't start with the specified prefix, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have prefix `pre`
+     *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes for prefix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPrefixBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      prefix_ = value;
+      bitField0_ |= 0x00000100;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object suffix_ = "";
+    /**
+     * <pre>
+     * `suffix` specifies that the field value must have the
+     *specified substring at the end of the string. If the field value doesn't
+     * end with the specified suffix, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have suffix `post`
+     *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the suffix field is set.
+     */
+    public boolean hasSuffix() {
+      return ((bitField0_ & 0x00000200) != 0);
+    }
+    /**
+     * <pre>
+     * `suffix` specifies that the field value must have the
+     *specified substring at the end of the string. If the field value doesn't
+     * end with the specified suffix, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have suffix `post`
+     *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The suffix.
+     */
+    public java.lang.String getSuffix() {
+      java.lang.Object ref = suffix_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        suffix_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `suffix` specifies that the field value must have the
+     *specified substring at the end of the string. If the field value doesn't
+     * end with the specified suffix, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have suffix `post`
+     *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The bytes for suffix.
+     */
+    public com.google.protobuf.ByteString
+        getSuffixBytes() {
+      java.lang.Object ref = suffix_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        suffix_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `suffix` specifies that the field value must have the
+     *specified substring at the end of the string. If the field value doesn't
+     * end with the specified suffix, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have suffix `post`
+     *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The suffix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSuffix(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      suffix_ = value;
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `suffix` specifies that the field value must have the
+     *specified substring at the end of the string. If the field value doesn't
+     * end with the specified suffix, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have suffix `post`
+     *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearSuffix() {
+      suffix_ = getDefaultInstance().getSuffix();
+      bitField0_ = (bitField0_ & ~0x00000200);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `suffix` specifies that the field value must have the
+     *specified substring at the end of the string. If the field value doesn't
+     * end with the specified suffix, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not have suffix `post`
+     *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes for suffix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSuffixBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      suffix_ = value;
+      bitField0_ |= 0x00000200;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object contains_ = "";
+    /**
+     * <pre>
+     * `contains` specifies that the field value must have the
+     *specified substring anywhere in the string. If the field value doesn't
+     * contain the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not contain substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the contains field is set.
+     */
+    public boolean hasContains() {
+      return ((bitField0_ & 0x00000400) != 0);
+    }
+    /**
+     * <pre>
+     * `contains` specifies that the field value must have the
+     *specified substring anywhere in the string. If the field value doesn't
+     * contain the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not contain substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @return The contains.
+     */
+    public java.lang.String getContains() {
+      java.lang.Object ref = contains_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        contains_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `contains` specifies that the field value must have the
+     *specified substring anywhere in the string. If the field value doesn't
+     * contain the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not contain substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @return The bytes for contains.
+     */
+    public com.google.protobuf.ByteString
+        getContainsBytes() {
+      java.lang.Object ref = contains_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        contains_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `contains` specifies that the field value must have the
+     *specified substring anywhere in the string. If the field value doesn't
+     * contain the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not contain substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The contains to set.
+     * @return This builder for chaining.
+     */
+    public Builder setContains(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      contains_ = value;
+      bitField0_ |= 0x00000400;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `contains` specifies that the field value must have the
+     *specified substring anywhere in the string. If the field value doesn't
+     * contain the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not contain substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearContains() {
+      contains_ = getDefaultInstance().getContains();
+      bitField0_ = (bitField0_ & ~0x00000400);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `contains` specifies that the field value must have the
+     *specified substring anywhere in the string. If the field value doesn't
+     * contain the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value does not contain substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes for contains to set.
+     * @return This builder for chaining.
+     */
+    public Builder setContainsBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      contains_ = value;
+      bitField0_ |= 0x00000400;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object notContains_ = "";
+    /**
+     * <pre>
+     * `not_contains` specifies that the field value must not have the
+     *specified substring anywhere in the string. If the field value contains
+     * the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value contains substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the notContains field is set.
+     */
+    public boolean hasNotContains() {
+      return ((bitField0_ & 0x00000800) != 0);
+    }
+    /**
+     * <pre>
+     * `not_contains` specifies that the field value must not have the
+     *specified substring anywhere in the string. If the field value contains
+     * the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value contains substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+     * @return The notContains.
+     */
+    public java.lang.String getNotContains() {
+      java.lang.Object ref = notContains_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        notContains_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `not_contains` specifies that the field value must not have the
+     *specified substring anywhere in the string. If the field value contains
+     * the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value contains substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+     * @return The bytes for notContains.
+     */
+    public com.google.protobuf.ByteString
+        getNotContainsBytes() {
+      java.lang.Object ref = notContains_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        notContains_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `not_contains` specifies that the field value must not have the
+     *specified substring anywhere in the string. If the field value contains
+     * the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value contains substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notContains to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotContains(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      notContains_ = value;
+      bitField0_ |= 0x00000800;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_contains` specifies that the field value must not have the
+     *specified substring anywhere in the string. If the field value contains
+     * the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value contains substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotContains() {
+      notContains_ = getDefaultInstance().getNotContains();
+      bitField0_ = (bitField0_ & ~0x00000800);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_contains` specifies that the field value must not have the
+     *specified substring anywhere in the string. If the field value contains
+     * the specified substring, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value contains substring `inside`.
+     *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes for notContains to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotContainsBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      notContains_ = value;
+      bitField0_ |= 0x00000800;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringArrayList in_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = new com.google.protobuf.LazyStringArrayList(in_);
+      }
+      bitField0_ |= 0x00001000;
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public java.lang.String getIn(int index) {
+      return in_.get(index);
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the in at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getInBytes(int index) {
+      return in_.getByteString(index);
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureInIsMutable();
+      in_.set(index, value);
+      bitField0_ |= 0x00001000;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureInIsMutable();
+      in_.add(value);
+      bitField0_ |= 0x00001000;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<java.lang.String> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00001000;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+      bitField0_ = (bitField0_ & ~0x00001000);;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` specifies that the field value must be equal to one of the specified
+     * values. If the field value isn't one of the specified values, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be in list ["apple", "banana"]
+     *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes of the in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addInBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      ensureInIsMutable();
+      in_.add(value);
+      bitField0_ |= 0x00001000;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringArrayList notIn_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = new com.google.protobuf.LazyStringArrayList(notIn_);
+      }
+      bitField0_ |= 0x00002000;
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public java.lang.String getNotIn(int index) {
+      return notIn_.get(index);
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the notIn at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getNotInBytes(int index) {
+      return notIn_.getByteString(index);
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureNotInIsMutable();
+      notIn_.set(index, value);
+      bitField0_ |= 0x00002000;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      ensureNotInIsMutable();
+      notIn_.add(value);
+      bitField0_ |= 0x00002000;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<java.lang.String> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00002000;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
+      bitField0_ = (bitField0_ & ~0x00002000);;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` specifies that the field value cannot be equal to any
+     * of the specified values. If the field value is one of the specified values,
+     * an error message will be generated.
+     * ```proto
+     * message MyString {
+     *   // value must not be in list ["orange", "grape"]
+     *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The bytes of the notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotInBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      ensureNotInIsMutable();
+      notIn_.add(value);
+      bitField0_ |= 0x00002000;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `email` specifies that the field value must be a valid email address
+     * (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
+     * If the field value isn't a valid email address, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid email address
+     *   string value = 1 [(buf.validate.field).string.email = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool email = 12 [json_name = "email", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the email field is set.
+     */
+    public boolean hasEmail() {
+      return wellKnownCase_ == 12;
+    }
+    /**
+     * <pre>
+     * `email` specifies that the field value must be a valid email address
+     * (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
+     * If the field value isn't a valid email address, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid email address
+     *   string value = 1 [(buf.validate.field).string.email = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool email = 12 [json_name = "email", (.buf.validate.priv.field) = { ... }</code>
+     * @return The email.
+     */
+    public boolean getEmail() {
+      if (wellKnownCase_ == 12) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `email` specifies that the field value must be a valid email address
+     * (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
+     * If the field value isn't a valid email address, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid email address
+     *   string value = 1 [(buf.validate.field).string.email = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool email = 12 [json_name = "email", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The email to set.
+     * @return This builder for chaining.
+     */
+    public Builder setEmail(boolean value) {
+
+      wellKnownCase_ = 12;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `email` specifies that the field value must be a valid email address
+     * (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
+     * If the field value isn't a valid email address, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid email address
+     *   string value = 1 [(buf.validate.field).string.email = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool email = 12 [json_name = "email", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearEmail() {
+      if (wellKnownCase_ == 12) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `hostname` specifies that the field value must be a valid
+     * hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
+     * internationalized domain names (IDNs). If the field value isn't a
+     * valid hostname, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid hostname
+     *   string value = 1 [(buf.validate.field).string.hostname = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool hostname = 13 [json_name = "hostname", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the hostname field is set.
+     */
+    public boolean hasHostname() {
+      return wellKnownCase_ == 13;
+    }
+    /**
+     * <pre>
+     * `hostname` specifies that the field value must be a valid
+     * hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
+     * internationalized domain names (IDNs). If the field value isn't a
+     * valid hostname, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid hostname
+     *   string value = 1 [(buf.validate.field).string.hostname = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool hostname = 13 [json_name = "hostname", (.buf.validate.priv.field) = { ... }</code>
+     * @return The hostname.
+     */
+    public boolean getHostname() {
+      if (wellKnownCase_ == 13) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `hostname` specifies that the field value must be a valid
+     * hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
+     * internationalized domain names (IDNs). If the field value isn't a
+     * valid hostname, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid hostname
+     *   string value = 1 [(buf.validate.field).string.hostname = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool hostname = 13 [json_name = "hostname", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The hostname to set.
+     * @return This builder for chaining.
+     */
+    public Builder setHostname(boolean value) {
+
+      wellKnownCase_ = 13;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `hostname` specifies that the field value must be a valid
+     * hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
+     * internationalized domain names (IDNs). If the field value isn't a
+     * valid hostname, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid hostname
+     *   string value = 1 [(buf.validate.field).string.hostname = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool hostname = 13 [json_name = "hostname", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearHostname() {
+      if (wellKnownCase_ == 13) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ip` specifies that the field value must be a valid IP
+     * (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
+     * If the field value isn't a valid IP address, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP address
+     *   string value = 1 [(buf.validate.field).string.ip = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip = 14 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ip field is set.
+     */
+    public boolean hasIp() {
+      return wellKnownCase_ == 14;
+    }
+    /**
+     * <pre>
+     * `ip` specifies that the field value must be a valid IP
+     * (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
+     * If the field value isn't a valid IP address, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP address
+     *   string value = 1 [(buf.validate.field).string.ip = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip = 14 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ip.
+     */
+    public boolean getIp() {
+      if (wellKnownCase_ == 14) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ip` specifies that the field value must be a valid IP
+     * (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
+     * If the field value isn't a valid IP address, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP address
+     *   string value = 1 [(buf.validate.field).string.ip = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip = 14 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ip to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIp(boolean value) {
+
+      wellKnownCase_ = 14;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ip` specifies that the field value must be a valid IP
+     * (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
+     * If the field value isn't a valid IP address, an error message will be
+     * generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP address
+     *   string value = 1 [(buf.validate.field).string.ip = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip = 14 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIp() {
+      if (wellKnownCase_ == 14) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ipv4` specifies that the field value must be a valid IPv4
+     * address. If the field value isn't a valid IPv4 address, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 address
+     *   string value = 1 [(buf.validate.field).string.ipv4 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4 = 15 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipv4 field is set.
+     */
+    public boolean hasIpv4() {
+      return wellKnownCase_ == 15;
+    }
+    /**
+     * <pre>
+     * `ipv4` specifies that the field value must be a valid IPv4
+     * address. If the field value isn't a valid IPv4 address, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 address
+     *   string value = 1 [(buf.validate.field).string.ipv4 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4 = 15 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipv4.
+     */
+    public boolean getIpv4() {
+      if (wellKnownCase_ == 15) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ipv4` specifies that the field value must be a valid IPv4
+     * address. If the field value isn't a valid IPv4 address, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 address
+     *   string value = 1 [(buf.validate.field).string.ipv4 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4 = 15 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipv4 to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpv4(boolean value) {
+
+      wellKnownCase_ = 15;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ipv4` specifies that the field value must be a valid IPv4
+     * address. If the field value isn't a valid IPv4 address, an error message
+     * will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 address
+     *   string value = 1 [(buf.validate.field).string.ipv4 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4 = 15 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpv4() {
+      if (wellKnownCase_ == 15) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ipv6` specifies that the field value must be a valid
+     * IPv6 address, without surrounding square brackets. If the field value is
+     * not a valid IPv6 address, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 address
+     *   string value = 1 [(buf.validate.field).string.ipv6 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6 = 16 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipv6 field is set.
+     */
+    public boolean hasIpv6() {
+      return wellKnownCase_ == 16;
+    }
+    /**
+     * <pre>
+     * `ipv6` specifies that the field value must be a valid
+     * IPv6 address, without surrounding square brackets. If the field value is
+     * not a valid IPv6 address, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 address
+     *   string value = 1 [(buf.validate.field).string.ipv6 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6 = 16 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipv6.
+     */
+    public boolean getIpv6() {
+      if (wellKnownCase_ == 16) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ipv6` specifies that the field value must be a valid
+     * IPv6 address, without surrounding square brackets. If the field value is
+     * not a valid IPv6 address, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 address
+     *   string value = 1 [(buf.validate.field).string.ipv6 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6 = 16 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipv6 to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpv6(boolean value) {
+
+      wellKnownCase_ = 16;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ipv6` specifies that the field value must be a valid
+     * IPv6 address, without surrounding square brackets. If the field value is
+     * not a valid IPv6 address, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 address
+     *   string value = 1 [(buf.validate.field).string.ipv6 = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6 = 16 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpv6() {
+      if (wellKnownCase_ == 16) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `uri` specifies that the field value must be a valid,
+     * absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
+     * absolute URI, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid URI
+     *   string value = 1 [(buf.validate.field).string.uri = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uri = 17 [json_name = "uri", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the uri field is set.
+     */
+    public boolean hasUri() {
+      return wellKnownCase_ == 17;
+    }
+    /**
+     * <pre>
+     * `uri` specifies that the field value must be a valid,
+     * absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
+     * absolute URI, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid URI
+     *   string value = 1 [(buf.validate.field).string.uri = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uri = 17 [json_name = "uri", (.buf.validate.priv.field) = { ... }</code>
+     * @return The uri.
+     */
+    public boolean getUri() {
+      if (wellKnownCase_ == 17) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `uri` specifies that the field value must be a valid,
+     * absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
+     * absolute URI, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid URI
+     *   string value = 1 [(buf.validate.field).string.uri = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uri = 17 [json_name = "uri", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The uri to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUri(boolean value) {
+
+      wellKnownCase_ = 17;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `uri` specifies that the field value must be a valid,
+     * absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
+     * absolute URI, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid URI
+     *   string value = 1 [(buf.validate.field).string.uri = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uri = 17 [json_name = "uri", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUri() {
+      if (wellKnownCase_ == 17) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `uri_ref` specifies that the field value must be a valid URI
+     * as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
+     * field value isn't a valid URI, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid URI
+     *   string value = 1 [(buf.validate.field).string.uri_ref = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uri_ref = 18 [json_name = "uriRef", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the uriRef field is set.
+     */
+    public boolean hasUriRef() {
+      return wellKnownCase_ == 18;
+    }
+    /**
+     * <pre>
+     * `uri_ref` specifies that the field value must be a valid URI
+     * as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
+     * field value isn't a valid URI, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid URI
+     *   string value = 1 [(buf.validate.field).string.uri_ref = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uri_ref = 18 [json_name = "uriRef", (.buf.validate.priv.field) = { ... }</code>
+     * @return The uriRef.
+     */
+    public boolean getUriRef() {
+      if (wellKnownCase_ == 18) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `uri_ref` specifies that the field value must be a valid URI
+     * as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
+     * field value isn't a valid URI, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid URI
+     *   string value = 1 [(buf.validate.field).string.uri_ref = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uri_ref = 18 [json_name = "uriRef", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The uriRef to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUriRef(boolean value) {
+
+      wellKnownCase_ = 18;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `uri_ref` specifies that the field value must be a valid URI
+     * as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
+     * field value isn't a valid URI, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid URI
+     *   string value = 1 [(buf.validate.field).string.uri_ref = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uri_ref = 18 [json_name = "uriRef", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUriRef() {
+      if (wellKnownCase_ == 18) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `address` specifies that the field value must be either a valid hostname
+     * as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
+     * (which doesn't support internationalized domain names or IDNs) or a valid
+     * IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid hostname, or ip address
+     *   string value = 1 [(buf.validate.field).string.address = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool address = 21 [json_name = "address", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the address field is set.
+     */
+    public boolean hasAddress() {
+      return wellKnownCase_ == 21;
+    }
+    /**
+     * <pre>
+     * `address` specifies that the field value must be either a valid hostname
+     * as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
+     * (which doesn't support internationalized domain names or IDNs) or a valid
+     * IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid hostname, or ip address
+     *   string value = 1 [(buf.validate.field).string.address = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool address = 21 [json_name = "address", (.buf.validate.priv.field) = { ... }</code>
+     * @return The address.
+     */
+    public boolean getAddress() {
+      if (wellKnownCase_ == 21) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `address` specifies that the field value must be either a valid hostname
+     * as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
+     * (which doesn't support internationalized domain names or IDNs) or a valid
+     * IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid hostname, or ip address
+     *   string value = 1 [(buf.validate.field).string.address = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool address = 21 [json_name = "address", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The address to set.
+     * @return This builder for chaining.
+     */
+    public Builder setAddress(boolean value) {
+
+      wellKnownCase_ = 21;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `address` specifies that the field value must be either a valid hostname
+     * as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
+     * (which doesn't support internationalized domain names or IDNs) or a valid
+     * IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
+     * message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid hostname, or ip address
+     *   string value = 1 [(buf.validate.field).string.address = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool address = 21 [json_name = "address", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearAddress() {
+      if (wellKnownCase_ == 21) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `uuid` specifies that the field value must be a valid UUID as defined by
+     * [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
+     * field value isn't a valid UUID, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid UUID
+     *   string value = 1 [(buf.validate.field).string.uuid = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uuid = 22 [json_name = "uuid", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the uuid field is set.
+     */
+    public boolean hasUuid() {
+      return wellKnownCase_ == 22;
+    }
+    /**
+     * <pre>
+     * `uuid` specifies that the field value must be a valid UUID as defined by
+     * [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
+     * field value isn't a valid UUID, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid UUID
+     *   string value = 1 [(buf.validate.field).string.uuid = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uuid = 22 [json_name = "uuid", (.buf.validate.priv.field) = { ... }</code>
+     * @return The uuid.
+     */
+    public boolean getUuid() {
+      if (wellKnownCase_ == 22) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `uuid` specifies that the field value must be a valid UUID as defined by
+     * [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
+     * field value isn't a valid UUID, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid UUID
+     *   string value = 1 [(buf.validate.field).string.uuid = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uuid = 22 [json_name = "uuid", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The uuid to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUuid(boolean value) {
+
+      wellKnownCase_ = 22;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `uuid` specifies that the field value must be a valid UUID as defined by
+     * [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
+     * field value isn't a valid UUID, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid UUID
+     *   string value = 1 [(buf.validate.field).string.uuid = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool uuid = 22 [json_name = "uuid", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUuid() {
+      if (wellKnownCase_ == 22) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
+     * address with prefix length. If the field value isn't a valid IP with prefix
+     * length, an error message will be generated.
+     *
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP with prefix length
+     *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip_with_prefixlen = 26 [json_name = "ipWithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipWithPrefixlen field is set.
+     */
+    public boolean hasIpWithPrefixlen() {
+      return wellKnownCase_ == 26;
+    }
+    /**
+     * <pre>
+     * `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
+     * address with prefix length. If the field value isn't a valid IP with prefix
+     * length, an error message will be generated.
+     *
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP with prefix length
+     *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip_with_prefixlen = 26 [json_name = "ipWithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipWithPrefixlen.
+     */
+    public boolean getIpWithPrefixlen() {
+      if (wellKnownCase_ == 26) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
+     * address with prefix length. If the field value isn't a valid IP with prefix
+     * length, an error message will be generated.
+     *
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP with prefix length
+     *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip_with_prefixlen = 26 [json_name = "ipWithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipWithPrefixlen to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpWithPrefixlen(boolean value) {
+
+      wellKnownCase_ = 26;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
+     * address with prefix length. If the field value isn't a valid IP with prefix
+     * length, an error message will be generated.
+     *
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP with prefix length
+     *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip_with_prefixlen = 26 [json_name = "ipWithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpWithPrefixlen() {
+      if (wellKnownCase_ == 26) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ipv4_with_prefixlen` specifies that the field value must be a valid
+     * IPv4 address with prefix.
+     * If the field value isn't a valid IPv4 address with prefix length,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 address with prefix lentgh
+     *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4_with_prefixlen = 27 [json_name = "ipv4WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipv4WithPrefixlen field is set.
+     */
+    public boolean hasIpv4WithPrefixlen() {
+      return wellKnownCase_ == 27;
+    }
+    /**
+     * <pre>
+     * `ipv4_with_prefixlen` specifies that the field value must be a valid
+     * IPv4 address with prefix.
+     * If the field value isn't a valid IPv4 address with prefix length,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 address with prefix lentgh
+     *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4_with_prefixlen = 27 [json_name = "ipv4WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipv4WithPrefixlen.
+     */
+    public boolean getIpv4WithPrefixlen() {
+      if (wellKnownCase_ == 27) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ipv4_with_prefixlen` specifies that the field value must be a valid
+     * IPv4 address with prefix.
+     * If the field value isn't a valid IPv4 address with prefix length,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 address with prefix lentgh
+     *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4_with_prefixlen = 27 [json_name = "ipv4WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipv4WithPrefixlen to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpv4WithPrefixlen(boolean value) {
+
+      wellKnownCase_ = 27;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ipv4_with_prefixlen` specifies that the field value must be a valid
+     * IPv4 address with prefix.
+     * If the field value isn't a valid IPv4 address with prefix length,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 address with prefix lentgh
+     *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4_with_prefixlen = 27 [json_name = "ipv4WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpv4WithPrefixlen() {
+      if (wellKnownCase_ == 27) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ipv6_with_prefixlen` specifies that the field value must be a valid
+     * IPv6 address with prefix length.
+     * If the field value is not a valid IPv6 address with prefix length,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 address prefix length
+     *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6_with_prefixlen = 28 [json_name = "ipv6WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipv6WithPrefixlen field is set.
+     */
+    public boolean hasIpv6WithPrefixlen() {
+      return wellKnownCase_ == 28;
+    }
+    /**
+     * <pre>
+     * `ipv6_with_prefixlen` specifies that the field value must be a valid
+     * IPv6 address with prefix length.
+     * If the field value is not a valid IPv6 address with prefix length,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 address prefix length
+     *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6_with_prefixlen = 28 [json_name = "ipv6WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipv6WithPrefixlen.
+     */
+    public boolean getIpv6WithPrefixlen() {
+      if (wellKnownCase_ == 28) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ipv6_with_prefixlen` specifies that the field value must be a valid
+     * IPv6 address with prefix length.
+     * If the field value is not a valid IPv6 address with prefix length,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 address prefix length
+     *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6_with_prefixlen = 28 [json_name = "ipv6WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipv6WithPrefixlen to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpv6WithPrefixlen(boolean value) {
+
+      wellKnownCase_ = 28;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ipv6_with_prefixlen` specifies that the field value must be a valid
+     * IPv6 address with prefix length.
+     * If the field value is not a valid IPv6 address with prefix length,
+     * an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 address prefix length
+     *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6_with_prefixlen = 28 [json_name = "ipv6WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpv6WithPrefixlen() {
+      if (wellKnownCase_ == 28) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
+     * If the field value isn't a valid IP prefix, an error message will be
+     * generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
+     * `127.0.0.0/16`, not `127.0.0.1/16`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP prefix
+     *    string value = 1 [(buf.validate.field).string.ip_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip_prefix = 29 [json_name = "ipPrefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipPrefix field is set.
+     */
+    public boolean hasIpPrefix() {
+      return wellKnownCase_ == 29;
+    }
+    /**
+     * <pre>
+     * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
+     * If the field value isn't a valid IP prefix, an error message will be
+     * generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
+     * `127.0.0.0/16`, not `127.0.0.1/16`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP prefix
+     *    string value = 1 [(buf.validate.field).string.ip_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip_prefix = 29 [json_name = "ipPrefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipPrefix.
+     */
+    public boolean getIpPrefix() {
+      if (wellKnownCase_ == 29) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
+     * If the field value isn't a valid IP prefix, an error message will be
+     * generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
+     * `127.0.0.0/16`, not `127.0.0.1/16`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP prefix
+     *    string value = 1 [(buf.validate.field).string.ip_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip_prefix = 29 [json_name = "ipPrefix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipPrefix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpPrefix(boolean value) {
+
+      wellKnownCase_ = 29;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
+     * If the field value isn't a valid IP prefix, an error message will be
+     * generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
+     * `127.0.0.0/16`, not `127.0.0.1/16`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IP prefix
+     *    string value = 1 [(buf.validate.field).string.ip_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ip_prefix = 29 [json_name = "ipPrefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpPrefix() {
+      if (wellKnownCase_ == 29) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ipv4_prefix` specifies that the field value must be a valid IPv4
+     * prefix. If the field value isn't a valid IPv4 prefix, an error message
+     * will be generated. The prefix must have all zeros for the masked bits of
+     * the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 prefix
+     *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4_prefix = 30 [json_name = "ipv4Prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipv4Prefix field is set.
+     */
+    public boolean hasIpv4Prefix() {
+      return wellKnownCase_ == 30;
+    }
+    /**
+     * <pre>
+     * `ipv4_prefix` specifies that the field value must be a valid IPv4
+     * prefix. If the field value isn't a valid IPv4 prefix, an error message
+     * will be generated. The prefix must have all zeros for the masked bits of
+     * the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 prefix
+     *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4_prefix = 30 [json_name = "ipv4Prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipv4Prefix.
+     */
+    public boolean getIpv4Prefix() {
+      if (wellKnownCase_ == 30) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ipv4_prefix` specifies that the field value must be a valid IPv4
+     * prefix. If the field value isn't a valid IPv4 prefix, an error message
+     * will be generated. The prefix must have all zeros for the masked bits of
+     * the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 prefix
+     *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4_prefix = 30 [json_name = "ipv4Prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipv4Prefix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpv4Prefix(boolean value) {
+
+      wellKnownCase_ = 30;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ipv4_prefix` specifies that the field value must be a valid IPv4
+     * prefix. If the field value isn't a valid IPv4 prefix, an error message
+     * will be generated. The prefix must have all zeros for the masked bits of
+     * the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv4 prefix
+     *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv4_prefix = 30 [json_name = "ipv4Prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpv4Prefix() {
+      if (wellKnownCase_ == 30) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
+     * If the field value is not a valid IPv6 prefix, an error message will be
+     * generated. The prefix must have all zeros for the masked bits of the prefix
+     * (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 prefix
+     *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6_prefix = 31 [json_name = "ipv6Prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ipv6Prefix field is set.
+     */
+    public boolean hasIpv6Prefix() {
+      return wellKnownCase_ == 31;
+    }
+    /**
+     * <pre>
+     * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
+     * If the field value is not a valid IPv6 prefix, an error message will be
+     * generated. The prefix must have all zeros for the masked bits of the prefix
+     * (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 prefix
+     *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6_prefix = 31 [json_name = "ipv6Prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ipv6Prefix.
+     */
+    public boolean getIpv6Prefix() {
+      if (wellKnownCase_ == 31) {
+        return (java.lang.Boolean) wellKnown_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
+     * If the field value is not a valid IPv6 prefix, an error message will be
+     * generated. The prefix must have all zeros for the masked bits of the prefix
+     * (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 prefix
+     *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6_prefix = 31 [json_name = "ipv6Prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ipv6Prefix to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIpv6Prefix(boolean value) {
+
+      wellKnownCase_ = 31;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
+     * If the field value is not a valid IPv6 prefix, an error message will be
+     * generated. The prefix must have all zeros for the masked bits of the prefix
+     * (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid IPv6 prefix
+     *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool ipv6_prefix = 31 [json_name = "ipv6Prefix", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIpv6Prefix() {
+      if (wellKnownCase_ == 31) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `well_known_regex` specifies a common well-known pattern
+     * defined as a regex. If the field value doesn't match the well-known
+     * regex, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid HTTP header value
+     *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+     * }
+     * ```
+     *
+     * #### KnownRegex
+     *
+     * `well_known_regex` contains some well-known patterns.
+     *
+     * | Name                          | Number | Description                               |
+     * |-------------------------------|--------|-------------------------------------------|
+     * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+     * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+     * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+     * </pre>
+     *
+     * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the wellKnownRegex field is set.
+     */
+    @java.lang.Override
+    public boolean hasWellKnownRegex() {
+      return wellKnownCase_ == 24;
+    }
+    /**
+     * <pre>
+     * `well_known_regex` specifies a common well-known pattern
+     * defined as a regex. If the field value doesn't match the well-known
+     * regex, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid HTTP header value
+     *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+     * }
+     * ```
+     *
+     * #### KnownRegex
+     *
+     * `well_known_regex` contains some well-known patterns.
+     *
+     * | Name                          | Number | Description                               |
+     * |-------------------------------|--------|-------------------------------------------|
+     * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+     * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+     * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+     * </pre>
+     *
+     * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+     * @return The enum numeric value on the wire for wellKnownRegex.
+     */
+    @java.lang.Override
+    public int getWellKnownRegexValue() {
+      if (wellKnownCase_ == 24) {
+        return ((java.lang.Integer) wellKnown_).intValue();
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `well_known_regex` specifies a common well-known pattern
+     * defined as a regex. If the field value doesn't match the well-known
+     * regex, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid HTTP header value
+     *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+     * }
+     * ```
+     *
+     * #### KnownRegex
+     *
+     * `well_known_regex` contains some well-known patterns.
+     *
+     * | Name                          | Number | Description                               |
+     * |-------------------------------|--------|-------------------------------------------|
+     * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+     * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+     * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+     * </pre>
+     *
+     * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The enum numeric value on the wire for wellKnownRegex to set.
+     * @return This builder for chaining.
+     */
+    public Builder setWellKnownRegexValue(int value) {
+      wellKnownCase_ = 24;
+      wellKnown_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `well_known_regex` specifies a common well-known pattern
+     * defined as a regex. If the field value doesn't match the well-known
+     * regex, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid HTTP header value
+     *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+     * }
+     * ```
+     *
+     * #### KnownRegex
+     *
+     * `well_known_regex` contains some well-known patterns.
+     *
+     * | Name                          | Number | Description                               |
+     * |-------------------------------|--------|-------------------------------------------|
+     * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+     * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+     * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+     * </pre>
+     *
+     * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+     * @return The wellKnownRegex.
+     */
+    @java.lang.Override
+    public de.danet.buf.validate.KnownRegex getWellKnownRegex() {
+      if (wellKnownCase_ == 24) {
+        de.danet.buf.validate.KnownRegex result = de.danet.buf.validate.KnownRegex.forNumber(
+            (java.lang.Integer) wellKnown_);
+        return result == null ? de.danet.buf.validate.KnownRegex.UNRECOGNIZED : result;
+      }
+      return de.danet.buf.validate.KnownRegex.KNOWN_REGEX_UNSPECIFIED;
+    }
+    /**
+     * <pre>
+     * `well_known_regex` specifies a common well-known pattern
+     * defined as a regex. If the field value doesn't match the well-known
+     * regex, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid HTTP header value
+     *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+     * }
+     * ```
+     *
+     * #### KnownRegex
+     *
+     * `well_known_regex` contains some well-known patterns.
+     *
+     * | Name                          | Number | Description                               |
+     * |-------------------------------|--------|-------------------------------------------|
+     * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+     * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+     * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+     * </pre>
+     *
+     * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The wellKnownRegex to set.
+     * @return This builder for chaining.
+     */
+    public Builder setWellKnownRegex(de.danet.buf.validate.KnownRegex value) {
+      if (value == null) {
+        throw new NullPointerException();
+      }
+      wellKnownCase_ = 24;
+      wellKnown_ = value.getNumber();
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `well_known_regex` specifies a common well-known pattern
+     * defined as a regex. If the field value doesn't match the well-known
+     * regex, an error message will be generated.
+     *
+     * ```proto
+     * message MyString {
+     *   // value must be a valid HTTP header value
+     *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+     * }
+     * ```
+     *
+     * #### KnownRegex
+     *
+     * `well_known_regex` contains some well-known patterns.
+     *
+     * | Name                          | Number | Description                               |
+     * |-------------------------------|--------|-------------------------------------------|
+     * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+     * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+     * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+     * </pre>
+     *
+     * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearWellKnownRegex() {
+      if (wellKnownCase_ == 24) {
+        wellKnownCase_ = 0;
+        wellKnown_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private boolean strict_ ;
+    /**
+     * <pre>
+     * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+     * enable strict header validation. By default, this is true, and HTTP header
+     * validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
+     * validations that only disallow `&#92;r&#92;n&#92;0` characters, which can be used to
+     * bypass header matching rules.
+     *
+     * ```proto
+     * message MyString {
+     *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+     *   string value = 1 [(buf.validate.field).string.strict = false];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool strict = 25 [json_name = "strict"];</code>
+     * @return Whether the strict field is set.
+     */
+    @java.lang.Override
+    public boolean hasStrict() {
+      return ((bitField0_ & 0x40000000) != 0);
+    }
+    /**
+     * <pre>
+     * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+     * enable strict header validation. By default, this is true, and HTTP header
+     * validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
+     * validations that only disallow `&#92;r&#92;n&#92;0` characters, which can be used to
+     * bypass header matching rules.
+     *
+     * ```proto
+     * message MyString {
+     *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+     *   string value = 1 [(buf.validate.field).string.strict = false];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool strict = 25 [json_name = "strict"];</code>
+     * @return The strict.
+     */
+    @java.lang.Override
+    public boolean getStrict() {
+      return strict_;
+    }
+    /**
+     * <pre>
+     * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+     * enable strict header validation. By default, this is true, and HTTP header
+     * validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
+     * validations that only disallow `&#92;r&#92;n&#92;0` characters, which can be used to
+     * bypass header matching rules.
+     *
+     * ```proto
+     * message MyString {
+     *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+     *   string value = 1 [(buf.validate.field).string.strict = false];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool strict = 25 [json_name = "strict"];</code>
+     * @param value The strict to set.
+     * @return This builder for chaining.
+     */
+    public Builder setStrict(boolean value) {
+
+      strict_ = value;
+      bitField0_ |= 0x40000000;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+     * enable strict header validation. By default, this is true, and HTTP header
+     * validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
+     * validations that only disallow `&#92;r&#92;n&#92;0` characters, which can be used to
+     * bypass header matching rules.
+     *
+     * ```proto
+     * message MyString {
+     *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+     *   string value = 1 [(buf.validate.field).string.strict = false];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional bool strict = 25 [json_name = "strict"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearStrict() {
+      bitField0_ = (bitField0_ & ~0x40000000);
+      strict_ = false;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.StringRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.StringRules)
+  private static final de.danet.buf.validate.StringRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.StringRules();
+  }
+
+  public static de.danet.buf.validate.StringRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<StringRules>
+      PARSER = new com.google.protobuf.AbstractParser<StringRules>() {
+    @java.lang.Override
+    public StringRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<StringRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<StringRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.StringRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/StringRulesOrBuilder.java b/gen/java/de/danet/buf/validate/StringRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..bbaacfbb4ecd9c413a9e31caaa7df7fcba11c9b5
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/StringRulesOrBuilder.java
@@ -0,0 +1,1432 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface StringRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.StringRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must equal `hello`
+   *   string value = 1 [(buf.validate.field).string.const = "hello"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must equal `hello`
+   *   string value = 1 [(buf.validate.field).string.const = "hello"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  java.lang.String getConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must equal `hello`
+   *   string value = 1 [(buf.validate.field).string.const = "hello"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for const.
+   */
+  com.google.protobuf.ByteString
+      getConstBytes();
+
+  /**
+   * <pre>
+   * `len` dictates that the field value must have the specified
+   * number of characters (Unicode code points), which may differ from the number
+   * of bytes in the string. If the field value does not meet the specified
+   * length, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be 5 characters
+   *   string value = 1 [(buf.validate.field).string.len = 5];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len = 19 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the len field is set.
+   */
+  boolean hasLen();
+  /**
+   * <pre>
+   * `len` dictates that the field value must have the specified
+   * number of characters (Unicode code points), which may differ from the number
+   * of bytes in the string. If the field value does not meet the specified
+   * length, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be 5 characters
+   *   string value = 1 [(buf.validate.field).string.len = 5];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len = 19 [json_name = "len", (.buf.validate.priv.field) = { ... }</code>
+   * @return The len.
+   */
+  long getLen();
+
+  /**
+   * <pre>
+   * `min_len` specifies that the field value must have at least the specified
+   * number of characters (Unicode code points), which may differ from the number
+   * of bytes in the string. If the field value contains fewer characters, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at least 3 characters
+   *   string value = 1 [(buf.validate.field).string.min_len = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minLen field is set.
+   */
+  boolean hasMinLen();
+  /**
+   * <pre>
+   * `min_len` specifies that the field value must have at least the specified
+   * number of characters (Unicode code points), which may differ from the number
+   * of bytes in the string. If the field value contains fewer characters, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at least 3 characters
+   *   string value = 1 [(buf.validate.field).string.min_len = 3];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_len = 2 [json_name = "minLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minLen.
+   */
+  long getMinLen();
+
+  /**
+   * <pre>
+   * `max_len` specifies that the field value must have no more than the specified
+   * number of characters (Unicode code points), which may differ from the
+   * number of bytes in the string. If the field value contains more characters,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at most 10 characters
+   *   string value = 1 [(buf.validate.field).string.max_len = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxLen field is set.
+   */
+  boolean hasMaxLen();
+  /**
+   * <pre>
+   * `max_len` specifies that the field value must have no more than the specified
+   * number of characters (Unicode code points), which may differ from the
+   * number of bytes in the string. If the field value contains more characters,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at most 10 characters
+   *   string value = 1 [(buf.validate.field).string.max_len = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_len = 3 [json_name = "maxLen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxLen.
+   */
+  long getMaxLen();
+
+  /**
+   * <pre>
+   * `len_bytes` dictates that the field value must have the specified number of
+   * bytes. If the field value does not match the specified length in bytes,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be 6 bytes
+   *   string value = 1 [(buf.validate.field).string.len_bytes = 6];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len_bytes = 20 [json_name = "lenBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lenBytes field is set.
+   */
+  boolean hasLenBytes();
+  /**
+   * <pre>
+   * `len_bytes` dictates that the field value must have the specified number of
+   * bytes. If the field value does not match the specified length in bytes,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be 6 bytes
+   *   string value = 1 [(buf.validate.field).string.len_bytes = 6];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 len_bytes = 20 [json_name = "lenBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lenBytes.
+   */
+  long getLenBytes();
+
+  /**
+   * <pre>
+   * `min_bytes` specifies that the field value must have at least the specified
+   * number of bytes. If the field value contains fewer bytes, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at least 4 bytes
+   *   string value = 1 [(buf.validate.field).string.min_bytes = 4];
+   * }
+   *
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_bytes = 4 [json_name = "minBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the minBytes field is set.
+   */
+  boolean hasMinBytes();
+  /**
+   * <pre>
+   * `min_bytes` specifies that the field value must have at least the specified
+   * number of bytes. If the field value contains fewer bytes, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at least 4 bytes
+   *   string value = 1 [(buf.validate.field).string.min_bytes = 4];
+   * }
+   *
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 min_bytes = 4 [json_name = "minBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return The minBytes.
+   */
+  long getMinBytes();
+
+  /**
+   * <pre>
+   * `max_bytes` specifies that the field value must have no more than the
+   *specified number of bytes. If the field value contains more bytes, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at most 8 bytes
+   *   string value = 1 [(buf.validate.field).string.max_bytes = 8];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_bytes = 5 [json_name = "maxBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the maxBytes field is set.
+   */
+  boolean hasMaxBytes();
+  /**
+   * <pre>
+   * `max_bytes` specifies that the field value must have no more than the
+   *specified number of bytes. If the field value contains more bytes, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value length must be at most 8 bytes
+   *   string value = 1 [(buf.validate.field).string.max_bytes = 8];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 max_bytes = 5 [json_name = "maxBytes", (.buf.validate.priv.field) = { ... }</code>
+   * @return The maxBytes.
+   */
+  long getMaxBytes();
+
+  /**
+   * <pre>
+   * `pattern` specifies that the field value must match the specified
+   * regular expression (RE2 syntax), with the expression provided without any
+   * delimiters. If the field value doesn't match the regular expression, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not match regex pattern `^[a-zA-Z]//$`
+   *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the pattern field is set.
+   */
+  boolean hasPattern();
+  /**
+   * <pre>
+   * `pattern` specifies that the field value must match the specified
+   * regular expression (RE2 syntax), with the expression provided without any
+   * delimiters. If the field value doesn't match the regular expression, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not match regex pattern `^[a-zA-Z]//$`
+   *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return The pattern.
+   */
+  java.lang.String getPattern();
+  /**
+   * <pre>
+   * `pattern` specifies that the field value must match the specified
+   * regular expression (RE2 syntax), with the expression provided without any
+   * delimiters. If the field value doesn't match the regular expression, an
+   * error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not match regex pattern `^[a-zA-Z]//$`
+   *   string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string pattern = 6 [json_name = "pattern", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for pattern.
+   */
+  com.google.protobuf.ByteString
+      getPatternBytes();
+
+  /**
+   * <pre>
+   * `prefix` specifies that the field value must have the
+   *specified substring at the beginning of the string. If the field value
+   * doesn't start with the specified prefix, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have prefix `pre`
+   *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the prefix field is set.
+   */
+  boolean hasPrefix();
+  /**
+   * <pre>
+   * `prefix` specifies that the field value must have the
+   *specified substring at the beginning of the string. If the field value
+   * doesn't start with the specified prefix, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have prefix `pre`
+   *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The prefix.
+   */
+  java.lang.String getPrefix();
+  /**
+   * <pre>
+   * `prefix` specifies that the field value must have the
+   *specified substring at the beginning of the string. If the field value
+   * doesn't start with the specified prefix, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have prefix `pre`
+   *   string value = 1 [(buf.validate.field).string.prefix = "pre"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string prefix = 7 [json_name = "prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for prefix.
+   */
+  com.google.protobuf.ByteString
+      getPrefixBytes();
+
+  /**
+   * <pre>
+   * `suffix` specifies that the field value must have the
+   *specified substring at the end of the string. If the field value doesn't
+   * end with the specified suffix, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have suffix `post`
+   *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the suffix field is set.
+   */
+  boolean hasSuffix();
+  /**
+   * <pre>
+   * `suffix` specifies that the field value must have the
+   *specified substring at the end of the string. If the field value doesn't
+   * end with the specified suffix, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have suffix `post`
+   *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The suffix.
+   */
+  java.lang.String getSuffix();
+  /**
+   * <pre>
+   * `suffix` specifies that the field value must have the
+   *specified substring at the end of the string. If the field value doesn't
+   * end with the specified suffix, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not have suffix `post`
+   *   string value = 1 [(buf.validate.field).string.suffix = "post"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string suffix = 8 [json_name = "suffix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for suffix.
+   */
+  com.google.protobuf.ByteString
+      getSuffixBytes();
+
+  /**
+   * <pre>
+   * `contains` specifies that the field value must have the
+   *specified substring anywhere in the string. If the field value doesn't
+   * contain the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not contain substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the contains field is set.
+   */
+  boolean hasContains();
+  /**
+   * <pre>
+   * `contains` specifies that the field value must have the
+   *specified substring anywhere in the string. If the field value doesn't
+   * contain the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not contain substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The contains.
+   */
+  java.lang.String getContains();
+  /**
+   * <pre>
+   * `contains` specifies that the field value must have the
+   *specified substring anywhere in the string. If the field value doesn't
+   * contain the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value does not contain substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string contains = 9 [json_name = "contains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for contains.
+   */
+  com.google.protobuf.ByteString
+      getContainsBytes();
+
+  /**
+   * <pre>
+   * `not_contains` specifies that the field value must not have the
+   *specified substring anywhere in the string. If the field value contains
+   * the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value contains substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the notContains field is set.
+   */
+  boolean hasNotContains();
+  /**
+   * <pre>
+   * `not_contains` specifies that the field value must not have the
+   *specified substring anywhere in the string. If the field value contains
+   * the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value contains substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The notContains.
+   */
+  java.lang.String getNotContains();
+  /**
+   * <pre>
+   * `not_contains` specifies that the field value must not have the
+   *specified substring anywhere in the string. If the field value contains
+   * the specified substring, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value contains substring `inside`.
+   *   string value = 1 [(buf.validate.field).string.not_contains = "inside"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional string not_contains = 23 [json_name = "notContains", (.buf.validate.priv.field) = { ... }</code>
+   * @return The bytes for notContains.
+   */
+  com.google.protobuf.ByteString
+      getNotContainsBytes();
+
+  /**
+   * <pre>
+   * `in` specifies that the field value must be equal to one of the specified
+   * values. If the field value isn't one of the specified values, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be in list ["apple", "banana"]
+   *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.String>
+      getInList();
+  /**
+   * <pre>
+   * `in` specifies that the field value must be equal to one of the specified
+   * values. If the field value isn't one of the specified values, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be in list ["apple", "banana"]
+   *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` specifies that the field value must be equal to one of the specified
+   * values. If the field value isn't one of the specified values, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be in list ["apple", "banana"]
+   *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  java.lang.String getIn(int index);
+  /**
+   * <pre>
+   * `in` specifies that the field value must be equal to one of the specified
+   * values. If the field value isn't one of the specified values, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be in list ["apple", "banana"]
+   *   repeated string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string in = 10 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the in at the given index.
+   */
+  com.google.protobuf.ByteString
+      getInBytes(int index);
+
+  /**
+   * <pre>
+   * `not_in` specifies that the field value cannot be equal to any
+   * of the specified values. If the field value is one of the specified values,
+   * an error message will be generated.
+   * ```proto
+   * message MyString {
+   *   // value must not be in list ["orange", "grape"]
+   *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.String>
+      getNotInList();
+  /**
+   * <pre>
+   * `not_in` specifies that the field value cannot be equal to any
+   * of the specified values. If the field value is one of the specified values,
+   * an error message will be generated.
+   * ```proto
+   * message MyString {
+   *   // value must not be in list ["orange", "grape"]
+   *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` specifies that the field value cannot be equal to any
+   * of the specified values. If the field value is one of the specified values,
+   * an error message will be generated.
+   * ```proto
+   * message MyString {
+   *   // value must not be in list ["orange", "grape"]
+   *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  java.lang.String getNotIn(int index);
+  /**
+   * <pre>
+   * `not_in` specifies that the field value cannot be equal to any
+   * of the specified values. If the field value is one of the specified values,
+   * an error message will be generated.
+   * ```proto
+   * message MyString {
+   *   // value must not be in list ["orange", "grape"]
+   *   repeated string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated string not_in = 11 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the notIn at the given index.
+   */
+  com.google.protobuf.ByteString
+      getNotInBytes(int index);
+
+  /**
+   * <pre>
+   * `email` specifies that the field value must be a valid email address
+   * (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
+   * If the field value isn't a valid email address, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid email address
+   *   string value = 1 [(buf.validate.field).string.email = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool email = 12 [json_name = "email", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the email field is set.
+   */
+  boolean hasEmail();
+  /**
+   * <pre>
+   * `email` specifies that the field value must be a valid email address
+   * (addr-spec only) as defined by [RFC 5322](https://tools.ietf.org/html/rfc5322#section-3.4.1).
+   * If the field value isn't a valid email address, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid email address
+   *   string value = 1 [(buf.validate.field).string.email = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool email = 12 [json_name = "email", (.buf.validate.priv.field) = { ... }</code>
+   * @return The email.
+   */
+  boolean getEmail();
+
+  /**
+   * <pre>
+   * `hostname` specifies that the field value must be a valid
+   * hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
+   * internationalized domain names (IDNs). If the field value isn't a
+   * valid hostname, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid hostname
+   *   string value = 1 [(buf.validate.field).string.hostname = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool hostname = 13 [json_name = "hostname", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the hostname field is set.
+   */
+  boolean hasHostname();
+  /**
+   * <pre>
+   * `hostname` specifies that the field value must be a valid
+   * hostname as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5). This constraint doesn't support
+   * internationalized domain names (IDNs). If the field value isn't a
+   * valid hostname, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid hostname
+   *   string value = 1 [(buf.validate.field).string.hostname = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool hostname = 13 [json_name = "hostname", (.buf.validate.priv.field) = { ... }</code>
+   * @return The hostname.
+   */
+  boolean getHostname();
+
+  /**
+   * <pre>
+   * `ip` specifies that the field value must be a valid IP
+   * (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
+   * If the field value isn't a valid IP address, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP address
+   *   string value = 1 [(buf.validate.field).string.ip = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip = 14 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ip field is set.
+   */
+  boolean hasIp();
+  /**
+   * <pre>
+   * `ip` specifies that the field value must be a valid IP
+   * (v4 or v6) address, without surrounding square brackets for IPv6 addresses.
+   * If the field value isn't a valid IP address, an error message will be
+   * generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP address
+   *   string value = 1 [(buf.validate.field).string.ip = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip = 14 [json_name = "ip", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ip.
+   */
+  boolean getIp();
+
+  /**
+   * <pre>
+   * `ipv4` specifies that the field value must be a valid IPv4
+   * address. If the field value isn't a valid IPv4 address, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 address
+   *   string value = 1 [(buf.validate.field).string.ipv4 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4 = 15 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv4 field is set.
+   */
+  boolean hasIpv4();
+  /**
+   * <pre>
+   * `ipv4` specifies that the field value must be a valid IPv4
+   * address. If the field value isn't a valid IPv4 address, an error message
+   * will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 address
+   *   string value = 1 [(buf.validate.field).string.ipv4 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4 = 15 [json_name = "ipv4", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv4.
+   */
+  boolean getIpv4();
+
+  /**
+   * <pre>
+   * `ipv6` specifies that the field value must be a valid
+   * IPv6 address, without surrounding square brackets. If the field value is
+   * not a valid IPv6 address, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 address
+   *   string value = 1 [(buf.validate.field).string.ipv6 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6 = 16 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv6 field is set.
+   */
+  boolean hasIpv6();
+  /**
+   * <pre>
+   * `ipv6` specifies that the field value must be a valid
+   * IPv6 address, without surrounding square brackets. If the field value is
+   * not a valid IPv6 address, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 address
+   *   string value = 1 [(buf.validate.field).string.ipv6 = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6 = 16 [json_name = "ipv6", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv6.
+   */
+  boolean getIpv6();
+
+  /**
+   * <pre>
+   * `uri` specifies that the field value must be a valid,
+   * absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
+   * absolute URI, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid URI
+   *   string value = 1 [(buf.validate.field).string.uri = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uri = 17 [json_name = "uri", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the uri field is set.
+   */
+  boolean hasUri();
+  /**
+   * <pre>
+   * `uri` specifies that the field value must be a valid,
+   * absolute URI as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3). If the field value isn't a valid,
+   * absolute URI, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid URI
+   *   string value = 1 [(buf.validate.field).string.uri = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uri = 17 [json_name = "uri", (.buf.validate.priv.field) = { ... }</code>
+   * @return The uri.
+   */
+  boolean getUri();
+
+  /**
+   * <pre>
+   * `uri_ref` specifies that the field value must be a valid URI
+   * as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
+   * field value isn't a valid URI, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid URI
+   *   string value = 1 [(buf.validate.field).string.uri_ref = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uri_ref = 18 [json_name = "uriRef", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the uriRef field is set.
+   */
+  boolean hasUriRef();
+  /**
+   * <pre>
+   * `uri_ref` specifies that the field value must be a valid URI
+   * as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) and may be either relative or absolute. If the
+   * field value isn't a valid URI, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid URI
+   *   string value = 1 [(buf.validate.field).string.uri_ref = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uri_ref = 18 [json_name = "uriRef", (.buf.validate.priv.field) = { ... }</code>
+   * @return The uriRef.
+   */
+  boolean getUriRef();
+
+  /**
+   * <pre>
+   * `address` specifies that the field value must be either a valid hostname
+   * as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
+   * (which doesn't support internationalized domain names or IDNs) or a valid
+   * IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid hostname, or ip address
+   *   string value = 1 [(buf.validate.field).string.address = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool address = 21 [json_name = "address", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the address field is set.
+   */
+  boolean hasAddress();
+  /**
+   * <pre>
+   * `address` specifies that the field value must be either a valid hostname
+   * as defined by [RFC 1034](https://tools.ietf.org/html/rfc1034#section-3.5)
+   * (which doesn't support internationalized domain names or IDNs) or a valid
+   * IP (v4 or v6). If the field value isn't a valid hostname or IP, an error
+   * message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid hostname, or ip address
+   *   string value = 1 [(buf.validate.field).string.address = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool address = 21 [json_name = "address", (.buf.validate.priv.field) = { ... }</code>
+   * @return The address.
+   */
+  boolean getAddress();
+
+  /**
+   * <pre>
+   * `uuid` specifies that the field value must be a valid UUID as defined by
+   * [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
+   * field value isn't a valid UUID, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid UUID
+   *   string value = 1 [(buf.validate.field).string.uuid = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uuid = 22 [json_name = "uuid", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the uuid field is set.
+   */
+  boolean hasUuid();
+  /**
+   * <pre>
+   * `uuid` specifies that the field value must be a valid UUID as defined by
+   * [RFC 4122](https://tools.ietf.org/html/rfc4122#section-4.1.2). If the
+   * field value isn't a valid UUID, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid UUID
+   *   string value = 1 [(buf.validate.field).string.uuid = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool uuid = 22 [json_name = "uuid", (.buf.validate.priv.field) = { ... }</code>
+   * @return The uuid.
+   */
+  boolean getUuid();
+
+  /**
+   * <pre>
+   * `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
+   * address with prefix length. If the field value isn't a valid IP with prefix
+   * length, an error message will be generated.
+   *
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP with prefix length
+   *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip_with_prefixlen = 26 [json_name = "ipWithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipWithPrefixlen field is set.
+   */
+  boolean hasIpWithPrefixlen();
+  /**
+   * <pre>
+   * `ip_with_prefixlen` specifies that the field value must be a valid IP (v4 or v6)
+   * address with prefix length. If the field value isn't a valid IP with prefix
+   * length, an error message will be generated.
+   *
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP with prefix length
+   *    string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip_with_prefixlen = 26 [json_name = "ipWithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipWithPrefixlen.
+   */
+  boolean getIpWithPrefixlen();
+
+  /**
+   * <pre>
+   * `ipv4_with_prefixlen` specifies that the field value must be a valid
+   * IPv4 address with prefix.
+   * If the field value isn't a valid IPv4 address with prefix length,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 address with prefix lentgh
+   *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4_with_prefixlen = 27 [json_name = "ipv4WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv4WithPrefixlen field is set.
+   */
+  boolean hasIpv4WithPrefixlen();
+  /**
+   * <pre>
+   * `ipv4_with_prefixlen` specifies that the field value must be a valid
+   * IPv4 address with prefix.
+   * If the field value isn't a valid IPv4 address with prefix length,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 address with prefix lentgh
+   *    string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4_with_prefixlen = 27 [json_name = "ipv4WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv4WithPrefixlen.
+   */
+  boolean getIpv4WithPrefixlen();
+
+  /**
+   * <pre>
+   * `ipv6_with_prefixlen` specifies that the field value must be a valid
+   * IPv6 address with prefix length.
+   * If the field value is not a valid IPv6 address with prefix length,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 address prefix length
+   *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6_with_prefixlen = 28 [json_name = "ipv6WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv6WithPrefixlen field is set.
+   */
+  boolean hasIpv6WithPrefixlen();
+  /**
+   * <pre>
+   * `ipv6_with_prefixlen` specifies that the field value must be a valid
+   * IPv6 address with prefix length.
+   * If the field value is not a valid IPv6 address with prefix length,
+   * an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 address prefix length
+   *    string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6_with_prefixlen = 28 [json_name = "ipv6WithPrefixlen", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv6WithPrefixlen.
+   */
+  boolean getIpv6WithPrefixlen();
+
+  /**
+   * <pre>
+   * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
+   * If the field value isn't a valid IP prefix, an error message will be
+   * generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
+   * `127.0.0.0/16`, not `127.0.0.1/16`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP prefix
+   *    string value = 1 [(buf.validate.field).string.ip_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip_prefix = 29 [json_name = "ipPrefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipPrefix field is set.
+   */
+  boolean hasIpPrefix();
+  /**
+   * <pre>
+   * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6) prefix.
+   * If the field value isn't a valid IP prefix, an error message will be
+   * generated. The prefix must have all zeros for the masked bits of the prefix (e.g.,
+   * `127.0.0.0/16`, not `127.0.0.1/16`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IP prefix
+   *    string value = 1 [(buf.validate.field).string.ip_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ip_prefix = 29 [json_name = "ipPrefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipPrefix.
+   */
+  boolean getIpPrefix();
+
+  /**
+   * <pre>
+   * `ipv4_prefix` specifies that the field value must be a valid IPv4
+   * prefix. If the field value isn't a valid IPv4 prefix, an error message
+   * will be generated. The prefix must have all zeros for the masked bits of
+   * the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 prefix
+   *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4_prefix = 30 [json_name = "ipv4Prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv4Prefix field is set.
+   */
+  boolean hasIpv4Prefix();
+  /**
+   * <pre>
+   * `ipv4_prefix` specifies that the field value must be a valid IPv4
+   * prefix. If the field value isn't a valid IPv4 prefix, an error message
+   * will be generated. The prefix must have all zeros for the masked bits of
+   * the prefix (e.g., `127.0.0.0/16`, not `127.0.0.1/16`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv4 prefix
+   *    string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv4_prefix = 30 [json_name = "ipv4Prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv4Prefix.
+   */
+  boolean getIpv4Prefix();
+
+  /**
+   * <pre>
+   * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
+   * If the field value is not a valid IPv6 prefix, an error message will be
+   * generated. The prefix must have all zeros for the masked bits of the prefix
+   * (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 prefix
+   *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6_prefix = 31 [json_name = "ipv6Prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ipv6Prefix field is set.
+   */
+  boolean hasIpv6Prefix();
+  /**
+   * <pre>
+   * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix.
+   * If the field value is not a valid IPv6 prefix, an error message will be
+   * generated. The prefix must have all zeros for the masked bits of the prefix
+   * (e.g., `2001:db8::/48`, not `2001:db8::1/48`).
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid IPv6 prefix
+   *    string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool ipv6_prefix = 31 [json_name = "ipv6Prefix", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ipv6Prefix.
+   */
+  boolean getIpv6Prefix();
+
+  /**
+   * <pre>
+   * `well_known_regex` specifies a common well-known pattern
+   * defined as a regex. If the field value doesn't match the well-known
+   * regex, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid HTTP header value
+   *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+   * }
+   * ```
+   *
+   * #### KnownRegex
+   *
+   * `well_known_regex` contains some well-known patterns.
+   *
+   * | Name                          | Number | Description                               |
+   * |-------------------------------|--------|-------------------------------------------|
+   * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+   * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+   * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+   * </pre>
+   *
+   * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the wellKnownRegex field is set.
+   */
+  boolean hasWellKnownRegex();
+  /**
+   * <pre>
+   * `well_known_regex` specifies a common well-known pattern
+   * defined as a regex. If the field value doesn't match the well-known
+   * regex, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid HTTP header value
+   *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+   * }
+   * ```
+   *
+   * #### KnownRegex
+   *
+   * `well_known_regex` contains some well-known patterns.
+   *
+   * | Name                          | Number | Description                               |
+   * |-------------------------------|--------|-------------------------------------------|
+   * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+   * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+   * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+   * </pre>
+   *
+   * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+   * @return The enum numeric value on the wire for wellKnownRegex.
+   */
+  int getWellKnownRegexValue();
+  /**
+   * <pre>
+   * `well_known_regex` specifies a common well-known pattern
+   * defined as a regex. If the field value doesn't match the well-known
+   * regex, an error message will be generated.
+   *
+   * ```proto
+   * message MyString {
+   *   // value must be a valid HTTP header value
+   *   string value = 1 [(buf.validate.field).string.well_known_regex = 2];
+   * }
+   * ```
+   *
+   * #### KnownRegex
+   *
+   * `well_known_regex` contains some well-known patterns.
+   *
+   * | Name                          | Number | Description                               |
+   * |-------------------------------|--------|-------------------------------------------|
+   * | KNOWN_REGEX_UNSPECIFIED       | 0      |                                           |
+   * | KNOWN_REGEX_HTTP_HEADER_NAME  | 1      | HTTP header name as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2)  |
+   * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2      | HTTP header value as defined by [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2.4) |
+   * </pre>
+   *
+   * <code>.buf.validate.KnownRegex well_known_regex = 24 [json_name = "wellKnownRegex", (.buf.validate.priv.field) = { ... }</code>
+   * @return The wellKnownRegex.
+   */
+  de.danet.buf.validate.KnownRegex getWellKnownRegex();
+
+  /**
+   * <pre>
+   * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+   * enable strict header validation. By default, this is true, and HTTP header
+   * validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
+   * validations that only disallow `&#92;r&#92;n&#92;0` characters, which can be used to
+   * bypass header matching rules.
+   *
+   * ```proto
+   * message MyString {
+   *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+   *   string value = 1 [(buf.validate.field).string.strict = false];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool strict = 25 [json_name = "strict"];</code>
+   * @return Whether the strict field is set.
+   */
+  boolean hasStrict();
+  /**
+   * <pre>
+   * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
+   * enable strict header validation. By default, this is true, and HTTP header
+   * validations are [RFC-compliant](https://tools.ietf.org/html/rfc7230#section-3). Setting to false will enable looser
+   * validations that only disallow `&#92;r&#92;n&#92;0` characters, which can be used to
+   * bypass header matching rules.
+   *
+   * ```proto
+   * message MyString {
+   *   // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
+   *   string value = 1 [(buf.validate.field).string.strict = false];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional bool strict = 25 [json_name = "strict"];</code>
+   * @return The strict.
+   */
+  boolean getStrict();
+
+  de.danet.buf.validate.StringRules.WellKnownCase getWellKnownCase();
+}
diff --git a/gen/java/de/danet/buf/validate/TimestampRules.java b/gen/java/de/danet/buf/validate/TimestampRules.java
new file mode 100644
index 0000000000000000000000000000000000000000..63ce5a96df656e6b280c16934a17da9afd738e9c
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/TimestampRules.java
@@ -0,0 +1,3118 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * TimestampRules describe the constraints applied exclusively to the `google.protobuf.Timestamp` well-known type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.TimestampRules}
+ */
+public final class TimestampRules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.TimestampRules)
+    TimestampRulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use TimestampRules.newBuilder() to construct.
+  private TimestampRules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private TimestampRules() {
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new TimestampRules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_TimestampRules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_TimestampRules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.TimestampRules.class, de.danet.buf.validate.TimestampRules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(3),
+    LTE(4),
+    LT_NOW(7),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 3: return LT;
+        case 4: return LTE;
+        case 7: return LT_NOW;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(5),
+    GTE(6),
+    GT_NOW(8),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 5: return GT;
+        case 6: return GTE;
+        case 8: return GT_NOW;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 2;
+  private com.google.protobuf.Timestamp const_;
+  /**
+   * <pre>
+   * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must equal 2023-05-03T10:00:00Z
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must equal 2023-05-03T10:00:00Z
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Timestamp getConst() {
+    return const_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : const_;
+  }
+  /**
+   * <pre>
+   * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must equal 2023-05-03T10:00:00Z
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.TimestampOrBuilder getConstOrBuilder() {
+    return const_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be less than 'P3D' [duration.lt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be less than 'P3D' [duration.lt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Timestamp getLt() {
+    if (lessThanCase_ == 3) {
+       return (com.google.protobuf.Timestamp) lessThan_;
+    }
+    return com.google.protobuf.Timestamp.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be less than 'P3D' [duration.lt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.TimestampOrBuilder getLtOrBuilder() {
+    if (lessThanCase_ == 3) {
+       return (com.google.protobuf.Timestamp) lessThan_;
+    }
+    return com.google.protobuf.Timestamp.getDefaultInstance();
+  }
+
+  public static final int LTE_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Timestamp getLte() {
+    if (lessThanCase_ == 4) {
+       return (com.google.protobuf.Timestamp) lessThan_;
+    }
+    return com.google.protobuf.Timestamp.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.TimestampOrBuilder getLteOrBuilder() {
+    if (lessThanCase_ == 4) {
+       return (com.google.protobuf.Timestamp) lessThan_;
+    }
+    return com.google.protobuf.Timestamp.getDefaultInstance();
+  }
+
+  public static final int LT_NOW_FIELD_NUMBER = 7;
+  /**
+   * <pre>
+   * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *  // value must be less than now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool lt_now = 7 [json_name = "ltNow", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ltNow field is set.
+   */
+  @java.lang.Override
+  public boolean hasLtNow() {
+    return lessThanCase_ == 7;
+  }
+  /**
+   * <pre>
+   * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *  // value must be less than now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool lt_now = 7 [json_name = "ltNow", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ltNow.
+   */
+  @java.lang.Override
+  public boolean getLtNow() {
+    if (lessThanCase_ == 7) {
+      return (java.lang.Boolean) lessThan_;
+    }
+    return false;
+  }
+
+  public static final int GT_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gt` requires the timestamp field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gt` requires the timestamp field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Timestamp getGt() {
+    if (greaterThanCase_ == 5) {
+       return (com.google.protobuf.Timestamp) greaterThan_;
+    }
+    return com.google.protobuf.Timestamp.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * `gt` requires the timestamp field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.TimestampOrBuilder getGtOrBuilder() {
+    if (greaterThanCase_ == 5) {
+       return (com.google.protobuf.Timestamp) greaterThan_;
+    }
+    return com.google.protobuf.Timestamp.getDefaultInstance();
+  }
+
+  public static final int GTE_FIELD_NUMBER = 6;
+  /**
+   * <pre>
+   * `gte` requires the timestamp field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value
+   * must be outside the specified range. If the field value doesn't meet
+   * the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 6;
+  }
+  /**
+   * <pre>
+   * `gte` requires the timestamp field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value
+   * must be outside the specified range. If the field value doesn't meet
+   * the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Timestamp getGte() {
+    if (greaterThanCase_ == 6) {
+       return (com.google.protobuf.Timestamp) greaterThan_;
+    }
+    return com.google.protobuf.Timestamp.getDefaultInstance();
+  }
+  /**
+   * <pre>
+   * `gte` requires the timestamp field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value
+   * must be outside the specified range. If the field value doesn't meet
+   * the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.TimestampOrBuilder getGteOrBuilder() {
+    if (greaterThanCase_ == 6) {
+       return (com.google.protobuf.Timestamp) greaterThan_;
+    }
+    return com.google.protobuf.Timestamp.getDefaultInstance();
+  }
+
+  public static final int GT_NOW_FIELD_NUMBER = 8;
+  /**
+   * <pre>
+   * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be greater than now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool gt_now = 8 [json_name = "gtNow", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gtNow field is set.
+   */
+  @java.lang.Override
+  public boolean hasGtNow() {
+    return greaterThanCase_ == 8;
+  }
+  /**
+   * <pre>
+   * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be greater than now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool gt_now = 8 [json_name = "gtNow", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gtNow.
+   */
+  @java.lang.Override
+  public boolean getGtNow() {
+    if (greaterThanCase_ == 8) {
+      return (java.lang.Boolean) greaterThan_;
+    }
+    return false;
+  }
+
+  public static final int WITHIN_FIELD_NUMBER = 9;
+  private com.google.protobuf.Duration within_;
+  /**
+   * <pre>
+   * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be within 1 hour of now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the within field is set.
+   */
+  @java.lang.Override
+  public boolean hasWithin() {
+    return ((bitField0_ & 0x00000002) != 0);
+  }
+  /**
+   * <pre>
+   * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be within 1 hour of now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+   * @return The within.
+   */
+  @java.lang.Override
+  public com.google.protobuf.Duration getWithin() {
+    return within_ == null ? com.google.protobuf.Duration.getDefaultInstance() : within_;
+  }
+  /**
+   * <pre>
+   * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be within 1 hour of now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+   */
+  @java.lang.Override
+  public com.google.protobuf.DurationOrBuilder getWithinOrBuilder() {
+    return within_ == null ? com.google.protobuf.Duration.getDefaultInstance() : within_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeMessage(2, getConst());
+    }
+    if (lessThanCase_ == 3) {
+      output.writeMessage(3, (com.google.protobuf.Timestamp) lessThan_);
+    }
+    if (lessThanCase_ == 4) {
+      output.writeMessage(4, (com.google.protobuf.Timestamp) lessThan_);
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeMessage(5, (com.google.protobuf.Timestamp) greaterThan_);
+    }
+    if (greaterThanCase_ == 6) {
+      output.writeMessage(6, (com.google.protobuf.Timestamp) greaterThan_);
+    }
+    if (lessThanCase_ == 7) {
+      output.writeBool(
+          7, (boolean)((java.lang.Boolean) lessThan_));
+    }
+    if (greaterThanCase_ == 8) {
+      output.writeBool(
+          8, (boolean)((java.lang.Boolean) greaterThan_));
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      output.writeMessage(9, getWithin());
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(2, getConst());
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(3, (com.google.protobuf.Timestamp) lessThan_);
+    }
+    if (lessThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(4, (com.google.protobuf.Timestamp) lessThan_);
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(5, (com.google.protobuf.Timestamp) greaterThan_);
+    }
+    if (greaterThanCase_ == 6) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(6, (com.google.protobuf.Timestamp) greaterThan_);
+    }
+    if (lessThanCase_ == 7) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            7, (boolean)((java.lang.Boolean) lessThan_));
+    }
+    if (greaterThanCase_ == 8) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(
+            8, (boolean)((java.lang.Boolean) greaterThan_));
+    }
+    if (((bitField0_ & 0x00000002) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(9, getWithin());
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.TimestampRules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.TimestampRules other = (de.danet.buf.validate.TimestampRules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (!getConst()
+          .equals(other.getConst())) return false;
+    }
+    if (hasWithin() != other.hasWithin()) return false;
+    if (hasWithin()) {
+      if (!getWithin()
+          .equals(other.getWithin())) return false;
+    }
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 3:
+        if (!getLt()
+            .equals(other.getLt())) return false;
+        break;
+      case 4:
+        if (!getLte()
+            .equals(other.getLte())) return false;
+        break;
+      case 7:
+        if (getLtNow()
+            != other.getLtNow()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 5:
+        if (!getGt()
+            .equals(other.getGt())) return false;
+        break;
+      case 6:
+        if (!getGte()
+            .equals(other.getGte())) return false;
+        break;
+      case 8:
+        if (getGtNow()
+            != other.getGtNow()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst().hashCode();
+    }
+    if (hasWithin()) {
+      hash = (37 * hash) + WITHIN_FIELD_NUMBER;
+      hash = (53 * hash) + getWithin().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 3:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + getLt().hashCode();
+        break;
+      case 4:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + getLte().hashCode();
+        break;
+      case 7:
+        hash = (37 * hash) + LT_NOW_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getLtNow());
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 5:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + getGt().hashCode();
+        break;
+      case 6:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + getGte().hashCode();
+        break;
+      case 8:
+        hash = (37 * hash) + GT_NOW_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+            getGtNow());
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.TimestampRules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.TimestampRules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.TimestampRules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.TimestampRules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.TimestampRules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * TimestampRules describe the constraints applied exclusively to the `google.protobuf.Timestamp` well-known type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.TimestampRules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.TimestampRules)
+      de.danet.buf.validate.TimestampRulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_TimestampRules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_TimestampRules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.TimestampRules.class, de.danet.buf.validate.TimestampRules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.TimestampRules.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+        getConstFieldBuilder();
+        getWithinFieldBuilder();
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = null;
+      if (constBuilder_ != null) {
+        constBuilder_.dispose();
+        constBuilder_ = null;
+      }
+      if (ltBuilder_ != null) {
+        ltBuilder_.clear();
+      }
+      if (lteBuilder_ != null) {
+        lteBuilder_.clear();
+      }
+      if (gtBuilder_ != null) {
+        gtBuilder_.clear();
+      }
+      if (gteBuilder_ != null) {
+        gteBuilder_.clear();
+      }
+      within_ = null;
+      if (withinBuilder_ != null) {
+        withinBuilder_.dispose();
+        withinBuilder_ = null;
+      }
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_TimestampRules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.TimestampRules getDefaultInstanceForType() {
+      return de.danet.buf.validate.TimestampRules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.TimestampRules build() {
+      de.danet.buf.validate.TimestampRules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.TimestampRules buildPartial() {
+      de.danet.buf.validate.TimestampRules result = new de.danet.buf.validate.TimestampRules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.TimestampRules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = constBuilder_ == null
+            ? const_
+            : constBuilder_.build();
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000080) != 0)) {
+        result.within_ = withinBuilder_ == null
+            ? within_
+            : withinBuilder_.build();
+        to_bitField0_ |= 0x00000002;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.TimestampRules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      if (lessThanCase_ == 3 &&
+          ltBuilder_ != null) {
+        result.lessThan_ = ltBuilder_.build();
+      }
+      if (lessThanCase_ == 4 &&
+          lteBuilder_ != null) {
+        result.lessThan_ = lteBuilder_.build();
+      }
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+      if (greaterThanCase_ == 5 &&
+          gtBuilder_ != null) {
+        result.greaterThan_ = gtBuilder_.build();
+      }
+      if (greaterThanCase_ == 6 &&
+          gteBuilder_ != null) {
+        result.greaterThan_ = gteBuilder_.build();
+      }
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.TimestampRules) {
+        return mergeFrom((de.danet.buf.validate.TimestampRules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.TimestampRules other) {
+      if (other == de.danet.buf.validate.TimestampRules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        mergeConst(other.getConst());
+      }
+      if (other.hasWithin()) {
+        mergeWithin(other.getWithin());
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          mergeLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          mergeLte(other.getLte());
+          break;
+        }
+        case LT_NOW: {
+          setLtNow(other.getLtNow());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          mergeGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          mergeGte(other.getGte());
+          break;
+        }
+        case GT_NOW: {
+          setGtNow(other.getGtNow());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 18: {
+              input.readMessage(
+                  getConstFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 18
+            case 26: {
+              input.readMessage(
+                  getLtFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              lessThanCase_ = 3;
+              break;
+            } // case 26
+            case 34: {
+              input.readMessage(
+                  getLteFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              lessThanCase_ = 4;
+              break;
+            } // case 34
+            case 42: {
+              input.readMessage(
+                  getGtFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              greaterThanCase_ = 5;
+              break;
+            } // case 42
+            case 50: {
+              input.readMessage(
+                  getGteFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              greaterThanCase_ = 6;
+              break;
+            } // case 50
+            case 56: {
+              lessThan_ = input.readBool();
+              lessThanCase_ = 7;
+              break;
+            } // case 56
+            case 64: {
+              greaterThan_ = input.readBool();
+              greaterThanCase_ = 8;
+              break;
+            } // case 64
+            case 74: {
+              input.readMessage(
+                  getWithinFieldBuilder().getBuilder(),
+                  extensionRegistry);
+              bitField0_ |= 0x00000080;
+              break;
+            } // case 74
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private com.google.protobuf.Timestamp const_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> constBuilder_;
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    public com.google.protobuf.Timestamp getConst() {
+      if (constBuilder_ == null) {
+        return const_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : const_;
+      } else {
+        return constBuilder_.getMessage();
+      }
+    }
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setConst(com.google.protobuf.Timestamp value) {
+      if (constBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        const_ = value;
+      } else {
+        constBuilder_.setMessage(value);
+      }
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setConst(
+        com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (constBuilder_ == null) {
+        const_ = builderForValue.build();
+      } else {
+        constBuilder_.setMessage(builderForValue.build());
+      }
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeConst(com.google.protobuf.Timestamp value) {
+      if (constBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0) &&
+          const_ != null &&
+          const_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
+          getConstBuilder().mergeFrom(value);
+        } else {
+          const_ = value;
+        }
+      } else {
+        constBuilder_.mergeFrom(value);
+      }
+      if (const_ != null) {
+        bitField0_ |= 0x00000001;
+        onChanged();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = null;
+      if (constBuilder_ != null) {
+        constBuilder_.dispose();
+        constBuilder_ = null;
+      }
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getConstBuilder() {
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return getConstFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.TimestampOrBuilder getConstOrBuilder() {
+      if (constBuilder_ != null) {
+        return constBuilder_.getMessageOrBuilder();
+      } else {
+        return const_ == null ?
+            com.google.protobuf.Timestamp.getDefaultInstance() : const_;
+      }
+    }
+    /**
+     * <pre>
+     * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must equal 2023-05-03T10:00:00Z
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
+        getConstFieldBuilder() {
+      if (constBuilder_ == null) {
+        constBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
+                getConst(),
+                getParentForChildren(),
+                isClean());
+        const_ = null;
+      }
+      return constBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> ltBuilder_;
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    @java.lang.Override
+    public boolean hasLt() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    @java.lang.Override
+    public com.google.protobuf.Timestamp getLt() {
+      if (ltBuilder_ == null) {
+        if (lessThanCase_ == 3) {
+          return (com.google.protobuf.Timestamp) lessThan_;
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      } else {
+        if (lessThanCase_ == 3) {
+          return ltBuilder_.getMessage();
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setLt(com.google.protobuf.Timestamp value) {
+      if (ltBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        lessThan_ = value;
+        onChanged();
+      } else {
+        ltBuilder_.setMessage(value);
+      }
+      lessThanCase_ = 3;
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setLt(
+        com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (ltBuilder_ == null) {
+        lessThan_ = builderForValue.build();
+        onChanged();
+      } else {
+        ltBuilder_.setMessage(builderForValue.build());
+      }
+      lessThanCase_ = 3;
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeLt(com.google.protobuf.Timestamp value) {
+      if (ltBuilder_ == null) {
+        if (lessThanCase_ == 3 &&
+            lessThan_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
+          lessThan_ = com.google.protobuf.Timestamp.newBuilder((com.google.protobuf.Timestamp) lessThan_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          lessThan_ = value;
+        }
+        onChanged();
+      } else {
+        if (lessThanCase_ == 3) {
+          ltBuilder_.mergeFrom(value);
+        } else {
+          ltBuilder_.setMessage(value);
+        }
+      }
+      lessThanCase_ = 3;
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearLt() {
+      if (ltBuilder_ == null) {
+        if (lessThanCase_ == 3) {
+          lessThanCase_ = 0;
+          lessThan_ = null;
+          onChanged();
+        }
+      } else {
+        if (lessThanCase_ == 3) {
+          lessThanCase_ = 0;
+          lessThan_ = null;
+        }
+        ltBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getLtBuilder() {
+      return getLtFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    @java.lang.Override
+    public com.google.protobuf.TimestampOrBuilder getLtOrBuilder() {
+      if ((lessThanCase_ == 3) && (ltBuilder_ != null)) {
+        return ltBuilder_.getMessageOrBuilder();
+      } else {
+        if (lessThanCase_ == 3) {
+          return (com.google.protobuf.Timestamp) lessThan_;
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyDuration {
+     *   // duration must be less than 'P3D' [duration.lt]
+     *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
+        getLtFieldBuilder() {
+      if (ltBuilder_ == null) {
+        if (!(lessThanCase_ == 3)) {
+          lessThan_ = com.google.protobuf.Timestamp.getDefaultInstance();
+        }
+        ltBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
+                (com.google.protobuf.Timestamp) lessThan_,
+                getParentForChildren(),
+                isClean());
+        lessThan_ = null;
+      }
+      lessThanCase_ = 3;
+      onChanged();
+      return ltBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> lteBuilder_;
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    @java.lang.Override
+    public boolean hasLte() {
+      return lessThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    @java.lang.Override
+    public com.google.protobuf.Timestamp getLte() {
+      if (lteBuilder_ == null) {
+        if (lessThanCase_ == 4) {
+          return (com.google.protobuf.Timestamp) lessThan_;
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      } else {
+        if (lessThanCase_ == 4) {
+          return lteBuilder_.getMessage();
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setLte(com.google.protobuf.Timestamp value) {
+      if (lteBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        lessThan_ = value;
+        onChanged();
+      } else {
+        lteBuilder_.setMessage(value);
+      }
+      lessThanCase_ = 4;
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setLte(
+        com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (lteBuilder_ == null) {
+        lessThan_ = builderForValue.build();
+        onChanged();
+      } else {
+        lteBuilder_.setMessage(builderForValue.build());
+      }
+      lessThanCase_ = 4;
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeLte(com.google.protobuf.Timestamp value) {
+      if (lteBuilder_ == null) {
+        if (lessThanCase_ == 4 &&
+            lessThan_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
+          lessThan_ = com.google.protobuf.Timestamp.newBuilder((com.google.protobuf.Timestamp) lessThan_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          lessThan_ = value;
+        }
+        onChanged();
+      } else {
+        if (lessThanCase_ == 4) {
+          lteBuilder_.mergeFrom(value);
+        } else {
+          lteBuilder_.setMessage(value);
+        }
+      }
+      lessThanCase_ = 4;
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearLte() {
+      if (lteBuilder_ == null) {
+        if (lessThanCase_ == 4) {
+          lessThanCase_ = 0;
+          lessThan_ = null;
+          onChanged();
+        }
+      } else {
+        if (lessThanCase_ == 4) {
+          lessThanCase_ = 0;
+          lessThan_ = null;
+        }
+        lteBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getLteBuilder() {
+      return getLteFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    @java.lang.Override
+    public com.google.protobuf.TimestampOrBuilder getLteOrBuilder() {
+      if ((lessThanCase_ == 4) && (lteBuilder_ != null)) {
+        return lteBuilder_.getMessageOrBuilder();
+      } else {
+        if (lessThanCase_ == 4) {
+          return (com.google.protobuf.Timestamp) lessThan_;
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
+        getLteFieldBuilder() {
+      if (lteBuilder_ == null) {
+        if (!(lessThanCase_ == 4)) {
+          lessThan_ = com.google.protobuf.Timestamp.getDefaultInstance();
+        }
+        lteBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
+                (com.google.protobuf.Timestamp) lessThan_,
+                getParentForChildren(),
+                isClean());
+        lessThan_ = null;
+      }
+      lessThanCase_ = 4;
+      onChanged();
+      return lteBuilder_;
+    }
+
+    /**
+     * <pre>
+     * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *  // value must be less than now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool lt_now = 7 [json_name = "ltNow", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the ltNow field is set.
+     */
+    public boolean hasLtNow() {
+      return lessThanCase_ == 7;
+    }
+    /**
+     * <pre>
+     * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *  // value must be less than now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool lt_now = 7 [json_name = "ltNow", (.buf.validate.priv.field) = { ... }</code>
+     * @return The ltNow.
+     */
+    public boolean getLtNow() {
+      if (lessThanCase_ == 7) {
+        return (java.lang.Boolean) lessThan_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *  // value must be less than now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool lt_now = 7 [json_name = "ltNow", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The ltNow to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLtNow(boolean value) {
+
+      lessThanCase_ = 7;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *  // value must be less than now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool lt_now = 7 [json_name = "ltNow", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLtNow() {
+      if (lessThanCase_ == 7) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> gtBuilder_;
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    @java.lang.Override
+    public boolean hasGt() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    @java.lang.Override
+    public com.google.protobuf.Timestamp getGt() {
+      if (gtBuilder_ == null) {
+        if (greaterThanCase_ == 5) {
+          return (com.google.protobuf.Timestamp) greaterThan_;
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      } else {
+        if (greaterThanCase_ == 5) {
+          return gtBuilder_.getMessage();
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setGt(com.google.protobuf.Timestamp value) {
+      if (gtBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        greaterThan_ = value;
+        onChanged();
+      } else {
+        gtBuilder_.setMessage(value);
+      }
+      greaterThanCase_ = 5;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setGt(
+        com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (gtBuilder_ == null) {
+        greaterThan_ = builderForValue.build();
+        onChanged();
+      } else {
+        gtBuilder_.setMessage(builderForValue.build());
+      }
+      greaterThanCase_ = 5;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeGt(com.google.protobuf.Timestamp value) {
+      if (gtBuilder_ == null) {
+        if (greaterThanCase_ == 5 &&
+            greaterThan_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
+          greaterThan_ = com.google.protobuf.Timestamp.newBuilder((com.google.protobuf.Timestamp) greaterThan_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          greaterThan_ = value;
+        }
+        onChanged();
+      } else {
+        if (greaterThanCase_ == 5) {
+          gtBuilder_.mergeFrom(value);
+        } else {
+          gtBuilder_.setMessage(value);
+        }
+      }
+      greaterThanCase_ = 5;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearGt() {
+      if (gtBuilder_ == null) {
+        if (greaterThanCase_ == 5) {
+          greaterThanCase_ = 0;
+          greaterThan_ = null;
+          onChanged();
+        }
+      } else {
+        if (greaterThanCase_ == 5) {
+          greaterThanCase_ = 0;
+          greaterThan_ = null;
+        }
+        gtBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getGtBuilder() {
+      return getGtFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    @java.lang.Override
+    public com.google.protobuf.TimestampOrBuilder getGtOrBuilder() {
+      if ((greaterThanCase_ == 5) && (gtBuilder_ != null)) {
+        return gtBuilder_.getMessageOrBuilder();
+      } else {
+        if (greaterThanCase_ == 5) {
+          return (com.google.protobuf.Timestamp) greaterThan_;
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `gt` requires the timestamp field value to be greater than the specified
+     * value (exclusive). If the value of `gt` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
+        getGtFieldBuilder() {
+      if (gtBuilder_ == null) {
+        if (!(greaterThanCase_ == 5)) {
+          greaterThan_ = com.google.protobuf.Timestamp.getDefaultInstance();
+        }
+        gtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
+                (com.google.protobuf.Timestamp) greaterThan_,
+                getParentForChildren(),
+                isClean());
+        greaterThan_ = null;
+      }
+      greaterThanCase_ = 5;
+      onChanged();
+      return gtBuilder_;
+    }
+
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> gteBuilder_;
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    @java.lang.Override
+    public boolean hasGte() {
+      return greaterThanCase_ == 6;
+    }
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    @java.lang.Override
+    public com.google.protobuf.Timestamp getGte() {
+      if (gteBuilder_ == null) {
+        if (greaterThanCase_ == 6) {
+          return (com.google.protobuf.Timestamp) greaterThan_;
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      } else {
+        if (greaterThanCase_ == 6) {
+          return gteBuilder_.getMessage();
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setGte(com.google.protobuf.Timestamp value) {
+      if (gteBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        greaterThan_ = value;
+        onChanged();
+      } else {
+        gteBuilder_.setMessage(value);
+      }
+      greaterThanCase_ = 6;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setGte(
+        com.google.protobuf.Timestamp.Builder builderForValue) {
+      if (gteBuilder_ == null) {
+        greaterThan_ = builderForValue.build();
+        onChanged();
+      } else {
+        gteBuilder_.setMessage(builderForValue.build());
+      }
+      greaterThanCase_ = 6;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeGte(com.google.protobuf.Timestamp value) {
+      if (gteBuilder_ == null) {
+        if (greaterThanCase_ == 6 &&
+            greaterThan_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
+          greaterThan_ = com.google.protobuf.Timestamp.newBuilder((com.google.protobuf.Timestamp) greaterThan_)
+              .mergeFrom(value).buildPartial();
+        } else {
+          greaterThan_ = value;
+        }
+        onChanged();
+      } else {
+        if (greaterThanCase_ == 6) {
+          gteBuilder_.mergeFrom(value);
+        } else {
+          gteBuilder_.setMessage(value);
+        }
+      }
+      greaterThanCase_ = 6;
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearGte() {
+      if (gteBuilder_ == null) {
+        if (greaterThanCase_ == 6) {
+          greaterThanCase_ = 0;
+          greaterThan_ = null;
+          onChanged();
+        }
+      } else {
+        if (greaterThanCase_ == 6) {
+          greaterThanCase_ = 0;
+          greaterThan_ = null;
+        }
+        gteBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Timestamp.Builder getGteBuilder() {
+      return getGteFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    @java.lang.Override
+    public com.google.protobuf.TimestampOrBuilder getGteOrBuilder() {
+      if ((greaterThanCase_ == 6) && (gteBuilder_ != null)) {
+        return gteBuilder_.getMessageOrBuilder();
+      } else {
+        if (greaterThanCase_ == 6) {
+          return (com.google.protobuf.Timestamp) greaterThan_;
+        }
+        return com.google.protobuf.Timestamp.getDefaultInstance();
+      }
+    }
+    /**
+     * <pre>
+     * `gte` requires the timestamp field value to be greater than or equal to the
+     * specified value (exclusive). If the value of `gte` is larger than a
+     * specified `lt` or `lte`, the range is reversed, and the field value
+     * must be outside the specified range. If the field value doesn't meet
+     * the required conditions, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+     *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+     *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+     *
+     *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+     *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
+        getGteFieldBuilder() {
+      if (gteBuilder_ == null) {
+        if (!(greaterThanCase_ == 6)) {
+          greaterThan_ = com.google.protobuf.Timestamp.getDefaultInstance();
+        }
+        gteBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
+                (com.google.protobuf.Timestamp) greaterThan_,
+                getParentForChildren(),
+                isClean());
+        greaterThan_ = null;
+      }
+      greaterThanCase_ = 6;
+      onChanged();
+      return gteBuilder_;
+    }
+
+    /**
+     * <pre>
+     * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be greater than now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool gt_now = 8 [json_name = "gtNow", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gtNow field is set.
+     */
+    public boolean hasGtNow() {
+      return greaterThanCase_ == 8;
+    }
+    /**
+     * <pre>
+     * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be greater than now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool gt_now = 8 [json_name = "gtNow", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gtNow.
+     */
+    public boolean getGtNow() {
+      if (greaterThanCase_ == 8) {
+        return (java.lang.Boolean) greaterThan_;
+      }
+      return false;
+    }
+    /**
+     * <pre>
+     * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be greater than now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool gt_now = 8 [json_name = "gtNow", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gtNow to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGtNow(boolean value) {
+
+      greaterThanCase_ = 8;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be greater than now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>bool gt_now = 8 [json_name = "gtNow", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGtNow() {
+      if (greaterThanCase_ == 8) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Duration within_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> withinBuilder_;
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the within field is set.
+     */
+    public boolean hasWithin() {
+      return ((bitField0_ & 0x00000080) != 0);
+    }
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     * @return The within.
+     */
+    public com.google.protobuf.Duration getWithin() {
+      if (withinBuilder_ == null) {
+        return within_ == null ? com.google.protobuf.Duration.getDefaultInstance() : within_;
+      } else {
+        return withinBuilder_.getMessage();
+      }
+    }
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setWithin(com.google.protobuf.Duration value) {
+      if (withinBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        within_ = value;
+      } else {
+        withinBuilder_.setMessage(value);
+      }
+      bitField0_ |= 0x00000080;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder setWithin(
+        com.google.protobuf.Duration.Builder builderForValue) {
+      if (withinBuilder_ == null) {
+        within_ = builderForValue.build();
+      } else {
+        withinBuilder_.setMessage(builderForValue.build());
+      }
+      bitField0_ |= 0x00000080;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder mergeWithin(com.google.protobuf.Duration value) {
+      if (withinBuilder_ == null) {
+        if (((bitField0_ & 0x00000080) != 0) &&
+          within_ != null &&
+          within_ != com.google.protobuf.Duration.getDefaultInstance()) {
+          getWithinBuilder().mergeFrom(value);
+        } else {
+          within_ = value;
+        }
+      } else {
+        withinBuilder_.mergeFrom(value);
+      }
+      if (within_ != null) {
+        bitField0_ |= 0x00000080;
+        onChanged();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public Builder clearWithin() {
+      bitField0_ = (bitField0_ & ~0x00000080);
+      within_ = null;
+      if (withinBuilder_ != null) {
+        withinBuilder_.dispose();
+        withinBuilder_ = null;
+      }
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.Duration.Builder getWithinBuilder() {
+      bitField0_ |= 0x00000080;
+      onChanged();
+      return getWithinFieldBuilder().getBuilder();
+    }
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     */
+    public com.google.protobuf.DurationOrBuilder getWithinOrBuilder() {
+      if (withinBuilder_ != null) {
+        return withinBuilder_.getMessageOrBuilder();
+      } else {
+        return within_ == null ?
+            com.google.protobuf.Duration.getDefaultInstance() : within_;
+      }
+    }
+    /**
+     * <pre>
+     * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+     *
+     * ```proto
+     * message MyTimestamp {
+     *   // value must be within 1 hour of now
+     *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
+        getWithinFieldBuilder() {
+      if (withinBuilder_ == null) {
+        withinBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
+                getWithin(),
+                getParentForChildren(),
+                isClean());
+        within_ = null;
+      }
+      return withinBuilder_;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.TimestampRules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.TimestampRules)
+  private static final de.danet.buf.validate.TimestampRules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.TimestampRules();
+  }
+
+  public static de.danet.buf.validate.TimestampRules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<TimestampRules>
+      PARSER = new com.google.protobuf.AbstractParser<TimestampRules>() {
+    @java.lang.Override
+    public TimestampRules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<TimestampRules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<TimestampRules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.TimestampRules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/TimestampRulesOrBuilder.java b/gen/java/de/danet/buf/validate/TimestampRulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..35d9f9fc7d863184a3e1219a4c15d5ba9074e85e
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/TimestampRulesOrBuilder.java
@@ -0,0 +1,428 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface TimestampRulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.TimestampRules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must equal 2023-05-03T10:00:00Z
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must equal 2023-05-03T10:00:00Z
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  com.google.protobuf.Timestamp getConst();
+  /**
+   * <pre>
+   * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must equal 2023-05-03T10:00:00Z
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Timestamp const = 2 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getConstOrBuilder();
+
+  /**
+   * <pre>
+   * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be less than 'P3D' [duration.lt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be less than 'P3D' [duration.lt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  com.google.protobuf.Timestamp getLt();
+  /**
+   * <pre>
+   * requires the duration field value to be less than the specified value (field &lt; value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyDuration {
+   *   // duration must be less than 'P3D' [duration.lt]
+   *   google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lt = 3 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getLtOrBuilder();
+
+  /**
+   * <pre>
+   * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  com.google.protobuf.Timestamp getLte();
+  /**
+   * <pre>
+   * requires the timestamp field value to be less than or equal to the specified value (field &lt;= value). If the field value doesn't meet the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp lte = 4 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getLteOrBuilder();
+
+  /**
+   * <pre>
+   * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *  // value must be less than now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool lt_now = 7 [json_name = "ltNow", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the ltNow field is set.
+   */
+  boolean hasLtNow();
+  /**
+   * <pre>
+   * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *  // value must be less than now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool lt_now = 7 [json_name = "ltNow", (.buf.validate.priv.field) = { ... }</code>
+   * @return The ltNow.
+   */
+  boolean getLtNow();
+
+  /**
+   * <pre>
+   * `gt` requires the timestamp field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the timestamp field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  com.google.protobuf.Timestamp getGt();
+  /**
+   * <pre>
+   * `gt` requires the timestamp field value to be greater than the specified
+   * value (exclusive). If the value of `gt` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gt = 5 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getGtOrBuilder();
+
+  /**
+   * <pre>
+   * `gte` requires the timestamp field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value
+   * must be outside the specified range. If the field value doesn't meet
+   * the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the timestamp field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value
+   * must be outside the specified range. If the field value doesn't meet
+   * the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  com.google.protobuf.Timestamp getGte();
+  /**
+   * <pre>
+   * `gte` requires the timestamp field value to be greater than or equal to the
+   * specified value (exclusive). If the value of `gte` is larger than a
+   * specified `lt` or `lte`, the range is reversed, and the field value
+   * must be outside the specified range. If the field value doesn't meet
+   * the required conditions, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
+   *   google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
+   *   google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
+   *
+   *   // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
+   *   google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>.google.protobuf.Timestamp gte = 6 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.TimestampOrBuilder getGteOrBuilder();
+
+  /**
+   * <pre>
+   * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be greater than now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool gt_now = 8 [json_name = "gtNow", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gtNow field is set.
+   */
+  boolean hasGtNow();
+  /**
+   * <pre>
+   * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be greater than now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>bool gt_now = 8 [json_name = "gtNow", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gtNow.
+   */
+  boolean getGtNow();
+
+  /**
+   * <pre>
+   * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be within 1 hour of now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the within field is set.
+   */
+  boolean hasWithin();
+  /**
+   * <pre>
+   * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be within 1 hour of now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+   * @return The within.
+   */
+  com.google.protobuf.Duration getWithin();
+  /**
+   * <pre>
+   * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
+   *
+   * ```proto
+   * message MyTimestamp {
+   *   // value must be within 1 hour of now
+   *   google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional .google.protobuf.Duration within = 9 [json_name = "within", (.buf.validate.priv.field) = { ... }</code>
+   */
+  com.google.protobuf.DurationOrBuilder getWithinOrBuilder();
+
+  de.danet.buf.validate.TimestampRules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.TimestampRules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/UInt32Rules.java b/gen/java/de/danet/buf/validate/UInt32Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..aaea61b934bbcefecbd29fd589e7b9a3d6a9ea7a
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/UInt32Rules.java
@@ -0,0 +1,2106 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * UInt32Rules describes the constraints applied to `uint32` values. These
+ * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.UInt32Rules}
+ */
+public final class UInt32Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.UInt32Rules)
+    UInt32RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use UInt32Rules.newBuilder() to construct.
+  private UInt32Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private UInt32Rules() {
+    in_ = emptyIntList();
+    notIn_ = emptyIntList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new UInt32Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt32Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt32Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.UInt32Rules.class, de.danet.buf.validate.UInt32Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private int const_ = 0;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must equal 42
+   *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must equal 42
+   *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public int getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be less than 10
+   *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be less than 10
+   *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public int getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be less than or equal to 10
+   *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be less than or equal to 10
+   *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public int getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Integer) lessThan_;
+    }
+    return 0;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be greater than 5 [uint32.gt]
+   *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [uint32.gt_lt]
+   *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+   *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be greater than 5 [uint32.gt]
+   *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [uint32.gt_lt]
+   *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+   *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public int getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be greater than or equal to 5 [uint32.gte]
+   *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+   *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+   *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be greater than or equal to 5 [uint32.gte]
+   *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+   *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+   *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public int getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Integer) greaterThan_;
+    }
+    return 0;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList in_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public int getIn(int index) {
+    return in_.getInt(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.IntList notIn_ =
+      emptyIntList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Integer>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public int getNotIn(int index) {
+    return notIn_.getInt(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeUInt32(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeUInt32(
+          2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeUInt32(
+          3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeUInt32(
+          4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeUInt32(
+          5, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeUInt32NoTag(in_.getInt(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeUInt32NoTag(notIn_.getInt(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt32Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt32Size(
+            2, (int)((java.lang.Integer) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt32Size(
+            3, (int)((java.lang.Integer) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt32Size(
+            4, (int)((java.lang.Integer) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt32Size(
+            5, (int)((java.lang.Integer) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeUInt32SizeNoTag(in_.getInt(i));
+      }
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeUInt32SizeNoTag(notIn_.getInt(i));
+      }
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.UInt32Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.UInt32Rules other = (de.danet.buf.validate.UInt32Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + getConst();
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + getLt();
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + getLte();
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + getGt();
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + getGte();
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.UInt32Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.UInt32Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.UInt32Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.UInt32Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.UInt32Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * UInt32Rules describes the constraints applied to `uint32` values. These
+   * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.UInt32Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.UInt32Rules)
+      de.danet.buf.validate.UInt32RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt32Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.UInt32Rules.class, de.danet.buf.validate.UInt32Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.UInt32Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0;
+      in_ = emptyIntList();
+      notIn_ = emptyIntList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt32Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.UInt32Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.UInt32Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.UInt32Rules build() {
+      de.danet.buf.validate.UInt32Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.UInt32Rules buildPartial() {
+      de.danet.buf.validate.UInt32Rules result = new de.danet.buf.validate.UInt32Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.UInt32Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.UInt32Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.UInt32Rules) {
+        return mergeFrom((de.danet.buf.validate.UInt32Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.UInt32Rules other) {
+      if (other == de.danet.buf.validate.UInt32Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              const_ = input.readUInt32();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              lessThan_ = input.readUInt32();
+              lessThanCase_ = 2;
+              break;
+            } // case 16
+            case 24: {
+              lessThan_ = input.readUInt32();
+              lessThanCase_ = 3;
+              break;
+            } // case 24
+            case 32: {
+              greaterThan_ = input.readUInt32();
+              greaterThanCase_ = 4;
+              break;
+            } // case 32
+            case 40: {
+              greaterThan_ = input.readUInt32();
+              greaterThanCase_ = 5;
+              break;
+            } // case 40
+            case 48: {
+              int v = input.readUInt32();
+              ensureInIsMutable();
+              in_.addInt(v);
+              break;
+            } // case 48
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addInt(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 56: {
+              int v = input.readUInt32();
+              ensureNotInIsMutable();
+              notIn_.addInt(v);
+              break;
+            } // case 56
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureNotInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addInt(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private int const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must equal 42
+     *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must equal 42
+     *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public int getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must equal 42
+     *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(int value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must equal 42
+     *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be less than 10
+     *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be less than 10
+     *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public int getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be less than 10
+     *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(int value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be less than 10
+     *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be less than or equal to 10
+     *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be less than or equal to 10
+     *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public int getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Integer) lessThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be less than or equal to 10
+     *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(int value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be less than or equal to 10
+     *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be greater than 5 [uint32.gt]
+     *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [uint32.gt_lt]
+     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be greater than 5 [uint32.gt]
+     *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [uint32.gt_lt]
+     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public int getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be greater than 5 [uint32.gt]
+     *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [uint32.gt_lt]
+     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(int value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be greater than 5 [uint32.gt]
+     *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [uint32.gt_lt]
+     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be greater than or equal to 5 [uint32.gte]
+     *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be greater than or equal to 5 [uint32.gte]
+     *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public int getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Integer) greaterThan_;
+      }
+      return 0;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be greater than or equal to 5 [uint32.gte]
+     *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(int value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be greater than or equal to 5 [uint32.gte]
+     *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+     *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+     *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList in_ = emptyIntList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Integer>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public int getIn(int index) {
+      return in_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, int value) {
+
+      ensureInIsMutable();
+      in_.setInt(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(int value) {
+
+      ensureInIsMutable();
+      in_.addInt(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.IntList notIn_ = emptyIntList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Integer>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public int getNotIn(int index) {
+      return notIn_.getInt(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, int value) {
+
+      ensureNotInIsMutable();
+      notIn_.setInt(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(int value) {
+
+      ensureNotInIsMutable();
+      notIn_.addInt(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Integer> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt32 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyIntList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.UInt32Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.UInt32Rules)
+  private static final de.danet.buf.validate.UInt32Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.UInt32Rules();
+  }
+
+  public static de.danet.buf.validate.UInt32Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<UInt32Rules>
+      PARSER = new com.google.protobuf.AbstractParser<UInt32Rules>() {
+    @java.lang.Override
+    public UInt32Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<UInt32Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<UInt32Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.UInt32Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/UInt32RulesOrBuilder.java b/gen/java/de/danet/buf/validate/UInt32RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..9140cc1a0a0988f95037ea073758310f85eecf2c
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/UInt32RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface UInt32RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.UInt32Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must equal 42
+   *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must equal 42
+   *   uint32 value = 1 [(buf.validate.field).uint32.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint32 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  int getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be less than 10
+   *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be less than 10
+   *   uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  int getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be less than or equal to 10
+   *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be less than or equal to 10
+   *   uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  int getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be greater than 5 [uint32.gt]
+   *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [uint32.gt_lt]
+   *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+   *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be greater than 5 [uint32.gt]
+   *   uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [uint32.gt_lt]
+   *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
+   *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  int getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be greater than or equal to 5 [uint32.gte]
+   *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+   *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+   *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be greater than or equal to 5 [uint32.gte]
+   *   uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
+   *   uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
+   *   uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint32 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  int getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Integer> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  int getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Integer> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt32 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint32 value = 1 (buf.validate.field).uint32 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint32 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  int getNotIn(int index);
+
+  de.danet.buf.validate.UInt32Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.UInt32Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/UInt64Rules.java b/gen/java/de/danet/buf/validate/UInt64Rules.java
new file mode 100644
index 0000000000000000000000000000000000000000..7292f8d3941c5eaef0efb67da92d61fd7301fc5a
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/UInt64Rules.java
@@ -0,0 +1,2111 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * UInt64Rules describes the constraints applied to `uint64` values. These
+ * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.UInt64Rules}
+ */
+public final class UInt64Rules extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.UInt64Rules)
+    UInt64RulesOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use UInt64Rules.newBuilder() to construct.
+  private UInt64Rules(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private UInt64Rules() {
+    in_ = emptyLongList();
+    notIn_ = emptyLongList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new UInt64Rules();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt64Rules_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt64Rules_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.UInt64Rules.class, de.danet.buf.validate.UInt64Rules.Builder.class);
+  }
+
+  private int bitField0_;
+  private int lessThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object lessThan_;
+  public enum LessThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    LT(2),
+    LTE(3),
+    LESSTHAN_NOT_SET(0);
+    private final int value;
+    private LessThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static LessThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LessThanCase forNumber(int value) {
+      switch (value) {
+        case 2: return LT;
+        case 3: return LTE;
+        case 0: return LESSTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public LessThanCase
+  getLessThanCase() {
+    return LessThanCase.forNumber(
+        lessThanCase_);
+  }
+
+  private int greaterThanCase_ = 0;
+  @SuppressWarnings("serial")
+  private java.lang.Object greaterThan_;
+  public enum GreaterThanCase
+      implements com.google.protobuf.Internal.EnumLite,
+          com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+    GT(4),
+    GTE(5),
+    GREATERTHAN_NOT_SET(0);
+    private final int value;
+    private GreaterThanCase(int value) {
+      this.value = value;
+    }
+    /**
+     * @param value The number of the enum to look for.
+     * @return The enum associated with the given number.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static GreaterThanCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static GreaterThanCase forNumber(int value) {
+      switch (value) {
+        case 4: return GT;
+        case 5: return GTE;
+        case 0: return GREATERTHAN_NOT_SET;
+        default: return null;
+      }
+    }
+    public int getNumber() {
+      return this.value;
+    }
+  };
+
+  public GreaterThanCase
+  getGreaterThanCase() {
+    return GreaterThanCase.forNumber(
+        greaterThanCase_);
+  }
+
+  public static final int CONST_FIELD_NUMBER = 1;
+  private long const_ = 0L;
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must equal 42
+   *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  @java.lang.Override
+  public boolean hasConst() {
+    return ((bitField0_ & 0x00000001) != 0);
+  }
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must equal 42
+   *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  @java.lang.Override
+  public long getConst() {
+    return const_;
+  }
+
+  public static final int LT_FIELD_NUMBER = 2;
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be less than 10
+   *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  @java.lang.Override
+  public boolean hasLt() {
+    return lessThanCase_ == 2;
+  }
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be less than 10
+   *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  @java.lang.Override
+  public long getLt() {
+    if (lessThanCase_ == 2) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int LTE_FIELD_NUMBER = 3;
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be less than or equal to 10
+   *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  @java.lang.Override
+  public boolean hasLte() {
+    return lessThanCase_ == 3;
+  }
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be less than or equal to 10
+   *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  @java.lang.Override
+  public long getLte() {
+    if (lessThanCase_ == 3) {
+      return (java.lang.Long) lessThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GT_FIELD_NUMBER = 4;
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be greater than 5 [uint64.gt]
+   *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [uint64.gt_lt]
+   *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+   *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  @java.lang.Override
+  public boolean hasGt() {
+    return greaterThanCase_ == 4;
+  }
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be greater than 5 [uint64.gt]
+   *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [uint64.gt_lt]
+   *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+   *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  @java.lang.Override
+  public long getGt() {
+    if (greaterThanCase_ == 4) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int GTE_FIELD_NUMBER = 5;
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be greater than or equal to 5 [uint64.gte]
+   *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+   *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+   *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  @java.lang.Override
+  public boolean hasGte() {
+    return greaterThanCase_ == 5;
+  }
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be greater than or equal to 5 [uint64.gte]
+   *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+   *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+   *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  @java.lang.Override
+  public long getGte() {
+    if (greaterThanCase_ == 5) {
+      return (java.lang.Long) greaterThan_;
+    }
+    return 0L;
+  }
+
+  public static final int IN_FIELD_NUMBER = 6;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList in_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getInList() {
+    return in_;
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  public int getInCount() {
+    return in_.size();
+  }
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  public long getIn(int index) {
+    return in_.getLong(index);
+  }
+  private int inMemoizedSerializedSize = -1;
+
+  public static final int NOT_IN_FIELD_NUMBER = 7;
+  @SuppressWarnings("serial")
+  private com.google.protobuf.Internal.LongList notIn_ =
+      emptyLongList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getNotInList() {
+    return notIn_;
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  public int getNotInCount() {
+    return notIn_.size();
+  }
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  public long getNotIn(int index) {
+    return notIn_.getLong(index);
+  }
+  private int notInMemoizedSerializedSize = -1;
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    getSerializedSize();
+    if (((bitField0_ & 0x00000001) != 0)) {
+      output.writeUInt64(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      output.writeUInt64(
+          2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      output.writeUInt64(
+          3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      output.writeUInt64(
+          4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      output.writeUInt64(
+          5, (long)((java.lang.Long) greaterThan_));
+    }
+    if (getInList().size() > 0) {
+      output.writeUInt32NoTag(50);
+      output.writeUInt32NoTag(inMemoizedSerializedSize);
+    }
+    for (int i = 0; i < in_.size(); i++) {
+      output.writeUInt64NoTag(in_.getLong(i));
+    }
+    if (getNotInList().size() > 0) {
+      output.writeUInt32NoTag(58);
+      output.writeUInt32NoTag(notInMemoizedSerializedSize);
+    }
+    for (int i = 0; i < notIn_.size(); i++) {
+      output.writeUInt64NoTag(notIn_.getLong(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (((bitField0_ & 0x00000001) != 0)) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(1, const_);
+    }
+    if (lessThanCase_ == 2) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(
+            2, (long)((java.lang.Long) lessThan_));
+    }
+    if (lessThanCase_ == 3) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(
+            3, (long)((java.lang.Long) lessThan_));
+    }
+    if (greaterThanCase_ == 4) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(
+            4, (long)((java.lang.Long) greaterThan_));
+    }
+    if (greaterThanCase_ == 5) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeUInt64Size(
+            5, (long)((java.lang.Long) greaterThan_));
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < in_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeUInt64SizeNoTag(in_.getLong(i));
+      }
+      size += dataSize;
+      if (!getInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      inMemoizedSerializedSize = dataSize;
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < notIn_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeUInt64SizeNoTag(notIn_.getLong(i));
+      }
+      size += dataSize;
+      if (!getNotInList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      notInMemoizedSerializedSize = dataSize;
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.UInt64Rules)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.UInt64Rules other = (de.danet.buf.validate.UInt64Rules) obj;
+
+    if (hasConst() != other.hasConst()) return false;
+    if (hasConst()) {
+      if (getConst()
+          != other.getConst()) return false;
+    }
+    if (!getInList()
+        .equals(other.getInList())) return false;
+    if (!getNotInList()
+        .equals(other.getNotInList())) return false;
+    if (!getLessThanCase().equals(other.getLessThanCase())) return false;
+    switch (lessThanCase_) {
+      case 2:
+        if (getLt()
+            != other.getLt()) return false;
+        break;
+      case 3:
+        if (getLte()
+            != other.getLte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getGreaterThanCase().equals(other.getGreaterThanCase())) return false;
+    switch (greaterThanCase_) {
+      case 4:
+        if (getGt()
+            != other.getGt()) return false;
+        break;
+      case 5:
+        if (getGte()
+            != other.getGte()) return false;
+        break;
+      case 0:
+      default:
+    }
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (hasConst()) {
+      hash = (37 * hash) + CONST_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getConst());
+    }
+    if (getInCount() > 0) {
+      hash = (37 * hash) + IN_FIELD_NUMBER;
+      hash = (53 * hash) + getInList().hashCode();
+    }
+    if (getNotInCount() > 0) {
+      hash = (37 * hash) + NOT_IN_FIELD_NUMBER;
+      hash = (53 * hash) + getNotInList().hashCode();
+    }
+    switch (lessThanCase_) {
+      case 2:
+        hash = (37 * hash) + LT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLt());
+        break;
+      case 3:
+        hash = (37 * hash) + LTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getLte());
+        break;
+      case 0:
+      default:
+    }
+    switch (greaterThanCase_) {
+      case 4:
+        hash = (37 * hash) + GT_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGt());
+        break;
+      case 5:
+        hash = (37 * hash) + GTE_FIELD_NUMBER;
+        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+            getGte());
+        break;
+      case 0:
+      default:
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.UInt64Rules parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.UInt64Rules parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.UInt64Rules parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.UInt64Rules parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.UInt64Rules prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * UInt64Rules describes the constraints applied to `uint64` values. These
+   * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.UInt64Rules}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.UInt64Rules)
+      de.danet.buf.validate.UInt64RulesOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt64Rules_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.UInt64Rules.class, de.danet.buf.validate.UInt64Rules.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.UInt64Rules.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      const_ = 0L;
+      in_ = emptyLongList();
+      notIn_ = emptyLongList();
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ValidateProto.internal_static_buf_validate_UInt64Rules_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.UInt64Rules getDefaultInstanceForType() {
+      return de.danet.buf.validate.UInt64Rules.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.UInt64Rules build() {
+      de.danet.buf.validate.UInt64Rules result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.UInt64Rules buildPartial() {
+      de.danet.buf.validate.UInt64Rules result = new de.danet.buf.validate.UInt64Rules(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      buildPartialOneofs(result);
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.UInt64Rules result) {
+      int from_bitField0_ = bitField0_;
+      int to_bitField0_ = 0;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.const_ = const_;
+        to_bitField0_ |= 0x00000001;
+      }
+      if (((from_bitField0_ & 0x00000020) != 0)) {
+        in_.makeImmutable();
+        result.in_ = in_;
+      }
+      if (((from_bitField0_ & 0x00000040) != 0)) {
+        notIn_.makeImmutable();
+        result.notIn_ = notIn_;
+      }
+      result.bitField0_ |= to_bitField0_;
+    }
+
+    private void buildPartialOneofs(de.danet.buf.validate.UInt64Rules result) {
+      result.lessThanCase_ = lessThanCase_;
+      result.lessThan_ = this.lessThan_;
+      result.greaterThanCase_ = greaterThanCase_;
+      result.greaterThan_ = this.greaterThan_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.UInt64Rules) {
+        return mergeFrom((de.danet.buf.validate.UInt64Rules)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.UInt64Rules other) {
+      if (other == de.danet.buf.validate.UInt64Rules.getDefaultInstance()) return this;
+      if (other.hasConst()) {
+        setConst(other.getConst());
+      }
+      if (!other.in_.isEmpty()) {
+        if (in_.isEmpty()) {
+          in_ = other.in_;
+          in_.makeImmutable();
+          bitField0_ |= 0x00000020;
+        } else {
+          ensureInIsMutable();
+          in_.addAll(other.in_);
+        }
+        onChanged();
+      }
+      if (!other.notIn_.isEmpty()) {
+        if (notIn_.isEmpty()) {
+          notIn_ = other.notIn_;
+          notIn_.makeImmutable();
+          bitField0_ |= 0x00000040;
+        } else {
+          ensureNotInIsMutable();
+          notIn_.addAll(other.notIn_);
+        }
+        onChanged();
+      }
+      switch (other.getLessThanCase()) {
+        case LT: {
+          setLt(other.getLt());
+          break;
+        }
+        case LTE: {
+          setLte(other.getLte());
+          break;
+        }
+        case LESSTHAN_NOT_SET: {
+          break;
+        }
+      }
+      switch (other.getGreaterThanCase()) {
+        case GT: {
+          setGt(other.getGt());
+          break;
+        }
+        case GTE: {
+          setGte(other.getGte());
+          break;
+        }
+        case GREATERTHAN_NOT_SET: {
+          break;
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              const_ = input.readUInt64();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 8
+            case 16: {
+              lessThan_ = input.readUInt64();
+              lessThanCase_ = 2;
+              break;
+            } // case 16
+            case 24: {
+              lessThan_ = input.readUInt64();
+              lessThanCase_ = 3;
+              break;
+            } // case 24
+            case 32: {
+              greaterThan_ = input.readUInt64();
+              greaterThanCase_ = 4;
+              break;
+            } // case 32
+            case 40: {
+              greaterThan_ = input.readUInt64();
+              greaterThanCase_ = 5;
+              break;
+            } // case 40
+            case 48: {
+              long v = input.readUInt64();
+              ensureInIsMutable();
+              in_.addLong(v);
+              break;
+            } // case 48
+            case 50: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                in_.addLong(input.readUInt64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 50
+            case 56: {
+              long v = input.readUInt64();
+              ensureNotInIsMutable();
+              notIn_.addLong(v);
+              break;
+            } // case 56
+            case 58: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              ensureNotInIsMutable();
+              while (input.getBytesUntilLimit() > 0) {
+                notIn_.addLong(input.readUInt64());
+              }
+              input.popLimit(limit);
+              break;
+            } // case 58
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int lessThanCase_ = 0;
+    private java.lang.Object lessThan_;
+    public LessThanCase
+        getLessThanCase() {
+      return LessThanCase.forNumber(
+          lessThanCase_);
+    }
+
+    public Builder clearLessThan() {
+      lessThanCase_ = 0;
+      lessThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int greaterThanCase_ = 0;
+    private java.lang.Object greaterThan_;
+    public GreaterThanCase
+        getGreaterThanCase() {
+      return GreaterThanCase.forNumber(
+          greaterThanCase_);
+    }
+
+    public Builder clearGreaterThan() {
+      greaterThanCase_ = 0;
+      greaterThan_ = null;
+      onChanged();
+      return this;
+    }
+
+    private int bitField0_;
+
+    private long const_ ;
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must equal 42
+     *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the const field is set.
+     */
+    @java.lang.Override
+    public boolean hasConst() {
+      return ((bitField0_ & 0x00000001) != 0);
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must equal 42
+     *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return The const.
+     */
+    @java.lang.Override
+    public long getConst() {
+      return const_;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must equal 42
+     *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The const to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConst(long value) {
+
+      const_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `const` requires the field value to exactly match the specified value. If
+     * the field value doesn't match, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must equal 42
+     *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>optional uint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConst() {
+      bitField0_ = (bitField0_ & ~0x00000001);
+      const_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be less than 10
+     *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lt field is set.
+     */
+    public boolean hasLt() {
+      return lessThanCase_ == 2;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be less than 10
+     *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lt.
+     */
+    public long getLt() {
+      if (lessThanCase_ == 2) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be less than 10
+     *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLt(long value) {
+
+      lessThanCase_ = 2;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lt` requires the field value to be less than the specified value (field &lt;
+     * value). If the field value is equal to or greater than the specified value,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be less than 10
+     *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLt() {
+      if (lessThanCase_ == 2) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be less than or equal to 10
+     *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the lte field is set.
+     */
+    public boolean hasLte() {
+      return lessThanCase_ == 3;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be less than or equal to 10
+     *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The lte.
+     */
+    public long getLte() {
+      if (lessThanCase_ == 3) {
+        return (java.lang.Long) lessThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be less than or equal to 10
+     *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The lte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setLte(long value) {
+
+      lessThanCase_ = 3;
+      lessThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `lte` requires the field value to be less than or equal to the specified
+     * value (field &lt;= value). If the field value is greater than the specified
+     * value, an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be less than or equal to 10
+     *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearLte() {
+      if (lessThanCase_ == 3) {
+        lessThanCase_ = 0;
+        lessThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be greater than 5 [uint64.gt]
+     *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [uint64.gt_lt]
+     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gt field is set.
+     */
+    public boolean hasGt() {
+      return greaterThanCase_ == 4;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be greater than 5 [uint64.gt]
+     *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [uint64.gt_lt]
+     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gt.
+     */
+    public long getGt() {
+      if (greaterThanCase_ == 4) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be greater than 5 [uint64.gt]
+     *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [uint64.gt_lt]
+     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGt(long value) {
+
+      greaterThanCase_ = 4;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gt` requires the field value to be greater than the specified value
+     * (exclusive). If the value of `gt` is larger than a specified `lt` or
+     * `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be greater than 5 [uint64.gt]
+     *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+     *
+     *   // value must be greater than 5 and less than 10 [uint64.gt_lt]
+     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+     *
+     *   // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGt() {
+      if (greaterThanCase_ == 4) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be greater than or equal to 5 [uint64.gte]
+     *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return Whether the gte field is set.
+     */
+    public boolean hasGte() {
+      return greaterThanCase_ == 5;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be greater than or equal to 5 [uint64.gte]
+     *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return The gte.
+     */
+    public long getGte() {
+      if (greaterThanCase_ == 5) {
+        return (java.lang.Long) greaterThan_;
+      }
+      return 0L;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be greater than or equal to 5 [uint64.gte]
+     *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The gte to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGte(long value) {
+
+      greaterThanCase_ = 5;
+      greaterThan_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `gte` requires the field value to be greater than or equal to the specified
+     * value (exclusive). If the value of `gte` is larger than a specified `lt`
+     * or `lte`, the range is reversed, and the field value must be outside the
+     * specified range. If the field value doesn't meet the required conditions,
+     * an error message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be greater than or equal to 5 [uint64.gte]
+     *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+     *
+     *   // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+     *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+     *
+     *   // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+     *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>uint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGte() {
+      if (greaterThanCase_ == 5) {
+        greaterThanCase_ = 0;
+        greaterThan_ = null;
+        onChanged();
+      }
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList in_ = emptyLongList();
+    private void ensureInIsMutable() {
+      if (!in_.isModifiable()) {
+        in_ = makeMutableCopy(in_);
+      }
+      bitField0_ |= 0x00000020;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the in.
+     */
+    public java.util.List<java.lang.Long>
+        getInList() {
+      in_.makeImmutable();
+      return in_;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of in.
+     */
+    public int getInCount() {
+      return in_.size();
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The in at the given index.
+     */
+    public long getIn(int index) {
+      return in_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The in to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIn(
+        int index, long value) {
+
+      ensureInIsMutable();
+      in_.setLong(index, value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIn(long value) {
+
+      ensureInIsMutable();
+      in_.addLong(value);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The in to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, in_);
+      bitField0_ |= 0x00000020;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `in` requires the field value to be equal to one of the specified values.
+     * If the field value isn't one of the specified values, an error message is
+     * generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIn() {
+      in_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000020);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.Internal.LongList notIn_ = emptyLongList();
+    private void ensureNotInIsMutable() {
+      if (!notIn_.isModifiable()) {
+        notIn_ = makeMutableCopy(notIn_);
+      }
+      bitField0_ |= 0x00000040;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return A list containing the notIn.
+     */
+    public java.util.List<java.lang.Long>
+        getNotInList() {
+      notIn_.makeImmutable();
+      return notIn_;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return The count of notIn.
+     */
+    public int getNotInCount() {
+      return notIn_.size();
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index of the element to return.
+     * @return The notIn at the given index.
+     */
+    public long getNotIn(int index) {
+      return notIn_.getLong(index);
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param index The index to set the value at.
+     * @param value The notIn to set.
+     * @return This builder for chaining.
+     */
+    public Builder setNotIn(
+        int index, long value) {
+
+      ensureNotInIsMutable();
+      notIn_.setLong(index, value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param value The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addNotIn(long value) {
+
+      ensureNotInIsMutable();
+      notIn_.addLong(value);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @param values The notIn to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllNotIn(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureNotInIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, notIn_);
+      bitField0_ |= 0x00000040;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `not_in` requires the field value to not be equal to any of the specified
+     * values. If the field value is one of the specified values, an error
+     * message is generated.
+     *
+     * ```proto
+     * message MyUInt64 {
+     *   // value must not be in list [1, 2, 3]
+     *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+     * }
+     * ```
+     * </pre>
+     *
+     * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearNotIn() {
+      notIn_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000040);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.UInt64Rules)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.UInt64Rules)
+  private static final de.danet.buf.validate.UInt64Rules DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.UInt64Rules();
+  }
+
+  public static de.danet.buf.validate.UInt64Rules getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<UInt64Rules>
+      PARSER = new com.google.protobuf.AbstractParser<UInt64Rules>() {
+    @java.lang.Override
+    public UInt64Rules parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<UInt64Rules> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<UInt64Rules> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.UInt64Rules getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/UInt64RulesOrBuilder.java b/gen/java/de/danet/buf/validate/UInt64RulesOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..dacaa3de7a06cfdb6efa21b08d308608e858ac31
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/UInt64RulesOrBuilder.java
@@ -0,0 +1,341 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface UInt64RulesOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.UInt64Rules)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must equal 42
+   *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the const field is set.
+   */
+  boolean hasConst();
+  /**
+   * <pre>
+   * `const` requires the field value to exactly match the specified value. If
+   * the field value doesn't match, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must equal 42
+   *   uint64 value = 1 [(buf.validate.field).uint64.const = 42];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>optional uint64 const = 1 [json_name = "const", (.buf.validate.priv.field) = { ... }</code>
+   * @return The const.
+   */
+  long getConst();
+
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be less than 10
+   *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lt field is set.
+   */
+  boolean hasLt();
+  /**
+   * <pre>
+   * `lt` requires the field value to be less than the specified value (field &lt;
+   * value). If the field value is equal to or greater than the specified value,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be less than 10
+   *   uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 lt = 2 [json_name = "lt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lt.
+   */
+  long getLt();
+
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be less than or equal to 10
+   *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the lte field is set.
+   */
+  boolean hasLte();
+  /**
+   * <pre>
+   * `lte` requires the field value to be less than or equal to the specified
+   * value (field &lt;= value). If the field value is greater than the specified
+   * value, an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be less than or equal to 10
+   *   uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 lte = 3 [json_name = "lte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The lte.
+   */
+  long getLte();
+
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be greater than 5 [uint64.gt]
+   *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [uint64.gt_lt]
+   *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+   *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gt field is set.
+   */
+  boolean hasGt();
+  /**
+   * <pre>
+   * `gt` requires the field value to be greater than the specified value
+   * (exclusive). If the value of `gt` is larger than a specified `lt` or
+   * `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be greater than 5 [uint64.gt]
+   *   uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
+   *
+   *   // value must be greater than 5 and less than 10 [uint64.gt_lt]
+   *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
+   *
+   *   // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
+   *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 gt = 4 [json_name = "gt", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gt.
+   */
+  long getGt();
+
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be greater than or equal to 5 [uint64.gte]
+   *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+   *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+   *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return Whether the gte field is set.
+   */
+  boolean hasGte();
+  /**
+   * <pre>
+   * `gte` requires the field value to be greater than or equal to the specified
+   * value (exclusive). If the value of `gte` is larger than a specified `lt`
+   * or `lte`, the range is reversed, and the field value must be outside the
+   * specified range. If the field value doesn't meet the required conditions,
+   * an error message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be greater than or equal to 5 [uint64.gte]
+   *   uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
+   *
+   *   // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
+   *   uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
+   *
+   *   // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
+   *   uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>uint64 gte = 5 [json_name = "gte", (.buf.validate.priv.field) = { ... }</code>
+   * @return The gte.
+   */
+  long getGte();
+
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the in.
+   */
+  java.util.List<java.lang.Long> getInList();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of in.
+   */
+  int getInCount();
+  /**
+   * <pre>
+   * `in` requires the field value to be equal to one of the specified values.
+   * If the field value isn't one of the specified values, an error message is
+   * generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 in = 6 [json_name = "in", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The in at the given index.
+   */
+  long getIn(int index);
+
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return A list containing the notIn.
+   */
+  java.util.List<java.lang.Long> getNotInList();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @return The count of notIn.
+   */
+  int getNotInCount();
+  /**
+   * <pre>
+   * `not_in` requires the field value to not be equal to any of the specified
+   * values. If the field value is one of the specified values, an error
+   * message is generated.
+   *
+   * ```proto
+   * message MyUInt64 {
+   *   // value must not be in list [1, 2, 3]
+   *   repeated uint64 value = 1 (buf.validate.field).uint64 = { not_in: [1, 2, 3] };
+   * }
+   * ```
+   * </pre>
+   *
+   * <code>repeated uint64 not_in = 7 [json_name = "notIn", (.buf.validate.priv.field) = { ... }</code>
+   * @param index The index of the element to return.
+   * @return The notIn at the given index.
+   */
+  long getNotIn(int index);
+
+  de.danet.buf.validate.UInt64Rules.LessThanCase getLessThanCase();
+
+  de.danet.buf.validate.UInt64Rules.GreaterThanCase getGreaterThanCase();
+}
diff --git a/gen/java/de/danet/buf/validate/ValidateProto.java b/gen/java/de/danet/buf/validate/ValidateProto.java
new file mode 100644
index 0000000000000000000000000000000000000000..d4245d2989f113ae34c2189c187397804fd202d9
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/ValidateProto.java
@@ -0,0 +1,1601 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/validate.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public final class ValidateProto {
+  private ValidateProto() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+    registry.add(de.danet.buf.validate.ValidateProto.message);
+    registry.add(de.danet.buf.validate.ValidateProto.oneof);
+    registry.add(de.danet.buf.validate.ValidateProto.field);
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  public static final int MESSAGE_FIELD_NUMBER = 1159;
+  /**
+   * <pre>
+   * Rules specify the validations to be performed on this message. By default,
+   * no validation is performed against a message.
+   * </pre>
+   *
+   * <code>extend .google.protobuf.MessageOptions { ... }</code>
+   */
+  public static final
+    com.google.protobuf.GeneratedMessage.GeneratedExtension<
+      com.google.protobuf.DescriptorProtos.MessageOptions,
+      de.danet.buf.validate.MessageConstraints> message = com.google.protobuf.GeneratedMessage
+          .newFileScopedGeneratedExtension(
+        de.danet.buf.validate.MessageConstraints.class,
+        de.danet.buf.validate.MessageConstraints.getDefaultInstance());
+  public static final int ONEOF_FIELD_NUMBER = 1159;
+  /**
+   * <pre>
+   * Rules specify the validations to be performed on this oneof. By default,
+   * no validation is performed against a oneof.
+   * </pre>
+   *
+   * <code>extend .google.protobuf.OneofOptions { ... }</code>
+   */
+  public static final
+    com.google.protobuf.GeneratedMessage.GeneratedExtension<
+      com.google.protobuf.DescriptorProtos.OneofOptions,
+      de.danet.buf.validate.OneofConstraints> oneof = com.google.protobuf.GeneratedMessage
+          .newFileScopedGeneratedExtension(
+        de.danet.buf.validate.OneofConstraints.class,
+        de.danet.buf.validate.OneofConstraints.getDefaultInstance());
+  public static final int FIELD_FIELD_NUMBER = 1159;
+  /**
+   * <pre>
+   * Rules specify the validations to be performed on this field. By default,
+   * no validation is performed against a field.
+   * </pre>
+   *
+   * <code>extend .google.protobuf.FieldOptions { ... }</code>
+   */
+  public static final
+    com.google.protobuf.GeneratedMessage.GeneratedExtension<
+      com.google.protobuf.DescriptorProtos.FieldOptions,
+      de.danet.buf.validate.FieldConstraints> field = com.google.protobuf.GeneratedMessage
+          .newFileScopedGeneratedExtension(
+        de.danet.buf.validate.FieldConstraints.class,
+        de.danet.buf.validate.FieldConstraints.getDefaultInstance());
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_MessageConstraints_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_MessageConstraints_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_OneofConstraints_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_OneofConstraints_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_FieldConstraints_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_FieldConstraints_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_FloatRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_FloatRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_DoubleRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_DoubleRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_Int32Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_Int32Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_Int64Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_Int64Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_UInt32Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_UInt32Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_UInt64Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_UInt64Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_SInt32Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_SInt32Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_SInt64Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_SInt64Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_Fixed32Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_Fixed32Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_Fixed64Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_Fixed64Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_SFixed32Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_SFixed32Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_SFixed64Rules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_SFixed64Rules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_BoolRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_BoolRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_StringRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_StringRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_BytesRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_BytesRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_EnumRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_EnumRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_RepeatedRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_RepeatedRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_MapRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_MapRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_AnyRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_AnyRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_DurationRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_DurationRules_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_TimestampRules_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_TimestampRules_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\033buf/validate/validate.proto\022\014buf.valid" +
+      "ate\032\035buf/validate/expression.proto\032\037buf/" +
+      "validate/priv/private.proto\032 google/prot" +
+      "obuf/descriptor.proto\032\036google/protobuf/d" +
+      "uration.proto\032\037google/protobuf/timestamp" +
+      ".proto\"n\n\022MessageConstraints\022\037\n\010disabled" +
+      "\030\001 \001(\010H\000R\010disabled\210\001\001\022*\n\003cel\030\003 \003(\0132\030.buf" +
+      ".validate.ConstraintR\003celB\013\n\t_disabled\"@" +
+      "\n\020OneofConstraints\022\037\n\010required\030\001 \001(\010H\000R\010" +
+      "required\210\001\001B\013\n\t_required\"\365\t\n\020FieldConstr" +
+      "aints\022*\n\003cel\030\027 \003(\0132\030.buf.validate.Constr" +
+      "aintR\003cel\022\030\n\007skipped\030\030 \001(\010R\007skipped\022\032\n\010r" +
+      "equired\030\031 \001(\010R\010required\022!\n\014ignore_empty\030" +
+      "\032 \001(\010R\013ignoreEmpty\0220\n\005float\030\001 \001(\0132\030.buf." +
+      "validate.FloatRulesH\000R\005float\0223\n\006double\030\002" +
+      " \001(\0132\031.buf.validate.DoubleRulesH\000R\006doubl" +
+      "e\0220\n\005int32\030\003 \001(\0132\030.buf.validate.Int32Rul" +
+      "esH\000R\005int32\0220\n\005int64\030\004 \001(\0132\030.buf.validat" +
+      "e.Int64RulesH\000R\005int64\0223\n\006uint32\030\005 \001(\0132\031." +
+      "buf.validate.UInt32RulesH\000R\006uint32\0223\n\006ui" +
+      "nt64\030\006 \001(\0132\031.buf.validate.UInt64RulesH\000R" +
+      "\006uint64\0223\n\006sint32\030\007 \001(\0132\031.buf.validate.S" +
+      "Int32RulesH\000R\006sint32\0223\n\006sint64\030\010 \001(\0132\031.b" +
+      "uf.validate.SInt64RulesH\000R\006sint64\0226\n\007fix" +
+      "ed32\030\t \001(\0132\032.buf.validate.Fixed32RulesH\000" +
+      "R\007fixed32\0226\n\007fixed64\030\n \001(\0132\032.buf.validat" +
+      "e.Fixed64RulesH\000R\007fixed64\0229\n\010sfixed32\030\013 " +
+      "\001(\0132\033.buf.validate.SFixed32RulesH\000R\010sfix" +
+      "ed32\0229\n\010sfixed64\030\014 \001(\0132\033.buf.validate.SF" +
+      "ixed64RulesH\000R\010sfixed64\022-\n\004bool\030\r \001(\0132\027." +
+      "buf.validate.BoolRulesH\000R\004bool\0223\n\006string" +
+      "\030\016 \001(\0132\031.buf.validate.StringRulesH\000R\006str" +
+      "ing\0220\n\005bytes\030\017 \001(\0132\030.buf.validate.BytesR" +
+      "ulesH\000R\005bytes\022-\n\004enum\030\020 \001(\0132\027.buf.valida" +
+      "te.EnumRulesH\000R\004enum\0229\n\010repeated\030\022 \001(\0132\033" +
+      ".buf.validate.RepeatedRulesH\000R\010repeated\022" +
+      "*\n\003map\030\023 \001(\0132\026.buf.validate.MapRulesH\000R\003" +
+      "map\022*\n\003any\030\024 \001(\0132\026.buf.validate.AnyRules" +
+      "H\000R\003any\0229\n\010duration\030\025 \001(\0132\033.buf.validate" +
+      ".DurationRulesH\000R\010duration\022<\n\ttimestamp\030" +
+      "\026 \001(\0132\034.buf.validate.TimestampRulesH\000R\tt" +
+      "imestampB\006\n\004type\"\242\027\n\nFloatRules\022u\n\005const" +
+      "\030\001 \001(\002BZ\302HW\nU\n\013float.const\032Fthis != rule" +
+      "s.const ? \'value must equal %s\'.format([" +
+      "rules.const]) : \'\'H\002R\005const\210\001\001\022\243\001\n\002lt\030\002 " +
+      "\001(\002B\220\001\302H\214\001\n\211\001\n\010float.lt\032}!has(rules.gte)" +
+      " && !has(rules.gt) && (this.isNan() || t" +
+      "his >= rules.lt)? \'value must be less th" +
+      "an %s\'.format([rules.lt]) : \'\'H\000R\002lt\022\264\001\n" +
+      "\003lte\030\003 \001(\002B\237\001\302H\233\001\n\230\001\n\tfloat.lte\032\212\001!has(r" +
+      "ules.gte) && !has(rules.gt) && (this.isN" +
+      "an() || this > rules.lte)? \'value must b" +
+      "e less than or equal to %s\'.format([rule" +
+      "s.lte]) : \'\'H\000R\003lte\022\363\007\n\002gt\030\004 \001(\002B\340\007\302H\334\007\n" +
+      "\215\001\n\010float.gt\032\200\001!has(rules.lt) && !has(ru" +
+      "les.lte) && (this.isNan() || this <= rul" +
+      "es.gt)? \'value must be greater than %s\'." +
+      "format([rules.gt]) : \'\'\n\303\001\n\013float.gt_lt\032" +
+      "\263\001has(rules.lt) && rules.lt >= rules.gt " +
+      "&& (this.isNan() || this >= rules.lt || " +
+      "this <= rules.gt)? \'value must be greate" +
+      "r than %s and less than %s\'.format([rule" +
+      "s.gt, rules.lt]) : \'\'\n\315\001\n\025float.gt_lt_ex" +
+      "clusive\032\263\001has(rules.lt) && rules.lt < ru" +
+      "les.gt && (this.isNan() || (rules.lt <= " +
+      "this && this <= rules.gt))? \'value must " +
+      "be greater than %s or less than %s\'.form" +
+      "at([rules.gt, rules.lt]) : \'\'\n\323\001\n\014float." +
+      "gt_lte\032\302\001has(rules.lte) && rules.lte >= " +
+      "rules.gt && (this.isNan() || this > rule" +
+      "s.lte || this <= rules.gt)? \'value must " +
+      "be greater than %s and less than or equa" +
+      "l to %s\'.format([rules.gt, rules.lte]) :" +
+      " \'\'\n\335\001\n\026float.gt_lte_exclusive\032\302\001has(rul" +
+      "es.lte) && rules.lte < rules.gt && (this" +
+      ".isNan() || (rules.lte < this && this <=" +
+      " rules.gt))? \'value must be greater than" +
+      " %s or less than or equal to %s\'.format(" +
+      "[rules.gt, rules.lte]) : \'\'H\001R\002gt\022\277\010\n\003gt" +
+      "e\030\005 \001(\002B\252\010\302H\246\010\n\233\001\n\tfloat.gte\032\215\001!has(rule" +
+      "s.lt) && !has(rules.lte) && (this.isNan(" +
+      ") || this < rules.gte)? \'value must be g" +
+      "reater than or equal to %s\'.format([rule" +
+      "s.gte]) : \'\'\n\322\001\n\014float.gte_lt\032\301\001has(rule" +
+      "s.lt) && rules.lt >= rules.gte && (this." +
+      "isNan() || this >= rules.lt || this < ru" +
+      "les.gte)? \'value must be greater than or" +
+      " equal to %s and less than %s\'.format([r" +
+      "ules.gte, rules.lt]) : \'\'\n\334\001\n\026float.gte_" +
+      "lt_exclusive\032\301\001has(rules.lt) && rules.lt" +
+      " < rules.gte && (this.isNan() || (rules." +
+      "lt <= this && this < rules.gte))? \'value" +
+      " must be greater than or equal to %s or " +
+      "less than %s\'.format([rules.gte, rules.l" +
+      "t]) : \'\'\n\342\001\n\rfloat.gte_lte\032\320\001has(rules.l" +
+      "te) && rules.lte >= rules.gte && (this.i" +
+      "sNan() || this > rules.lte || this < rul" +
+      "es.gte)? \'value must be greater than or " +
+      "equal to %s and less than or equal to %s" +
+      "\'.format([rules.gte, rules.lte]) : \'\'\n\354\001" +
+      "\n\027float.gte_lte_exclusive\032\320\001has(rules.lt" +
+      "e) && rules.lte < rules.gte && (this.isN" +
+      "an() || (rules.lte < this && this < rule" +
+      "s.gte))? \'value must be greater than or " +
+      "equal to %s or less than or equal to %s\'" +
+      ".format([rules.gte, rules.lte]) : \'\'H\001R\003" +
+      "gte\022y\n\002in\030\006 \003(\002Bi\302Hf\nd\n\010float.in\032X!(this" +
+      " in dyn(rules)[\'in\']) ? \'value must be i" +
+      "n list %s\'.format([dyn(rules)[\'in\']]) : " +
+      "\'\'R\002in\022}\n\006not_in\030\007 \003(\002Bf\302Hc\na\n\014float.not" +
+      "_in\032Qthis in rules.not_in ? \'value must " +
+      "not be in list %s\'.format([rules.not_in]" +
+      ") : \'\'R\005notIn\022g\n\006finite\030\010 \001(\010BO\302HL\nJ\n\014fl" +
+      "oat.finite\032:this.isNan() || this.isInf()" +
+      " ? \'value must be finite\' : \'\'R\006finiteB\013" +
+      "\n\tless_thanB\016\n\014greater_thanB\010\n\006_const\"\263\027" +
+      "\n\013DoubleRules\022v\n\005const\030\001 \001(\001B[\302HX\nV\n\014dou" +
+      "ble.const\032Fthis != rules.const ? \'value " +
+      "must equal %s\'.format([rules.const]) : \'" +
+      "\'H\002R\005const\210\001\001\022\244\001\n\002lt\030\002 \001(\001B\221\001\302H\215\001\n\212\001\n\tdo" +
+      "uble.lt\032}!has(rules.gte) && !has(rules.g" +
+      "t) && (this.isNan() || this >= rules.lt)" +
+      "? \'value must be less than %s\'.format([r" +
+      "ules.lt]) : \'\'H\000R\002lt\022\265\001\n\003lte\030\003 \001(\001B\240\001\302H\234" +
+      "\001\n\231\001\n\ndouble.lte\032\212\001!has(rules.gte) && !h" +
+      "as(rules.gt) && (this.isNan() || this > " +
+      "rules.lte)? \'value must be less than or " +
+      "equal to %s\'.format([rules.lte]) : \'\'H\000R" +
+      "\003lte\022\370\007\n\002gt\030\004 \001(\001B\345\007\302H\341\007\n\216\001\n\tdouble.gt\032\200" +
+      "\001!has(rules.lt) && !has(rules.lte) && (t" +
+      "his.isNan() || this <= rules.gt)? \'value" +
+      " must be greater than %s\'.format([rules." +
+      "gt]) : \'\'\n\304\001\n\014double.gt_lt\032\263\001has(rules.l" +
+      "t) && rules.lt >= rules.gt && (this.isNa" +
+      "n() || this >= rules.lt || this <= rules" +
+      ".gt)? \'value must be greater than %s and" +
+      " less than %s\'.format([rules.gt, rules.l" +
+      "t]) : \'\'\n\316\001\n\026double.gt_lt_exclusive\032\263\001ha" +
+      "s(rules.lt) && rules.lt < rules.gt && (t" +
+      "his.isNan() || (rules.lt <= this && this" +
+      " <= rules.gt))? \'value must be greater t" +
+      "han %s or less than %s\'.format([rules.gt" +
+      ", rules.lt]) : \'\'\n\324\001\n\rdouble.gt_lte\032\302\001ha" +
+      "s(rules.lte) && rules.lte >= rules.gt &&" +
+      " (this.isNan() || this > rules.lte || th" +
+      "is <= rules.gt)? \'value must be greater " +
+      "than %s and less than or equal to %s\'.fo" +
+      "rmat([rules.gt, rules.lte]) : \'\'\n\336\001\n\027dou" +
+      "ble.gt_lte_exclusive\032\302\001has(rules.lte) &&" +
+      " rules.lte < rules.gt && (this.isNan() |" +
+      "| (rules.lte < this && this <= rules.gt)" +
+      ")? \'value must be greater than %s or les" +
+      "s than or equal to %s\'.format([rules.gt," +
+      " rules.lte]) : \'\'H\001R\002gt\022\304\010\n\003gte\030\005 \001(\001B\257\010" +
+      "\302H\253\010\n\234\001\n\ndouble.gte\032\215\001!has(rules.lt) && " +
+      "!has(rules.lte) && (this.isNan() || this" +
+      " < rules.gte)? \'value must be greater th" +
+      "an or equal to %s\'.format([rules.gte]) :" +
+      " \'\'\n\323\001\n\rdouble.gte_lt\032\301\001has(rules.lt) &&" +
+      " rules.lt >= rules.gte && (this.isNan() " +
+      "|| this >= rules.lt || this < rules.gte)" +
+      "? \'value must be greater than or equal t" +
+      "o %s and less than %s\'.format([rules.gte" +
+      ", rules.lt]) : \'\'\n\335\001\n\027double.gte_lt_excl" +
+      "usive\032\301\001has(rules.lt) && rules.lt < rule" +
+      "s.gte && (this.isNan() || (rules.lt <= t" +
+      "his && this < rules.gte))? \'value must b" +
+      "e greater than or equal to %s or less th" +
+      "an %s\'.format([rules.gte, rules.lt]) : \'" +
+      "\'\n\343\001\n\016double.gte_lte\032\320\001has(rules.lte) &&" +
+      " rules.lte >= rules.gte && (this.isNan()" +
+      " || this > rules.lte || this < rules.gte" +
+      ")? \'value must be greater than or equal " +
+      "to %s and less than or equal to %s\'.form" +
+      "at([rules.gte, rules.lte]) : \'\'\n\355\001\n\030doub" +
+      "le.gte_lte_exclusive\032\320\001has(rules.lte) &&" +
+      " rules.lte < rules.gte && (this.isNan() " +
+      "|| (rules.lte < this && this < rules.gte" +
+      "))? \'value must be greater than or equal" +
+      " to %s or less than or equal to %s\'.form" +
+      "at([rules.gte, rules.lte]) : \'\'H\001R\003gte\022z" +
+      "\n\002in\030\006 \003(\001Bj\302Hg\ne\n\tdouble.in\032X!(this in " +
+      "dyn(rules)[\'in\']) ? \'value must be in li" +
+      "st %s\'.format([dyn(rules)[\'in\']]) : \'\'R\002" +
+      "in\022~\n\006not_in\030\007 \003(\001Bg\302Hd\nb\n\rdouble.not_in" +
+      "\032Qthis in rules.not_in ? \'value must not" +
+      " be in list %s\'.format([rules.not_in]) :" +
+      " \'\'R\005notIn\022h\n\006finite\030\010 \001(\010BP\302HM\nK\n\rdoubl" +
+      "e.finite\032:this.isNan() || this.isInf() ?" +
+      " \'value must be finite\' : \'\'R\006finiteB\013\n\t" +
+      "less_thanB\016\n\014greater_thanB\010\n\006_const\"\342\024\n\n" +
+      "Int32Rules\022u\n\005const\030\001 \001(\005BZ\302HW\nU\n\013int32." +
+      "const\032Fthis != rules.const ? \'value must" +
+      " equal %s\'.format([rules.const]) : \'\'H\002R" +
+      "\005const\210\001\001\022\216\001\n\002lt\030\002 \001(\005B|\302Hy\nw\n\010int32.lt\032" +
+      "k!has(rules.gte) && !has(rules.gt) && th" +
+      "is >= rules.lt? \'value must be less than" +
+      " %s\'.format([rules.lt]) : \'\'H\000R\002lt\022\241\001\n\003l" +
+      "te\030\003 \001(\005B\214\001\302H\210\001\n\205\001\n\tint32.lte\032x!has(rule" +
+      "s.gte) && !has(rules.gt) && this > rules" +
+      ".lte? \'value must be less than or equal " +
+      "to %s\'.format([rules.lte]) : \'\'H\000R\003lte\022\233" +
+      "\007\n\002gt\030\004 \001(\005B\210\007\302H\204\007\nz\n\010int32.gt\032n!has(rul" +
+      "es.lt) && !has(rules.lte) && this <= rul" +
+      "es.gt? \'value must be greater than %s\'.f" +
+      "ormat([rules.gt]) : \'\'\n\263\001\n\013int32.gt_lt\032\243" +
+      "\001has(rules.lt) && rules.lt >= rules.gt &" +
+      "& (this >= rules.lt || this <= rules.gt)" +
+      "? \'value must be greater than %s and les" +
+      "s than %s\'.format([rules.gt, rules.lt]) " +
+      ": \'\'\n\273\001\n\025int32.gt_lt_exclusive\032\241\001has(rul" +
+      "es.lt) && rules.lt < rules.gt && (rules." +
+      "lt <= this && this <= rules.gt)? \'value " +
+      "must be greater than %s or less than %s\'" +
+      ".format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014i" +
+      "nt32.gt_lte\032\262\001has(rules.lte) && rules.lt" +
+      "e >= rules.gt && (this > rules.lte || th" +
+      "is <= rules.gt)? \'value must be greater " +
+      "than %s and less than or equal to %s\'.fo" +
+      "rmat([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int" +
+      "32.gt_lte_exclusive\032\260\001has(rules.lte) && " +
+      "rules.lte < rules.gt && (rules.lte < thi" +
+      "s && this <= rules.gt)? \'value must be g" +
+      "reater than %s or less than or equal to " +
+      "%s\'.format([rules.gt, rules.lte]) : \'\'H\001" +
+      "R\002gt\022\350\007\n\003gte\030\005 \001(\005B\323\007\302H\317\007\n\210\001\n\tint32.gte\032" +
+      "{!has(rules.lt) && !has(rules.lte) && th" +
+      "is < rules.gte? \'value must be greater t" +
+      "han or equal to %s\'.format([rules.gte]) " +
+      ": \'\'\n\302\001\n\014int32.gte_lt\032\261\001has(rules.lt) &&" +
+      " rules.lt >= rules.gte && (this >= rules" +
+      ".lt || this < rules.gte)? \'value must be" +
+      " greater than or equal to %s and less th" +
+      "an %s\'.format([rules.gte, rules.lt]) : \'" +
+      "\'\n\312\001\n\026int32.gte_lt_exclusive\032\257\001has(rules" +
+      ".lt) && rules.lt < rules.gte && (rules.l" +
+      "t <= this && this < rules.gte)? \'value m" +
+      "ust be greater than or equal to %s or le" +
+      "ss than %s\'.format([rules.gte, rules.lt]" +
+      ") : \'\'\n\322\001\n\rint32.gte_lte\032\300\001has(rules.lte" +
+      ") && rules.lte >= rules.gte && (this > r" +
+      "ules.lte || this < rules.gte)? \'value mu" +
+      "st be greater than or equal to %s and le" +
+      "ss than or equal to %s\'.format([rules.gt" +
+      "e, rules.lte]) : \'\'\n\332\001\n\027int32.gte_lte_ex" +
+      "clusive\032\276\001has(rules.lte) && rules.lte < " +
+      "rules.gte && (rules.lte < this && this <" +
+      " rules.gte)? \'value must be greater than" +
+      " or equal to %s or less than or equal to" +
+      " %s\'.format([rules.gte, rules.lte]) : \'\'" +
+      "H\001R\003gte\022y\n\002in\030\006 \003(\005Bi\302Hf\nd\n\010int32.in\032X!(" +
+      "this in dyn(rules)[\'in\']) ? \'value must " +
+      "be in list %s\'.format([dyn(rules)[\'in\']]" +
+      ") : \'\'R\002in\022}\n\006not_in\030\007 \003(\005Bf\302Hc\na\n\014int32" +
+      ".not_in\032Qthis in rules.not_in ? \'value m" +
+      "ust not be in list %s\'.format([rules.not" +
+      "_in]) : \'\'R\005notInB\013\n\tless_thanB\016\n\014greate" +
+      "r_thanB\010\n\006_const\"\342\024\n\nInt64Rules\022u\n\005const" +
+      "\030\001 \001(\003BZ\302HW\nU\n\013int64.const\032Fthis != rule" +
+      "s.const ? \'value must equal %s\'.format([" +
+      "rules.const]) : \'\'H\002R\005const\210\001\001\022\216\001\n\002lt\030\002 " +
+      "\001(\003B|\302Hy\nw\n\010int64.lt\032k!has(rules.gte) &&" +
+      " !has(rules.gt) && this >= rules.lt? \'va" +
+      "lue must be less than %s\'.format([rules." +
+      "lt]) : \'\'H\000R\002lt\022\241\001\n\003lte\030\003 \001(\003B\214\001\302H\210\001\n\205\001\n" +
+      "\tint64.lte\032x!has(rules.gte) && !has(rule" +
+      "s.gt) && this > rules.lte? \'value must b" +
+      "e less than or equal to %s\'.format([rule" +
+      "s.lte]) : \'\'H\000R\003lte\022\233\007\n\002gt\030\004 \001(\003B\210\007\302H\204\007\n" +
+      "z\n\010int64.gt\032n!has(rules.lt) && !has(rule" +
+      "s.lte) && this <= rules.gt? \'value must " +
+      "be greater than %s\'.format([rules.gt]) :" +
+      " \'\'\n\263\001\n\013int64.gt_lt\032\243\001has(rules.lt) && r" +
+      "ules.lt >= rules.gt && (this >= rules.lt" +
+      " || this <= rules.gt)? \'value must be gr" +
+      "eater than %s and less than %s\'.format([" +
+      "rules.gt, rules.lt]) : \'\'\n\273\001\n\025int64.gt_l" +
+      "t_exclusive\032\241\001has(rules.lt) && rules.lt " +
+      "< rules.gt && (rules.lt <= this && this " +
+      "<= rules.gt)? \'value must be greater tha" +
+      "n %s or less than %s\'.format([rules.gt, " +
+      "rules.lt]) : \'\'\n\303\001\n\014int64.gt_lte\032\262\001has(r" +
+      "ules.lte) && rules.lte >= rules.gt && (t" +
+      "his > rules.lte || this <= rules.gt)? \'v" +
+      "alue must be greater than %s and less th" +
+      "an or equal to %s\'.format([rules.gt, rul" +
+      "es.lte]) : \'\'\n\313\001\n\026int64.gt_lte_exclusive" +
+      "\032\260\001has(rules.lte) && rules.lte < rules.g" +
+      "t && (rules.lte < this && this <= rules." +
+      "gt)? \'value must be greater than %s or l" +
+      "ess than or equal to %s\'.format([rules.g" +
+      "t, rules.lte]) : \'\'H\001R\002gt\022\350\007\n\003gte\030\005 \001(\003B" +
+      "\323\007\302H\317\007\n\210\001\n\tint64.gte\032{!has(rules.lt) && " +
+      "!has(rules.lte) && this < rules.gte? \'va" +
+      "lue must be greater than or equal to %s\'" +
+      ".format([rules.gte]) : \'\'\n\302\001\n\014int64.gte_" +
+      "lt\032\261\001has(rules.lt) && rules.lt >= rules." +
+      "gte && (this >= rules.lt || this < rules" +
+      ".gte)? \'value must be greater than or eq" +
+      "ual to %s and less than %s\'.format([rule" +
+      "s.gte, rules.lt]) : \'\'\n\312\001\n\026int64.gte_lt_" +
+      "exclusive\032\257\001has(rules.lt) && rules.lt < " +
+      "rules.gte && (rules.lt <= this && this <" +
+      " rules.gte)? \'value must be greater than" +
+      " or equal to %s or less than %s\'.format(" +
+      "[rules.gte, rules.lt]) : \'\'\n\322\001\n\rint64.gt" +
+      "e_lte\032\300\001has(rules.lte) && rules.lte >= r" +
+      "ules.gte && (this > rules.lte || this < " +
+      "rules.gte)? \'value must be greater than " +
+      "or equal to %s and less than or equal to" +
+      " %s\'.format([rules.gte, rules.lte]) : \'\'" +
+      "\n\332\001\n\027int64.gte_lte_exclusive\032\276\001has(rules" +
+      ".lte) && rules.lte < rules.gte && (rules" +
+      ".lte < this && this < rules.gte)? \'value" +
+      " must be greater than or equal to %s or " +
+      "less than or equal to %s\'.format([rules." +
+      "gte, rules.lte]) : \'\'H\001R\003gte\022y\n\002in\030\006 \003(\003" +
+      "Bi\302Hf\nd\n\010int64.in\032X!(this in dyn(rules)[" +
+      "\'in\']) ? \'value must be in list %s\'.form" +
+      "at([dyn(rules)[\'in\']]) : \'\'R\002in\022}\n\006not_i" +
+      "n\030\007 \003(\003Bf\302Hc\na\n\014int64.not_in\032Qthis in ru" +
+      "les.not_in ? \'value must not be in list " +
+      "%s\'.format([rules.not_in]) : \'\'R\005notInB\013" +
+      "\n\tless_thanB\016\n\014greater_thanB\010\n\006_const\"\362\024" +
+      "\n\013UInt32Rules\022v\n\005const\030\001 \001(\rB[\302HX\nV\n\014uin" +
+      "t32.const\032Fthis != rules.const ? \'value " +
+      "must equal %s\'.format([rules.const]) : \'" +
+      "\'H\002R\005const\210\001\001\022\217\001\n\002lt\030\002 \001(\rB}\302Hz\nx\n\tuint3" +
+      "2.lt\032k!has(rules.gte) && !has(rules.gt) " +
+      "&& this >= rules.lt? \'value must be less" +
+      " than %s\'.format([rules.lt]) : \'\'H\000R\002lt\022" +
+      "\242\001\n\003lte\030\003 \001(\rB\215\001\302H\211\001\n\206\001\n\nuint32.lte\032x!ha" +
+      "s(rules.gte) && !has(rules.gt) && this >" +
+      " rules.lte? \'value must be less than or " +
+      "equal to %s\'.format([rules.lte]) : \'\'H\000R" +
+      "\003lte\022\240\007\n\002gt\030\004 \001(\rB\215\007\302H\211\007\n{\n\tuint32.gt\032n!" +
+      "has(rules.lt) && !has(rules.lte) && this" +
+      " <= rules.gt? \'value must be greater tha" +
+      "n %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint32" +
+      ".gt_lt\032\243\001has(rules.lt) && rules.lt >= ru" +
+      "les.gt && (this >= rules.lt || this <= r" +
+      "ules.gt)? \'value must be greater than %s" +
+      " and less than %s\'.format([rules.gt, rul" +
+      "es.lt]) : \'\'\n\274\001\n\026uint32.gt_lt_exclusive\032" +
+      "\241\001has(rules.lt) && rules.lt < rules.gt &" +
+      "& (rules.lt <= this && this <= rules.gt)" +
+      "? \'value must be greater than %s or less" +
+      " than %s\'.format([rules.gt, rules.lt]) :" +
+      " \'\'\n\304\001\n\ruint32.gt_lte\032\262\001has(rules.lte) &" +
+      "& rules.lte >= rules.gt && (this > rules" +
+      ".lte || this <= rules.gt)? \'value must b" +
+      "e greater than %s and less than or equal" +
+      " to %s\'.format([rules.gt, rules.lte]) : " +
+      "\'\'\n\314\001\n\027uint32.gt_lte_exclusive\032\260\001has(rul" +
+      "es.lte) && rules.lte < rules.gt && (rule" +
+      "s.lte < this && this <= rules.gt)? \'valu" +
+      "e must be greater than %s or less than o" +
+      "r equal to %s\'.format([rules.gt, rules.l" +
+      "te]) : \'\'H\001R\002gt\022\355\007\n\003gte\030\005 \001(\rB\330\007\302H\324\007\n\211\001\n" +
+      "\nuint32.gte\032{!has(rules.lt) && !has(rule" +
+      "s.lte) && this < rules.gte? \'value must " +
+      "be greater than or equal to %s\'.format([" +
+      "rules.gte]) : \'\'\n\303\001\n\ruint32.gte_lt\032\261\001has" +
+      "(rules.lt) && rules.lt >= rules.gte && (" +
+      "this >= rules.lt || this < rules.gte)? \'" +
+      "value must be greater than or equal to %" +
+      "s and less than %s\'.format([rules.gte, r" +
+      "ules.lt]) : \'\'\n\313\001\n\027uint32.gte_lt_exclusi" +
+      "ve\032\257\001has(rules.lt) && rules.lt < rules.g" +
+      "te && (rules.lt <= this && this < rules." +
+      "gte)? \'value must be greater than or equ" +
+      "al to %s or less than %s\'.format([rules." +
+      "gte, rules.lt]) : \'\'\n\323\001\n\016uint32.gte_lte\032" +
+      "\300\001has(rules.lte) && rules.lte >= rules.g" +
+      "te && (this > rules.lte || this < rules." +
+      "gte)? \'value must be greater than or equ" +
+      "al to %s and less than or equal to %s\'.f" +
+      "ormat([rules.gte, rules.lte]) : \'\'\n\333\001\n\030u" +
+      "int32.gte_lte_exclusive\032\276\001has(rules.lte)" +
+      " && rules.lte < rules.gte && (rules.lte " +
+      "< this && this < rules.gte)? \'value must" +
+      " be greater than or equal to %s or less " +
+      "than or equal to %s\'.format([rules.gte, " +
+      "rules.lte]) : \'\'H\001R\003gte\022z\n\002in\030\006 \003(\rBj\302Hg" +
+      "\ne\n\tuint32.in\032X!(this in dyn(rules)[\'in\'" +
+      "]) ? \'value must be in list %s\'.format([" +
+      "dyn(rules)[\'in\']]) : \'\'R\002in\022~\n\006not_in\030\007 " +
+      "\003(\rBg\302Hd\nb\n\ruint32.not_in\032Qthis in rules" +
+      ".not_in ? \'value must not be in list %s\'" +
+      ".format([rules.not_in]) : \'\'R\005notInB\013\n\tl" +
+      "ess_thanB\016\n\014greater_thanB\010\n\006_const\"\362\024\n\013U" +
+      "Int64Rules\022v\n\005const\030\001 \001(\004B[\302HX\nV\n\014uint64" +
+      ".const\032Fthis != rules.const ? \'value mus" +
+      "t equal %s\'.format([rules.const]) : \'\'H\002" +
+      "R\005const\210\001\001\022\217\001\n\002lt\030\002 \001(\004B}\302Hz\nx\n\tuint64.l" +
+      "t\032k!has(rules.gte) && !has(rules.gt) && " +
+      "this >= rules.lt? \'value must be less th" +
+      "an %s\'.format([rules.lt]) : \'\'H\000R\002lt\022\242\001\n" +
+      "\003lte\030\003 \001(\004B\215\001\302H\211\001\n\206\001\n\nuint64.lte\032x!has(r" +
+      "ules.gte) && !has(rules.gt) && this > ru",
+      "les.lte? \'value must be less than or equ" +
+      "al to %s\'.format([rules.lte]) : \'\'H\000R\003lt" +
+      "e\022\240\007\n\002gt\030\004 \001(\004B\215\007\302H\211\007\n{\n\tuint64.gt\032n!has" +
+      "(rules.lt) && !has(rules.lte) && this <=" +
+      " rules.gt? \'value must be greater than %" +
+      "s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint64.gt" +
+      "_lt\032\243\001has(rules.lt) && rules.lt >= rules" +
+      ".gt && (this >= rules.lt || this <= rule" +
+      "s.gt)? \'value must be greater than %s an" +
+      "d less than %s\'.format([rules.gt, rules." +
+      "lt]) : \'\'\n\274\001\n\026uint64.gt_lt_exclusive\032\241\001h" +
+      "as(rules.lt) && rules.lt < rules.gt && (" +
+      "rules.lt <= this && this <= rules.gt)? \'" +
+      "value must be greater than %s or less th" +
+      "an %s\'.format([rules.gt, rules.lt]) : \'\'" +
+      "\n\304\001\n\ruint64.gt_lte\032\262\001has(rules.lte) && r" +
+      "ules.lte >= rules.gt && (this > rules.lt" +
+      "e || this <= rules.gt)? \'value must be g" +
+      "reater than %s and less than or equal to" +
+      " %s\'.format([rules.gt, rules.lte]) : \'\'\n" +
+      "\314\001\n\027uint64.gt_lte_exclusive\032\260\001has(rules." +
+      "lte) && rules.lte < rules.gt && (rules.l" +
+      "te < this && this <= rules.gt)? \'value m" +
+      "ust be greater than %s or less than or e" +
+      "qual to %s\'.format([rules.gt, rules.lte]" +
+      ") : \'\'H\001R\002gt\022\355\007\n\003gte\030\005 \001(\004B\330\007\302H\324\007\n\211\001\n\nui" +
+      "nt64.gte\032{!has(rules.lt) && !has(rules.l" +
+      "te) && this < rules.gte? \'value must be " +
+      "greater than or equal to %s\'.format([rul" +
+      "es.gte]) : \'\'\n\303\001\n\ruint64.gte_lt\032\261\001has(ru" +
+      "les.lt) && rules.lt >= rules.gte && (thi" +
+      "s >= rules.lt || this < rules.gte)? \'val" +
+      "ue must be greater than or equal to %s a" +
+      "nd less than %s\'.format([rules.gte, rule" +
+      "s.lt]) : \'\'\n\313\001\n\027uint64.gte_lt_exclusive\032" +
+      "\257\001has(rules.lt) && rules.lt < rules.gte " +
+      "&& (rules.lt <= this && this < rules.gte" +
+      ")? \'value must be greater than or equal " +
+      "to %s or less than %s\'.format([rules.gte" +
+      ", rules.lt]) : \'\'\n\323\001\n\016uint64.gte_lte\032\300\001h" +
+      "as(rules.lte) && rules.lte >= rules.gte " +
+      "&& (this > rules.lte || this < rules.gte" +
+      ")? \'value must be greater than or equal " +
+      "to %s and less than or equal to %s\'.form" +
+      "at([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint" +
+      "64.gte_lte_exclusive\032\276\001has(rules.lte) &&" +
+      " rules.lte < rules.gte && (rules.lte < t" +
+      "his && this < rules.gte)? \'value must be" +
+      " greater than or equal to %s or less tha" +
+      "n or equal to %s\'.format([rules.gte, rul" +
+      "es.lte]) : \'\'H\001R\003gte\022z\n\002in\030\006 \003(\004Bj\302Hg\ne\n" +
+      "\tuint64.in\032X!(this in dyn(rules)[\'in\']) " +
+      "? \'value must be in list %s\'.format([dyn" +
+      "(rules)[\'in\']]) : \'\'R\002in\022~\n\006not_in\030\007 \003(\004" +
+      "Bg\302Hd\nb\n\ruint64.not_in\032Qthis in rules.no" +
+      "t_in ? \'value must not be in list %s\'.fo" +
+      "rmat([rules.not_in]) : \'\'R\005notInB\013\n\tless" +
+      "_thanB\016\n\014greater_thanB\010\n\006_const\"\362\024\n\013SInt" +
+      "32Rules\022v\n\005const\030\001 \001(\021B[\302HX\nV\n\014sint32.co" +
+      "nst\032Fthis != rules.const ? \'value must e" +
+      "qual %s\'.format([rules.const]) : \'\'H\002R\005c" +
+      "onst\210\001\001\022\217\001\n\002lt\030\002 \001(\021B}\302Hz\nx\n\tsint32.lt\032k" +
+      "!has(rules.gte) && !has(rules.gt) && thi" +
+      "s >= rules.lt? \'value must be less than " +
+      "%s\'.format([rules.lt]) : \'\'H\000R\002lt\022\242\001\n\003lt" +
+      "e\030\003 \001(\021B\215\001\302H\211\001\n\206\001\n\nsint32.lte\032x!has(rule" +
+      "s.gte) && !has(rules.gt) && this > rules" +
+      ".lte? \'value must be less than or equal " +
+      "to %s\'.format([rules.lte]) : \'\'H\000R\003lte\022\240" +
+      "\007\n\002gt\030\004 \001(\021B\215\007\302H\211\007\n{\n\tsint32.gt\032n!has(ru" +
+      "les.lt) && !has(rules.lte) && this <= ru" +
+      "les.gt? \'value must be greater than %s\'." +
+      "format([rules.gt]) : \'\'\n\264\001\n\014sint32.gt_lt" +
+      "\032\243\001has(rules.lt) && rules.lt >= rules.gt" +
+      " && (this >= rules.lt || this <= rules.g" +
+      "t)? \'value must be greater than %s and l" +
+      "ess than %s\'.format([rules.gt, rules.lt]" +
+      ") : \'\'\n\274\001\n\026sint32.gt_lt_exclusive\032\241\001has(" +
+      "rules.lt) && rules.lt < rules.gt && (rul" +
+      "es.lt <= this && this <= rules.gt)? \'val" +
+      "ue must be greater than %s or less than " +
+      "%s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001" +
+      "\n\rsint32.gt_lte\032\262\001has(rules.lte) && rule" +
+      "s.lte >= rules.gt && (this > rules.lte |" +
+      "| this <= rules.gt)? \'value must be grea" +
+      "ter than %s and less than or equal to %s" +
+      "\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n" +
+      "\027sint32.gt_lte_exclusive\032\260\001has(rules.lte" +
+      ") && rules.lte < rules.gt && (rules.lte " +
+      "< this && this <= rules.gt)? \'value must" +
+      " be greater than %s or less than or equa" +
+      "l to %s\'.format([rules.gt, rules.lte]) :" +
+      " \'\'H\001R\002gt\022\355\007\n\003gte\030\005 \001(\021B\330\007\302H\324\007\n\211\001\n\nsint3" +
+      "2.gte\032{!has(rules.lt) && !has(rules.lte)" +
+      " && this < rules.gte? \'value must be gre" +
+      "ater than or equal to %s\'.format([rules." +
+      "gte]) : \'\'\n\303\001\n\rsint32.gte_lt\032\261\001has(rules" +
+      ".lt) && rules.lt >= rules.gte && (this >" +
+      "= rules.lt || this < rules.gte)? \'value " +
+      "must be greater than or equal to %s and " +
+      "less than %s\'.format([rules.gte, rules.l" +
+      "t]) : \'\'\n\313\001\n\027sint32.gte_lt_exclusive\032\257\001h" +
+      "as(rules.lt) && rules.lt < rules.gte && " +
+      "(rules.lt <= this && this < rules.gte)? " +
+      "\'value must be greater than or equal to " +
+      "%s or less than %s\'.format([rules.gte, r" +
+      "ules.lt]) : \'\'\n\323\001\n\016sint32.gte_lte\032\300\001has(" +
+      "rules.lte) && rules.lte >= rules.gte && " +
+      "(this > rules.lte || this < rules.gte)? " +
+      "\'value must be greater than or equal to " +
+      "%s and less than or equal to %s\'.format(" +
+      "[rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint32." +
+      "gte_lte_exclusive\032\276\001has(rules.lte) && ru" +
+      "les.lte < rules.gte && (rules.lte < this" +
+      " && this < rules.gte)? \'value must be gr" +
+      "eater than or equal to %s or less than o" +
+      "r equal to %s\'.format([rules.gte, rules." +
+      "lte]) : \'\'H\001R\003gte\022z\n\002in\030\006 \003(\021Bj\302Hg\ne\n\tsi" +
+      "nt32.in\032X!(this in dyn(rules)[\'in\']) ? \'" +
+      "value must be in list %s\'.format([dyn(ru" +
+      "les)[\'in\']]) : \'\'R\002in\022~\n\006not_in\030\007 \003(\021Bg\302" +
+      "Hd\nb\n\rsint32.not_in\032Qthis in rules.not_i" +
+      "n ? \'value must not be in list %s\'.forma" +
+      "t([rules.not_in]) : \'\'R\005notInB\013\n\tless_th" +
+      "anB\016\n\014greater_thanB\010\n\006_const\"\362\024\n\013SInt64R" +
+      "ules\022v\n\005const\030\001 \001(\022B[\302HX\nV\n\014sint64.const" +
+      "\032Fthis != rules.const ? \'value must equa" +
+      "l %s\'.format([rules.const]) : \'\'H\002R\005cons" +
+      "t\210\001\001\022\217\001\n\002lt\030\002 \001(\022B}\302Hz\nx\n\tsint64.lt\032k!ha" +
+      "s(rules.gte) && !has(rules.gt) && this >" +
+      "= rules.lt? \'value must be less than %s\'" +
+      ".format([rules.lt]) : \'\'H\000R\002lt\022\242\001\n\003lte\030\003" +
+      " \001(\022B\215\001\302H\211\001\n\206\001\n\nsint64.lte\032x!has(rules.g" +
+      "te) && !has(rules.gt) && this > rules.lt" +
+      "e? \'value must be less than or equal to " +
+      "%s\'.format([rules.lte]) : \'\'H\000R\003lte\022\240\007\n\002" +
+      "gt\030\004 \001(\022B\215\007\302H\211\007\n{\n\tsint64.gt\032n!has(rules" +
+      ".lt) && !has(rules.lte) && this <= rules" +
+      ".gt? \'value must be greater than %s\'.for" +
+      "mat([rules.gt]) : \'\'\n\264\001\n\014sint64.gt_lt\032\243\001" +
+      "has(rules.lt) && rules.lt >= rules.gt &&" +
+      " (this >= rules.lt || this <= rules.gt)?" +
+      " \'value must be greater than %s and less" +
+      " than %s\'.format([rules.gt, rules.lt]) :" +
+      " \'\'\n\274\001\n\026sint64.gt_lt_exclusive\032\241\001has(rul" +
+      "es.lt) && rules.lt < rules.gt && (rules." +
+      "lt <= this && this <= rules.gt)? \'value " +
+      "must be greater than %s or less than %s\'" +
+      ".format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rs" +
+      "int64.gt_lte\032\262\001has(rules.lte) && rules.l" +
+      "te >= rules.gt && (this > rules.lte || t" +
+      "his <= rules.gt)? \'value must be greater" +
+      " than %s and less than or equal to %s\'.f" +
+      "ormat([rules.gt, rules.lte]) : \'\'\n\314\001\n\027si" +
+      "nt64.gt_lte_exclusive\032\260\001has(rules.lte) &" +
+      "& rules.lte < rules.gt && (rules.lte < t" +
+      "his && this <= rules.gt)? \'value must be" +
+      " greater than %s or less than or equal t" +
+      "o %s\'.format([rules.gt, rules.lte]) : \'\'" +
+      "H\001R\002gt\022\355\007\n\003gte\030\005 \001(\022B\330\007\302H\324\007\n\211\001\n\nsint64.g" +
+      "te\032{!has(rules.lt) && !has(rules.lte) &&" +
+      " this < rules.gte? \'value must be greate" +
+      "r than or equal to %s\'.format([rules.gte" +
+      "]) : \'\'\n\303\001\n\rsint64.gte_lt\032\261\001has(rules.lt" +
+      ") && rules.lt >= rules.gte && (this >= r" +
+      "ules.lt || this < rules.gte)? \'value mus" +
+      "t be greater than or equal to %s and les" +
+      "s than %s\'.format([rules.gte, rules.lt])" +
+      " : \'\'\n\313\001\n\027sint64.gte_lt_exclusive\032\257\001has(" +
+      "rules.lt) && rules.lt < rules.gte && (ru" +
+      "les.lt <= this && this < rules.gte)? \'va" +
+      "lue must be greater than or equal to %s " +
+      "or less than %s\'.format([rules.gte, rule" +
+      "s.lt]) : \'\'\n\323\001\n\016sint64.gte_lte\032\300\001has(rul" +
+      "es.lte) && rules.lte >= rules.gte && (th" +
+      "is > rules.lte || this < rules.gte)? \'va" +
+      "lue must be greater than or equal to %s " +
+      "and less than or equal to %s\'.format([ru" +
+      "les.gte, rules.lte]) : \'\'\n\333\001\n\030sint64.gte" +
+      "_lte_exclusive\032\276\001has(rules.lte) && rules" +
+      ".lte < rules.gte && (rules.lte < this &&" +
+      " this < rules.gte)? \'value must be great" +
+      "er than or equal to %s or less than or e" +
+      "qual to %s\'.format([rules.gte, rules.lte" +
+      "]) : \'\'H\001R\003gte\022z\n\002in\030\006 \003(\022Bj\302Hg\ne\n\tsint6" +
+      "4.in\032X!(this in dyn(rules)[\'in\']) ? \'val" +
+      "ue must be in list %s\'.format([dyn(rules" +
+      ")[\'in\']]) : \'\'R\002in\022~\n\006not_in\030\007 \003(\022Bg\302Hd\n" +
+      "b\n\rsint64.not_in\032Qthis in rules.not_in ?" +
+      " \'value must not be in list %s\'.format([" +
+      "rules.not_in]) : \'\'R\005notInB\013\n\tless_thanB" +
+      "\016\n\014greater_thanB\010\n\006_const\"\202\025\n\014Fixed32Rul" +
+      "es\022w\n\005const\030\001 \001(\007B\\\302HY\nW\n\rfixed32.const\032" +
+      "Fthis != rules.const ? \'value must equal" +
+      " %s\'.format([rules.const]) : \'\'H\002R\005const" +
+      "\210\001\001\022\220\001\n\002lt\030\002 \001(\007B~\302H{\ny\n\nfixed32.lt\032k!ha" +
+      "s(rules.gte) && !has(rules.gt) && this >" +
+      "= rules.lt? \'value must be less than %s\'" +
+      ".format([rules.lt]) : \'\'H\000R\002lt\022\243\001\n\003lte\030\003" +
+      " \001(\007B\216\001\302H\212\001\n\207\001\n\013fixed32.lte\032x!has(rules." +
+      "gte) && !has(rules.gt) && this > rules.l" +
+      "te? \'value must be less than or equal to" +
+      " %s\'.format([rules.lte]) : \'\'H\000R\003lte\022\245\007\n" +
+      "\002gt\030\004 \001(\007B\222\007\302H\216\007\n|\n\nfixed32.gt\032n!has(rul" +
+      "es.lt) && !has(rules.lte) && this <= rul" +
+      "es.gt? \'value must be greater than %s\'.f" +
+      "ormat([rules.gt]) : \'\'\n\265\001\n\rfixed32.gt_lt" +
+      "\032\243\001has(rules.lt) && rules.lt >= rules.gt" +
+      " && (this >= rules.lt || this <= rules.g" +
+      "t)? \'value must be greater than %s and l" +
+      "ess than %s\'.format([rules.gt, rules.lt]" +
+      ") : \'\'\n\275\001\n\027fixed32.gt_lt_exclusive\032\241\001has" +
+      "(rules.lt) && rules.lt < rules.gt && (ru" +
+      "les.lt <= this && this <= rules.gt)? \'va" +
+      "lue must be greater than %s or less than" +
+      " %s\'.format([rules.gt, rules.lt]) : \'\'\n\305" +
+      "\001\n\016fixed32.gt_lte\032\262\001has(rules.lte) && ru" +
+      "les.lte >= rules.gt && (this > rules.lte" +
+      " || this <= rules.gt)? \'value must be gr" +
+      "eater than %s and less than or equal to " +
+      "%s\'.format([rules.gt, rules.lte]) : \'\'\n\315" +
+      "\001\n\030fixed32.gt_lte_exclusive\032\260\001has(rules." +
+      "lte) && rules.lte < rules.gt && (rules.l" +
+      "te < this && this <= rules.gt)? \'value m" +
+      "ust be greater than %s or less than or e" +
+      "qual to %s\'.format([rules.gt, rules.lte]" +
+      ") : \'\'H\001R\002gt\022\362\007\n\003gte\030\005 \001(\007B\335\007\302H\331\007\n\212\001\n\013fi" +
+      "xed32.gte\032{!has(rules.lt) && !has(rules." +
+      "lte) && this < rules.gte? \'value must be" +
+      " greater than or equal to %s\'.format([ru" +
+      "les.gte]) : \'\'\n\304\001\n\016fixed32.gte_lt\032\261\001has(" +
+      "rules.lt) && rules.lt >= rules.gte && (t" +
+      "his >= rules.lt || this < rules.gte)? \'v" +
+      "alue must be greater than or equal to %s" +
+      " and less than %s\'.format([rules.gte, ru" +
+      "les.lt]) : \'\'\n\314\001\n\030fixed32.gte_lt_exclusi" +
+      "ve\032\257\001has(rules.lt) && rules.lt < rules.g" +
+      "te && (rules.lt <= this && this < rules." +
+      "gte)? \'value must be greater than or equ" +
+      "al to %s or less than %s\'.format([rules." +
+      "gte, rules.lt]) : \'\'\n\324\001\n\017fixed32.gte_lte" +
+      "\032\300\001has(rules.lte) && rules.lte >= rules." +
+      "gte && (this > rules.lte || this < rules" +
+      ".gte)? \'value must be greater than or eq" +
+      "ual to %s and less than or equal to %s\'." +
+      "format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031" +
+      "fixed32.gte_lte_exclusive\032\276\001has(rules.lt" +
+      "e) && rules.lte < rules.gte && (rules.lt" +
+      "e < this && this < rules.gte)? \'value mu" +
+      "st be greater than or equal to %s or les" +
+      "s than or equal to %s\'.format([rules.gte" +
+      ", rules.lte]) : \'\'H\001R\003gte\022{\n\002in\030\006 \003(\007Bk\302" +
+      "Hh\nf\n\nfixed32.in\032X!(this in dyn(rules)[\'" +
+      "in\']) ? \'value must be in list %s\'.forma" +
+      "t([dyn(rules)[\'in\']]) : \'\'R\002in\022\177\n\006not_in" +
+      "\030\007 \003(\007Bh\302He\nc\n\016fixed32.not_in\032Qthis in r" +
+      "ules.not_in ? \'value must not be in list" +
+      " %s\'.format([rules.not_in]) : \'\'R\005notInB" +
+      "\013\n\tless_thanB\016\n\014greater_thanB\010\n\006_const\"\202" +
+      "\025\n\014Fixed64Rules\022w\n\005const\030\001 \001(\006B\\\302HY\nW\n\rf" +
+      "ixed64.const\032Fthis != rules.const ? \'val" +
+      "ue must equal %s\'.format([rules.const]) " +
+      ": \'\'H\002R\005const\210\001\001\022\220\001\n\002lt\030\002 \001(\006B~\302H{\ny\n\nfi" +
+      "xed64.lt\032k!has(rules.gte) && !has(rules." +
+      "gt) && this >= rules.lt? \'value must be " +
+      "less than %s\'.format([rules.lt]) : \'\'H\000R" +
+      "\002lt\022\243\001\n\003lte\030\003 \001(\006B\216\001\302H\212\001\n\207\001\n\013fixed64.lte" +
+      "\032x!has(rules.gte) && !has(rules.gt) && t" +
+      "his > rules.lte? \'value must be less tha" +
+      "n or equal to %s\'.format([rules.lte]) : " +
+      "\'\'H\000R\003lte\022\245\007\n\002gt\030\004 \001(\006B\222\007\302H\216\007\n|\n\nfixed64" +
+      ".gt\032n!has(rules.lt) && !has(rules.lte) &" +
+      "& this <= rules.gt? \'value must be great" +
+      "er than %s\'.format([rules.gt]) : \'\'\n\265\001\n\r" +
+      "fixed64.gt_lt\032\243\001has(rules.lt) && rules.l" +
+      "t >= rules.gt && (this >= rules.lt || th" +
+      "is <= rules.gt)? \'value must be greater " +
+      "than %s and less than %s\'.format([rules." +
+      "gt, rules.lt]) : \'\'\n\275\001\n\027fixed64.gt_lt_ex" +
+      "clusive\032\241\001has(rules.lt) && rules.lt < ru" +
+      "les.gt && (rules.lt <= this && this <= r" +
+      "ules.gt)? \'value must be greater than %s" +
+      " or less than %s\'.format([rules.gt, rule" +
+      "s.lt]) : \'\'\n\305\001\n\016fixed64.gt_lte\032\262\001has(rul" +
+      "es.lte) && rules.lte >= rules.gt && (thi" +
+      "s > rules.lte || this <= rules.gt)? \'val" +
+      "ue must be greater than %s and less than" +
+      " or equal to %s\'.format([rules.gt, rules" +
+      ".lte]) : \'\'\n\315\001\n\030fixed64.gt_lte_exclusive" +
+      "\032\260\001has(rules.lte) && rules.lte < rules.g" +
+      "t && (rules.lte < this && this <= rules." +
+      "gt)? \'value must be greater than %s or l" +
+      "ess than or equal to %s\'.format([rules.g" +
+      "t, rules.lte]) : \'\'H\001R\002gt\022\362\007\n\003gte\030\005 \001(\006B" +
+      "\335\007\302H\331\007\n\212\001\n\013fixed64.gte\032{!has(rules.lt) &" +
+      "& !has(rules.lte) && this < rules.gte? \'" +
+      "value must be greater than or equal to %" +
+      "s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed64." +
+      "gte_lt\032\261\001has(rules.lt) && rules.lt >= ru" +
+      "les.gte && (this >= rules.lt || this < r" +
+      "ules.gte)? \'value must be greater than o" +
+      "r equal to %s and less than %s\'.format([" +
+      "rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed64.g" +
+      "te_lt_exclusive\032\257\001has(rules.lt) && rules" +
+      ".lt < rules.gte && (rules.lt <= this && " +
+      "this < rules.gte)? \'value must be greate" +
+      "r than or equal to %s or less than %s\'.f" +
+      "ormat([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fi" +
+      "xed64.gte_lte\032\300\001has(rules.lte) && rules." +
+      "lte >= rules.gte && (this > rules.lte ||" +
+      " this < rules.gte)? \'value must be great" +
+      "er than or equal to %s and less than or " +
+      "equal to %s\'.format([rules.gte, rules.lt" +
+      "e]) : \'\'\n\334\001\n\031fixed64.gte_lte_exclusive\032\276" +
+      "\001has(rules.lte) && rules.lte < rules.gte" +
+      " && (rules.lte < this && this < rules.gt" +
+      "e)? \'value must be greater than or equal" +
+      " to %s or less than or equal to %s\'.form" +
+      "at([rules.gte, rules.lte]) : \'\'H\001R\003gte\022{" +
+      "\n\002in\030\006 \003(\006Bk\302Hh\nf\n\nfixed64.in\032X!(this in" +
+      " dyn(rules)[\'in\']) ? \'value must be in l" +
+      "ist %s\'.format([dyn(rules)[\'in\']]) : \'\'R" +
+      "\002in\022\177\n\006not_in\030\007 \003(\006Bh\302He\nc\n\016fixed64.not_" +
+      "in\032Qthis in rules.not_in ? \'value must n" +
+      "ot be in list %s\'.format([rules.not_in])" +
+      " : \'\'R\005notInB\013\n\tless_thanB\016\n\014greater_tha" +
+      "nB\010\n\006_const\"\223\025\n\rSFixed32Rules\022x\n\005const\030\001" +
+      " \001(\017B]\302HZ\nX\n\016sfixed32.const\032Fthis != rul" +
+      "es.const ? \'value must equal %s\'.format(" +
+      "[rules.const]) : \'\'H\002R\005const\210\001\001\022\221\001\n\002lt\030\002" +
+      " \001(\017B\177\302H|\nz\n\013sfixed32.lt\032k!has(rules.gte" +
+      ") && !has(rules.gt) && this >= rules.lt?" +
+      " \'value must be less than %s\'.format([ru" +
+      "les.lt]) : \'\'H\000R\002lt\022\244\001\n\003lte\030\003 \001(\017B\217\001\302H\213\001" +
+      "\n\210\001\n\014sfixed32.lte\032x!has(rules.gte) && !h" +
+      "as(rules.gt) && this > rules.lte? \'value" +
+      " must be less than or equal to %s\'.forma" +
+      "t([rules.lte]) : \'\'H\000R\003lte\022\252\007\n\002gt\030\004 \001(\017B" +
+      "\227\007\302H\223\007\n}\n\013sfixed32.gt\032n!has(rules.lt) &&" +
+      " !has(rules.lte) && this <= rules.gt? \'v" +
+      "alue must be greater than %s\'.format([ru" +
+      "les.gt]) : \'\'\n\266\001\n\016sfixed32.gt_lt\032\243\001has(r" +
+      "ules.lt) && rules.lt >= rules.gt && (thi" +
+      "s >= rules.lt || this <= rules.gt)? \'val" +
+      "ue must be greater than %s and less than" +
+      " %s\'.format([rules.gt, rules.lt]) : \'\'\n\276" +
+      "\001\n\030sfixed32.gt_lt_exclusive\032\241\001has(rules." +
+      "lt) && rules.lt < rules.gt && (rules.lt " +
+      "<= this && this <= rules.gt)? \'value mus" +
+      "t be greater than %s or less than %s\'.fo" +
+      "rmat([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfix" +
+      "ed32.gt_lte\032\262\001has(rules.lte) && rules.lt" +
+      "e >= rules.gt && (this > rules.lte || th" +
+      "is <= rules.gt)? \'value must be greater " +
+      "than %s and less than or equal to %s\'.fo" +
+      "rmat([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfi" +
+      "xed32.gt_lte_exclusive\032\260\001has(rules.lte) " +
+      "&& rules.lte < rules.gt && (rules.lte < " +
+      "this && this <= rules.gt)? \'value must b" +
+      "e greater than %s or less than or equal " +
+      "to %s\'.format([rules.gt, rules.lte]) : \'" +
+      "\'H\001R\002gt\022\367\007\n\003gte\030\005 \001(\017B\342\007\302H\336\007\n\213\001\n\014sfixed3" +
+      "2.gte\032{!has(rules.lt) && !has(rules.lte)" +
+      " && this < rules.gte? \'value must be gre" +
+      "ater than or equal to %s\'.format([rules." +
+      "gte]) : \'\'\n\305\001\n\017sfixed32.gte_lt\032\261\001has(rul" +
+      "es.lt) && rules.lt >= rules.gte && (this" +
+      " >= rules.lt || this < rules.gte)? \'valu" +
+      "e must be greater than or equal to %s an" +
+      "d less than %s\'.format([rules.gte, rules" +
+      ".lt]) : \'\'\n\315\001\n\031sfixed32.gte_lt_exclusive" +
+      "\032\257\001has(rules.lt) && rules.lt < rules.gte" +
+      " && (rules.lt <= this && this < rules.gt" +
+      "e)? \'value must be greater than or equal" +
+      " to %s or less than %s\'.format([rules.gt" +
+      "e, rules.lt]) : \'\'\n\325\001\n\020sfixed32.gte_lte\032" +
+      "\300\001has(rules.lte) && rules.lte >= rules.g" +
+      "te && (this > rules.lte || this < rules." +
+      "gte)? \'value must be greater than or equ" +
+      "al to %s and less than or equal to %s\'.f" +
+      "ormat([rules.gte, rules.lte]) : \'\'\n\335\001\n\032s" +
+      "fixed32.gte_lte_exclusive\032\276\001has(rules.lt" +
+      "e) && rules.lte < rules.gte && (rules.lt" +
+      "e < this && this < rules.gte)? \'value mu" +
+      "st be greater than or equal to %s or les" +
+      "s than or equal to %s\'.format([rules.gte" +
+      ", rules.lte]) : \'\'H\001R\003gte\022|\n\002in\030\006 \003(\017Bl\302" +
+      "Hi\ng\n\013sfixed32.in\032X!(this in dyn(rules)[" +
+      "\'in\']) ? \'value must be in list %s\'.form" +
+      "at([dyn(rules)[\'in\']]) : \'\'R\002in\022\200\001\n\006not_" +
+      "in\030\007 \003(\017Bi\302Hf\nd\n\017sfixed32.not_in\032Qthis i" +
+      "n rules.not_in ? \'value must not be in l" +
+      "ist %s\'.format([rules.not_in]) : \'\'R\005not" +
+      "InB\013\n\tless_thanB\016\n\014greater_thanB\010\n\006_cons" +
+      "t\"\223\025\n\rSFixed64Rules\022x\n\005const\030\001 \001(\020B]\302HZ\n" +
+      "X\n\016sfixed64.const\032Fthis != rules.const ?" +
+      " \'value must equal %s\'.format([rules.con" +
+      "st]) : \'\'H\002R\005const\210\001\001\022\221\001\n\002lt\030\002 \001(\020B\177\302H|\n" +
+      "z\n\013sfixed64.lt\032k!has(rules.gte) && !has(" +
+      "rules.gt) && this >= rules.lt? \'value mu",
+      "st be less than %s\'.format([rules.lt]) :" +
+      " \'\'H\000R\002lt\022\244\001\n\003lte\030\003 \001(\020B\217\001\302H\213\001\n\210\001\n\014sfixe" +
+      "d64.lte\032x!has(rules.gte) && !has(rules.g" +
+      "t) && this > rules.lte? \'value must be l" +
+      "ess than or equal to %s\'.format([rules.l" +
+      "te]) : \'\'H\000R\003lte\022\252\007\n\002gt\030\004 \001(\020B\227\007\302H\223\007\n}\n\013" +
+      "sfixed64.gt\032n!has(rules.lt) && !has(rule" +
+      "s.lte) && this <= rules.gt? \'value must " +
+      "be greater than %s\'.format([rules.gt]) :" +
+      " \'\'\n\266\001\n\016sfixed64.gt_lt\032\243\001has(rules.lt) &" +
+      "& rules.lt >= rules.gt && (this >= rules" +
+      ".lt || this <= rules.gt)? \'value must be" +
+      " greater than %s and less than %s\'.forma" +
+      "t([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed6" +
+      "4.gt_lt_exclusive\032\241\001has(rules.lt) && rul" +
+      "es.lt < rules.gt && (rules.lt <= this &&" +
+      " this <= rules.gt)? \'value must be great" +
+      "er than %s or less than %s\'.format([rule" +
+      "s.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed64.gt_lt" +
+      "e\032\262\001has(rules.lte) && rules.lte >= rules" +
+      ".gt && (this > rules.lte || this <= rule" +
+      "s.gt)? \'value must be greater than %s an" +
+      "d less than or equal to %s\'.format([rule" +
+      "s.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed64.gt_l" +
+      "te_exclusive\032\260\001has(rules.lte) && rules.l" +
+      "te < rules.gt && (rules.lte < this && th" +
+      "is <= rules.gt)? \'value must be greater " +
+      "than %s or less than or equal to %s\'.for" +
+      "mat([rules.gt, rules.lte]) : \'\'H\001R\002gt\022\367\007" +
+      "\n\003gte\030\005 \001(\020B\342\007\302H\336\007\n\213\001\n\014sfixed64.gte\032{!ha" +
+      "s(rules.lt) && !has(rules.lte) && this <" +
+      " rules.gte? \'value must be greater than " +
+      "or equal to %s\'.format([rules.gte]) : \'\'" +
+      "\n\305\001\n\017sfixed64.gte_lt\032\261\001has(rules.lt) && " +
+      "rules.lt >= rules.gte && (this >= rules." +
+      "lt || this < rules.gte)? \'value must be " +
+      "greater than or equal to %s and less tha" +
+      "n %s\'.format([rules.gte, rules.lt]) : \'\'" +
+      "\n\315\001\n\031sfixed64.gte_lt_exclusive\032\257\001has(rul" +
+      "es.lt) && rules.lt < rules.gte && (rules" +
+      ".lt <= this && this < rules.gte)? \'value" +
+      " must be greater than or equal to %s or " +
+      "less than %s\'.format([rules.gte, rules.l" +
+      "t]) : \'\'\n\325\001\n\020sfixed64.gte_lte\032\300\001has(rule" +
+      "s.lte) && rules.lte >= rules.gte && (thi" +
+      "s > rules.lte || this < rules.gte)? \'val" +
+      "ue must be greater than or equal to %s a" +
+      "nd less than or equal to %s\'.format([rul" +
+      "es.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed64.gt" +
+      "e_lte_exclusive\032\276\001has(rules.lte) && rule" +
+      "s.lte < rules.gte && (rules.lte < this &" +
+      "& this < rules.gte)? \'value must be grea" +
+      "ter than or equal to %s or less than or " +
+      "equal to %s\'.format([rules.gte, rules.lt" +
+      "e]) : \'\'H\001R\003gte\022|\n\002in\030\006 \003(\020Bl\302Hi\ng\n\013sfix" +
+      "ed64.in\032X!(this in dyn(rules)[\'in\']) ? \'" +
+      "value must be in list %s\'.format([dyn(ru" +
+      "les)[\'in\']]) : \'\'R\002in\022\200\001\n\006not_in\030\007 \003(\020Bi" +
+      "\302Hf\nd\n\017sfixed64.not_in\032Qthis in rules.no" +
+      "t_in ? \'value must not be in list %s\'.fo" +
+      "rmat([rules.not_in]) : \'\'R\005notInB\013\n\tless" +
+      "_thanB\016\n\014greater_thanB\010\n\006_const\"\213\001\n\tBool" +
+      "Rules\022t\n\005const\030\001 \001(\010BY\302HV\nT\n\nbool.const\032" +
+      "Fthis != rules.const ? \'value must equal" +
+      " %s\'.format([rules.const]) : \'\'H\000R\005const" +
+      "\210\001\001B\010\n\006_const\"\350$\n\013StringRules\022x\n\005const\030\001" +
+      " \001(\tB]\302HZ\nX\n\014string.const\032Hthis != rules" +
+      ".const ? \'value must equal `%s`\'.format(" +
+      "[rules.const]) : \'\'H\001R\005const\210\001\001\022\210\001\n\003len\030" +
+      "\023 \001(\004Bq\302Hn\nl\n\nstring.len\032^uint(this.size" +
+      "()) != rules.len ? \'value length must be" +
+      " %s characters\'.format([rules.len]) : \'\'" +
+      "H\002R\003len\210\001\001\022\246\001\n\007min_len\030\002 \001(\004B\207\001\302H\203\001\n\200\001\n\016" +
+      "string.min_len\032nuint(this.size()) < rule" +
+      "s.min_len ? \'value length must be at lea" +
+      "st %s characters\'.format([rules.min_len]" +
+      ") : \'\'H\003R\006minLen\210\001\001\022\244\001\n\007max_len\030\003 \001(\004B\205\001" +
+      "\302H\201\001\n\177\n\016string.max_len\032muint(this.size()" +
+      ") > rules.max_len ? \'value length must b" +
+      "e at most %s characters\'.format([rules.m" +
+      "ax_len]) : \'\'H\004R\006maxLen\210\001\001\022\252\001\n\tlen_bytes" +
+      "\030\024 \001(\004B\207\001\302H\203\001\n\200\001\n\020string.len_bytes\032luint" +
+      "(bytes(this).size()) != rules.len_bytes " +
+      "? \'value length must be %s bytes\'.format" +
+      "([rules.len_bytes]) : \'\'H\005R\010lenBytes\210\001\001\022" +
+      "\262\001\n\tmin_bytes\030\004 \001(\004B\217\001\302H\213\001\n\210\001\n\020string.mi" +
+      "n_bytes\032tuint(bytes(this).size()) < rule" +
+      "s.min_bytes ? \'value length must be at l" +
+      "east %s bytes\'.format([rules.min_bytes])" +
+      " : \'\'H\006R\010minBytes\210\001\001\022\261\001\n\tmax_bytes\030\005 \001(\004" +
+      "B\216\001\302H\212\001\n\207\001\n\020string.max_bytes\032suint(bytes" +
+      "(this).size()) > rules.max_bytes ? \'valu" +
+      "e length must be at most %s bytes\'.forma" +
+      "t([rules.max_bytes]) : \'\'H\007R\010maxBytes\210\001\001" +
+      "\022\233\001\n\007pattern\030\006 \001(\tB|\302Hy\nw\n\016string.patter" +
+      "n\032e!this.matches(rules.pattern) ? \'value" +
+      " does not match regex pattern `%s`\'.form" +
+      "at([rules.pattern]) : \'\'H\010R\007pattern\210\001\001\022\221" +
+      "\001\n\006prefix\030\007 \001(\tBt\302Hq\no\n\rstring.prefix\032^!" +
+      "this.startsWith(rules.prefix) ? \'value d" +
+      "oes not have prefix `%s`\'.format([rules." +
+      "prefix]) : \'\'H\tR\006prefix\210\001\001\022\217\001\n\006suffix\030\010 " +
+      "\001(\tBr\302Ho\nm\n\rstring.suffix\032\\!this.endsWit" +
+      "h(rules.suffix) ? \'value does not have s" +
+      "uffix `%s`\'.format([rules.suffix]) : \'\'H" +
+      "\nR\006suffix\210\001\001\022\237\001\n\010contains\030\t \001(\tB~\302H{\ny\n\017" +
+      "string.contains\032f!this.contains(rules.co" +
+      "ntains) ? \'value does not contain substr" +
+      "ing `%s`\'.format([rules.contains]) : \'\'H" +
+      "\013R\010contains\210\001\001\022\252\001\n\014not_contains\030\027 \001(\tB\201\001" +
+      "\302H~\n|\n\023string.not_contains\032ethis.contain" +
+      "s(rules.not_contains) ? \'value contains " +
+      "substring `%s`\'.format([rules.not_contai" +
+      "ns]) : \'\'H\014R\013notContains\210\001\001\022z\n\002in\030\n \003(\tB" +
+      "j\302Hg\ne\n\tstring.in\032X!(this in dyn(rules)[" +
+      "\'in\']) ? \'value must be in list %s\'.form" +
+      "at([dyn(rules)[\'in\']]) : \'\'R\002in\022~\n\006not_i" +
+      "n\030\013 \003(\tBg\302Hd\nb\n\rstring.not_in\032Qthis in r" +
+      "ules.not_in ? \'value must not be in list" +
+      " %s\'.format([rules.not_in]) : \'\'R\005notIn\022" +
+      "`\n\005email\030\014 \001(\010BH\302HE\nC\n\014string.email\022#val" +
+      "ue must be a valid email address\032\016this.i" +
+      "sEmail()H\000R\005email\022g\n\010hostname\030\r \001(\010BI\302HF" +
+      "\nD\n\017string.hostname\022\036value must be a val" +
+      "id hostname\032\021this.isHostname()H\000R\010hostna" +
+      "me\022Q\n\002ip\030\016 \001(\010B?\302H<\n:\n\tstring.ip\022 value " +
+      "must be a valid IP address\032\013this.isIp()H" +
+      "\000R\002ip\022Z\n\004ipv4\030\017 \001(\010BD\302HA\n?\n\013string.ipv4\022" +
+      "\"value must be a valid IPv4 address\032\014thi" +
+      "s.isIp(4)H\000R\004ipv4\022Z\n\004ipv6\030\020 \001(\010BD\302HA\n?\n\013" +
+      "string.ipv6\022\"value must be a valid IPv6 " +
+      "address\032\014this.isIp(6)H\000R\004ipv6\022N\n\003uri\030\021 \001" +
+      "(\010B:\302H7\n5\n\nstring.uri\022\031value must be a v" +
+      "alid URI\032\014this.isUri()H\000R\003uri\022\\\n\007uri_ref" +
+      "\030\022 \001(\010BA\302H>\n<\n\016string.uri_ref\022\031value mus" +
+      "t be a valid URI\032\017this.isUriRef()H\000R\006uri" +
+      "Ref\022\202\001\n\007address\030\025 \001(\010Bf\302Hc\na\n\016string.add" +
+      "ress\022-value must be a valid hostname, or" +
+      " ip address\032 this.isHostname() || this.i" +
+      "sIp()H\000R\007address\022\260\001\n\004uuid\030\026 \001(\010B\231\001\302H\225\001\n\222" +
+      "\001\n\013string.uuid\032\202\001!this.matches(\'^[0-9a-f" +
+      "A-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0" +
+      "-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') ? \'value" +
+      " must be a valid UUID\' : \'\'H\000R\004uuid\022\201\001\n\021" +
+      "ip_with_prefixlen\030\032 \001(\010BS\302HP\nN\n\030string.i" +
+      "p_with_prefixlen\022\037value must be a valid " +
+      "IP prefix\032\021this.isIpPrefix()H\000R\017ipWithPr" +
+      "efixlen\022\236\001\n\023ipv4_with_prefixlen\030\033 \001(\010Bl\302" +
+      "Hi\ng\n\032string.ipv4_with_prefixlen\0225value " +
+      "must be a valid IPv4 address with prefix" +
+      " length\032\022this.isIpPrefix(4)H\000R\021ipv4WithP" +
+      "refixlen\022\236\001\n\023ipv6_with_prefixlen\030\034 \001(\010Bl" +
+      "\302Hi\ng\n\032string.ipv6_with_prefixlen\0225value" +
+      " must be a valid IPv6 address with prefi" +
+      "x length\032\022this.isIpPrefix(6)H\000R\021ipv6With" +
+      "Prefixlen\022n\n\tip_prefix\030\035 \001(\010BO\302HL\nJ\n\020str" +
+      "ing.ip_prefix\022\037value must be a valid IP " +
+      "prefix\032\025this.isIpPrefix(true)H\000R\010ipPrefi" +
+      "x\022y\n\013ipv4_prefix\030\036 \001(\010BV\302HS\nQ\n\022string.ip" +
+      "v4_prefix\022!value must be a valid IPv4 pr" +
+      "efix\032\030this.isIpPrefix(4, true)H\000R\nipv4Pr" +
+      "efix\022y\n\013ipv6_prefix\030\037 \001(\010BV\302HS\nQ\n\022string" +
+      ".ipv6_prefix\022!value must be a valid IPv6" +
+      " prefix\032\030this.isIpPrefix(6, true)H\000R\nipv" +
+      "6Prefix\022\254\004\n\020well_known_regex\030\030 \001(\0162\030.buf" +
+      ".validate.KnownRegexB\345\003\302H\341\003\n\353\001\n#string.w" +
+      "ell_known_regex.header_name\032\303\001rules.well" +
+      "_known_regex == 1 && !this.matches(!has(" +
+      "rules.strict) || rules.strict ?\'^:?[0-9a" +
+      "-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000" +
+      "\\u000A\\u000D]+$\') ? \'value must be a val" +
+      "id HTTP header name\' : \'\'\n\360\001\n$string.wel" +
+      "l_known_regex.header_value\032\307\001rules.well_" +
+      "known_regex == 2 && !this.matches(!has(r" +
+      "ules.strict) || rules.strict ?\'^[^\\u0000" +
+      "-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u00" +
+      "00\\u000A\\u000D]*$\') ? \'value must be a v" +
+      "alid HTTP header value\' : \'\'H\000R\016wellKnow" +
+      "nRegex\022\033\n\006strict\030\031 \001(\010H\rR\006strict\210\001\001B\014\n\nw" +
+      "ell_knownB\010\n\006_constB\006\n\004_lenB\n\n\010_min_lenB" +
+      "\n\n\010_max_lenB\014\n\n_len_bytesB\014\n\n_min_bytesB" +
+      "\014\n\n_max_bytesB\n\n\010_patternB\t\n\007_prefixB\t\n\007" +
+      "_suffixB\013\n\t_containsB\017\n\r_not_containsB\t\n" +
+      "\007_strict\"\332\016\n\nBytesRules\022r\n\005const\030\001 \001(\014BW" +
+      "\302HT\nR\n\013bytes.const\032Cthis != rules.const " +
+      "? \'value must be %x\'.format([rules.const" +
+      "]) : \'\'H\001R\005const\210\001\001\022\202\001\n\003len\030\r \001(\004Bk\302Hh\nf" +
+      "\n\tbytes.len\032Yuint(this.size()) != rules." +
+      "len ? \'value length must be %s bytes\'.fo" +
+      "rmat([rules.len]) : \'\'H\002R\003len\210\001\001\022\235\001\n\007min" +
+      "_len\030\002 \001(\004B\177\302H|\nz\n\rbytes.min_len\032iuint(t" +
+      "his.size()) < rules.min_len ? \'value len" +
+      "gth must be at least %s bytes\'.format([r" +
+      "ules.min_len]) : \'\'H\003R\006minLen\210\001\001\022\225\001\n\007max" +
+      "_len\030\003 \001(\004Bw\302Ht\nr\n\rbytes.max_len\032auint(t" +
+      "his.size()) > rules.max_len ? \'value mus" +
+      "t be at most %s bytes\'.format([rules.max" +
+      "_len]) : \'\'H\004R\006maxLen\210\001\001\022\236\001\n\007pattern\030\004 \001" +
+      "(\tB\177\302H|\nz\n\rbytes.pattern\032i!string(this)." +
+      "matches(rules.pattern) ? \'value must mat" +
+      "ch regex pattern `%s`\'.format([rules.pat" +
+      "tern]) : \'\'H\005R\007pattern\210\001\001\022\216\001\n\006prefix\030\005 \001" +
+      "(\014Bq\302Hn\nl\n\014bytes.prefix\032\\!this.startsWit" +
+      "h(rules.prefix) ? \'value does not have p" +
+      "refix %x\'.format([rules.prefix]) : \'\'H\006R" +
+      "\006prefix\210\001\001\022\214\001\n\006suffix\030\006 \001(\014Bo\302Hl\nj\n\014byte" +
+      "s.suffix\032Z!this.endsWith(rules.suffix) ?" +
+      " \'value does not have suffix %x\'.format(" +
+      "[rules.suffix]) : \'\'H\007R\006suffix\210\001\001\022\222\001\n\010co" +
+      "ntains\030\007 \001(\014Bq\302Hn\nl\n\016bytes.contains\032Z!th" +
+      "is.contains(rules.contains) ? \'value doe" +
+      "s not contain %x\'.format([rules.contains" +
+      "]) : \'\'H\010R\010contains\210\001\001\022\233\001\n\002in\030\010 \003(\014B\212\001\302H" +
+      "\206\001\n\203\001\n\010bytes.in\032wdyn(rules)[\'in\'].size()" +
+      " > 0 && !(this in dyn(rules)[\'in\']) ? \'v" +
+      "alue must be in list %s\'.format([dyn(rul" +
+      "es)[\'in\']]) : \'\'R\002in\022}\n\006not_in\030\t \003(\014Bf\302H" +
+      "c\na\n\014bytes.not_in\032Qthis in rules.not_in " +
+      "? \'value must not be in list %s\'.format(" +
+      "[rules.not_in]) : \'\'R\005notIn\022r\n\002ip\030\n \001(\010B" +
+      "`\302H]\n[\n\010bytes.ip\032Othis.size() != 4 && th" +
+      "is.size() != 16 ? \'value must be a valid" +
+      " IP address\' : \'\'H\000R\002ip\022e\n\004ipv4\030\013 \001(\010BO\302" +
+      "HL\nJ\n\nbytes.ipv4\032<this.size() != 4 ? \'va" +
+      "lue must be a valid IPv4 address\' : \'\'H\000" +
+      "R\004ipv4\022f\n\004ipv6\030\014 \001(\010BP\302HM\nK\n\nbytes.ipv6\032" +
+      "=this.size() != 16 ? \'value must be a va" +
+      "lid IPv6 address\' : \'\'H\000R\004ipv6B\014\n\nwell_k" +
+      "nownB\010\n\006_constB\006\n\004_lenB\n\n\010_min_lenB\n\n\010_m" +
+      "ax_lenB\n\n\010_patternB\t\n\007_prefixB\t\n\007_suffix" +
+      "B\013\n\t_contains\"\274\003\n\tEnumRules\022t\n\005const\030\001 \001" +
+      "(\005BY\302HV\nT\n\nenum.const\032Fthis != rules.con" +
+      "st ? \'value must equal %s\'.format([rules" +
+      ".const]) : \'\'H\000R\005const\210\001\001\022&\n\014defined_onl" +
+      "y\030\002 \001(\010H\001R\013definedOnly\210\001\001\022x\n\002in\030\003 \003(\005Bh\302" +
+      "He\nc\n\007enum.in\032X!(this in dyn(rules)[\'in\'" +
+      "]) ? \'value must be in list %s\'.format([" +
+      "dyn(rules)[\'in\']]) : \'\'R\002in\022|\n\006not_in\030\004 " +
+      "\003(\005Be\302Hb\n`\n\013enum.not_in\032Qthis in rules.n" +
+      "ot_in ? \'value must not be in list %s\'.f" +
+      "ormat([rules.not_in]) : \'\'R\005notInB\010\n\006_co" +
+      "nstB\017\n\r_defined_only\"\315\004\n\rRepeatedRules\022\255" +
+      "\001\n\tmin_items\030\001 \001(\004B\212\001\302H\206\001\n\203\001\n\022repeated.m" +
+      "in_items\032muint(this.size()) < rules.min_" +
+      "items ? \'value must contain at least %d " +
+      "item(s)\'.format([rules.min_items]) : \'\'H" +
+      "\000R\010minItems\210\001\001\022\261\001\n\tmax_items\030\002 \001(\004B\216\001\302H\212" +
+      "\001\n\207\001\n\022repeated.max_items\032quint(this.size" +
+      "()) > rules.max_items ? \'value must cont" +
+      "ain no more than %s item(s)\'.format([rul" +
+      "es.max_items]) : \'\'H\001R\010maxItems\210\001\001\022l\n\006un" +
+      "ique\030\003 \001(\010BO\302HL\nJ\n\017repeated.unique\022(repe" +
+      "ated value must contain unique items\032\rth" +
+      "is.unique()H\002R\006unique\210\001\001\0229\n\005items\030\004 \001(\0132" +
+      "\036.buf.validate.FieldConstraintsH\003R\005items" +
+      "\210\001\001B\014\n\n_min_itemsB\014\n\n_max_itemsB\t\n\007_uniq" +
+      "ueB\010\n\006_items\"\361\003\n\010MapRules\022\236\001\n\tmin_pairs\030" +
+      "\001 \001(\004B|\302Hy\nw\n\rmap.min_pairs\032fuint(this.s" +
+      "ize()) < rules.min_pairs ? \'map must be " +
+      "at least %d entries\'.format([rules.min_p" +
+      "airs]) : \'\'H\000R\010minPairs\210\001\001\022\235\001\n\tmax_pairs" +
+      "\030\002 \001(\004B{\302Hx\nv\n\rmap.max_pairs\032euint(this." +
+      "size()) > rules.max_pairs ? \'map must be" +
+      " at most %d entries\'.format([rules.max_p" +
+      "airs]) : \'\'H\001R\010maxPairs\210\001\001\0227\n\004keys\030\004 \001(\013" +
+      "2\036.buf.validate.FieldConstraintsH\002R\004keys" +
+      "\210\001\001\022;\n\006values\030\005 \001(\0132\036.buf.validate.Field" +
+      "ConstraintsH\003R\006values\210\001\001B\014\n\n_min_pairsB\014" +
+      "\n\n_max_pairsB\007\n\005_keysB\t\n\007_values\"1\n\010AnyR" +
+      "ules\022\016\n\002in\030\002 \003(\tR\002in\022\025\n\006not_in\030\003 \003(\tR\005no" +
+      "tIn\"\322\026\n\rDurationRules\022\223\001\n\005const\030\002 \001(\0132\031." +
+      "google.protobuf.DurationB]\302HZ\nX\n\016duratio" +
+      "n.const\032Fthis != rules.const ? \'value mu" +
+      "st equal %s\'.format([rules.const]) : \'\'H" +
+      "\002R\005const\210\001\001\022\254\001\n\002lt\030\003 \001(\0132\031.google.protob" +
+      "uf.DurationB\177\302H|\nz\n\013duration.lt\032k!has(ru" +
+      "les.gte) && !has(rules.gt) && this >= ru" +
+      "les.lt? \'value must be less than %s\'.for" +
+      "mat([rules.lt]) : \'\'H\000R\002lt\022\277\001\n\003lte\030\004 \001(\013" +
+      "2\031.google.protobuf.DurationB\217\001\302H\213\001\n\210\001\n\014d" +
+      "uration.lte\032x!has(rules.gte) && !has(rul" +
+      "es.gt) && this > rules.lte? \'value must " +
+      "be less than or equal to %s\'.format([rul" +
+      "es.lte]) : \'\'H\000R\003lte\022\305\007\n\002gt\030\005 \001(\0132\031.goog" +
+      "le.protobuf.DurationB\227\007\302H\223\007\n}\n\013duration." +
+      "gt\032n!has(rules.lt) && !has(rules.lte) &&" +
+      " this <= rules.gt? \'value must be greate" +
+      "r than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016d" +
+      "uration.gt_lt\032\243\001has(rules.lt) && rules.l" +
+      "t >= rules.gt && (this >= rules.lt || th" +
+      "is <= rules.gt)? \'value must be greater " +
+      "than %s and less than %s\'.format([rules." +
+      "gt, rules.lt]) : \'\'\n\276\001\n\030duration.gt_lt_e" +
+      "xclusive\032\241\001has(rules.lt) && rules.lt < r" +
+      "ules.gt && (rules.lt <= this && this <= " +
+      "rules.gt)? \'value must be greater than %" +
+      "s or less than %s\'.format([rules.gt, rul" +
+      "es.lt]) : \'\'\n\306\001\n\017duration.gt_lte\032\262\001has(r" +
+      "ules.lte) && rules.lte >= rules.gt && (t" +
+      "his > rules.lte || this <= rules.gt)? \'v" +
+      "alue must be greater than %s and less th" +
+      "an or equal to %s\'.format([rules.gt, rul" +
+      "es.lte]) : \'\'\n\316\001\n\031duration.gt_lte_exclus" +
+      "ive\032\260\001has(rules.lte) && rules.lte < rule" +
+      "s.gt && (rules.lte < this && this <= rul" +
+      "es.gt)? \'value must be greater than %s o" +
+      "r less than or equal to %s\'.format([rule" +
+      "s.gt, rules.lte]) : \'\'H\001R\002gt\022\222\010\n\003gte\030\006 \001" +
+      "(\0132\031.google.protobuf.DurationB\342\007\302H\336\007\n\213\001\n" +
+      "\014duration.gte\032{!has(rules.lt) && !has(ru" +
+      "les.lte) && this < rules.gte? \'value mus" +
+      "t be greater than or equal to %s\'.format" +
+      "([rules.gte]) : \'\'\n\305\001\n\017duration.gte_lt\032\261" +
+      "\001has(rules.lt) && rules.lt >= rules.gte " +
+      "&& (this >= rules.lt || this < rules.gte" +
+      ")? \'value must be greater than or equal " +
+      "to %s and less than %s\'.format([rules.gt" +
+      "e, rules.lt]) : \'\'\n\315\001\n\031duration.gte_lt_e" +
+      "xclusive\032\257\001has(rules.lt) && rules.lt < r" +
+      "ules.gte && (rules.lt <= this && this < " +
+      "rules.gte)? \'value must be greater than " +
+      "or equal to %s or less than %s\'.format([" +
+      "rules.gte, rules.lt]) : \'\'\n\325\001\n\020duration." +
+      "gte_lte\032\300\001has(rules.lte) && rules.lte >=" +
+      " rules.gte && (this > rules.lte || this " +
+      "< rules.gte)? \'value must be greater tha" +
+      "n or equal to %s and less than or equal " +
+      "to %s\'.format([rules.gte, rules.lte]) : " +
+      "\'\'\n\335\001\n\032duration.gte_lte_exclusive\032\276\001has(" +
+      "rules.lte) && rules.lte < rules.gte && (" +
+      "rules.lte < this && this < rules.gte)? \'" +
+      "value must be greater than or equal to %" +
+      "s or less than or equal to %s\'.format([r" +
+      "ules.gte, rules.lte]) : \'\'H\001R\003gte\022\227\001\n\002in" +
+      "\030\007 \003(\0132\031.google.protobuf.DurationBl\302Hi\ng" +
+      "\n\013duration.in\032X!(this in dyn(rules)[\'in\'" +
+      "]) ? \'value must be in list %s\'.format([" +
+      "dyn(rules)[\'in\']]) : \'\'R\002in\022\233\001\n\006not_in\030\010" +
+      " \003(\0132\031.google.protobuf.DurationBi\302Hf\nd\n\017" +
+      "duration.not_in\032Qthis in rules.not_in ? " +
+      "\'value must not be in list %s\'.format([r" +
+      "ules.not_in]) : \'\'R\005notInB\013\n\tless_thanB\016" +
+      "\n\014greater_thanB\010\n\006_const\"\312\027\n\016TimestampRu" +
+      "les\022\225\001\n\005const\030\002 \001(\0132\032.google.protobuf.Ti" +
+      "mestampB^\302H[\nY\n\017timestamp.const\032Fthis !=" +
+      " rules.const ? \'value must equal %s\'.for" +
+      "mat([rules.const]) : \'\'H\002R\005const\210\001\001\022\257\001\n\002" +
+      "lt\030\003 \001(\0132\032.google.protobuf.TimestampB\200\001\302" +
+      "H}\n{\n\014timestamp.lt\032k!has(rules.gte) && !" +
+      "has(rules.gt) && this >= rules.lt? \'valu" +
+      "e must be less than %s\'.format([rules.lt" +
+      "]) : \'\'H\000R\002lt\022\301\001\n\003lte\030\004 \001(\0132\032.google.pro" +
+      "tobuf.TimestampB\220\001\302H\214\001\n\211\001\n\rtimestamp.lte" +
+      "\032x!has(rules.gte) && !has(rules.gt) && t" +
+      "his > rules.lte? \'value must be less tha" +
+      "n or equal to %s\'.format([rules.lte]) : " +
+      "\'\'H\000R\003lte\022a\n\006lt_now\030\007 \001(\010BH\302HE\nC\n\020timest" +
+      "amp.lt_now\032/this > now ? \'value must be " +
+      "less than now\' : \'\'H\000R\005ltNow\022\313\007\n\002gt\030\005 \001(" +
+      "\0132\032.google.protobuf.TimestampB\234\007\302H\230\007\n~\n\014" +
+      "timestamp.gt\032n!has(rules.lt) && !has(rul" +
+      "es.lte) && this <= rules.gt? \'value must" +
+      " be greater than %s\'.format([rules.gt]) " +
+      ": \'\'\n\267\001\n\017timestamp.gt_lt\032\243\001has(rules.lt)" +
+      " && rules.lt >= rules.gt && (this >= rul" +
+      "es.lt || this <= rules.gt)? \'value must " +
+      "be greater than %s and less than %s\'.for" +
+      "mat([rules.gt, rules.lt]) : \'\'\n\277\001\n\031times" +
+      "tamp.gt_lt_exclusive\032\241\001has(rules.lt) && " +
+      "rules.lt < rules.gt && (rules.lt <= this" +
+      " && this <= rules.gt)? \'value must be gr" +
+      "eater than %s or less than %s\'.format([r" +
+      "ules.gt, rules.lt]) : \'\'\n\307\001\n\020timestamp.g" +
+      "t_lte\032\262\001has(rules.lte) && rules.lte >= r" +
+      "ules.gt && (this > rules.lte || this <= " +
+      "rules.gt)? \'value must be greater than %" +
+      "s and less than or equal to %s\'.format([" +
+      "rules.gt, rules.lte]) : \'\'\n\317\001\n\032timestamp" +
+      ".gt_lte_exclusive\032\260\001has(rules.lte) && ru" +
+      "les.lte < rules.gt && (rules.lte < this " +
+      "&& this <= rules.gt)? \'value must be gre" +
+      "ater than %s or less than or equal to %s" +
+      "\'.format([rules.gt, rules.lte]) : \'\'H\001R\002" +
+      "gt\022\230\010\n\003gte\030\006 \001(\0132\032.google.protobuf.Times" +
+      "tampB\347\007\302H\343\007\n\214\001\n\rtimestamp.gte\032{!has(rule" +
+      "s.lt) && !has(rules.lte) && this < rules" +
+      ".gte? \'value must be greater than or equ" +
+      "al to %s\'.format([rules.gte]) : \'\'\n\306\001\n\020t" +
+      "imestamp.gte_lt\032\261\001has(rules.lt) && rules" +
+      ".lt >= rules.gte && (this >= rules.lt ||" +
+      " this < rules.gte)? \'value must be great" +
+      "er than or equal to %s and less than %s\'" +
+      ".format([rules.gte, rules.lt]) : \'\'\n\316\001\n\032" +
+      "timestamp.gte_lt_exclusive\032\257\001has(rules.l" +
+      "t) && rules.lt < rules.gte && (rules.lt " +
+      "<= this && this < rules.gte)? \'value mus" +
+      "t be greater than or equal to %s or less" +
+      " than %s\'.format([rules.gte, rules.lt]) " +
+      ": \'\'\n\326\001\n\021timestamp.gte_lte\032\300\001has(rules.l" +
+      "te) && rules.lte >= rules.gte && (this >",
+      " rules.lte || this < rules.gte)? \'value " +
+      "must be greater than or equal to %s and " +
+      "less than or equal to %s\'.format([rules." +
+      "gte, rules.lte]) : \'\'\n\336\001\n\033timestamp.gte_" +
+      "lte_exclusive\032\276\001has(rules.lte) && rules." +
+      "lte < rules.gte && (rules.lte < this && " +
+      "this < rules.gte)? \'value must be greate" +
+      "r than or equal to %s or less than or eq" +
+      "ual to %s\'.format([rules.gte, rules.lte]" +
+      ") : \'\'H\001R\003gte\022d\n\006gt_now\030\010 \001(\010BK\302HH\nF\n\020ti" +
+      "mestamp.gt_now\0322this < now ? \'value must" +
+      " be greater than now\' : \'\'H\001R\005gtNow\022\305\001\n\006" +
+      "within\030\t \001(\0132\031.google.protobuf.DurationB" +
+      "\214\001\302H\210\001\n\205\001\n\020timestamp.within\032qthis < now-" +
+      "rules.within || this > now+rules.within " +
+      "? \'value must be within %s of now\'.forma" +
+      "t([rules.within]) : \'\'H\003R\006within\210\001\001B\013\n\tl" +
+      "ess_thanB\016\n\014greater_thanB\010\n\006_constB\t\n\007_w" +
+      "ithin*n\n\nKnownRegex\022\033\n\027KNOWN_REGEX_UNSPE" +
+      "CIFIED\020\000\022 \n\034KNOWN_REGEX_HTTP_HEADER_NAME" +
+      "\020\001\022!\n\035KNOWN_REGEX_HTTP_HEADER_VALUE\020\002:_\n" +
+      "\007message\022\037.google.protobuf.MessageOption" +
+      "s\030\207\t \001(\0132 .buf.validate.MessageConstrain" +
+      "tsR\007message\210\001\001:W\n\005oneof\022\035.google.protobu" +
+      "f.OneofOptions\030\207\t \001(\0132\036.buf.validate.One" +
+      "ofConstraintsR\005oneof\210\001\001:W\n\005field\022\035.googl" +
+      "e.protobuf.FieldOptions\030\207\t \001(\0132\036.buf.val" +
+      "idate.FieldConstraintsR\005field\210\001\001B\300\001\n\025de." +
+      "danet.buf.validateB\rValidateProtoP\001ZGbuf" +
+      ".build/gen/go/bufbuild/protovalidate/pro" +
+      "tocolbuffers/go/buf/validate\242\002\003BVX\252\002\014Buf" +
+      ".Validate\312\002\014Buf\\Validate\342\002\030Buf\\Validate\\" +
+      "GPBMetadata\352\002\rBuf::Validateb\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          de.danet.buf.validate.ExpressionProto.getDescriptor(),
+          de.danet.buf.validate.priv.PrivateProto.getDescriptor(),
+          com.google.protobuf.DescriptorProtos.getDescriptor(),
+          com.google.protobuf.DurationProto.getDescriptor(),
+          com.google.protobuf.TimestampProto.getDescriptor(),
+        });
+    internal_static_buf_validate_MessageConstraints_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_buf_validate_MessageConstraints_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_MessageConstraints_descriptor,
+        new java.lang.String[] { "Disabled", "Cel", });
+    internal_static_buf_validate_OneofConstraints_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_buf_validate_OneofConstraints_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_OneofConstraints_descriptor,
+        new java.lang.String[] { "Required", });
+    internal_static_buf_validate_FieldConstraints_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_buf_validate_FieldConstraints_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_FieldConstraints_descriptor,
+        new java.lang.String[] { "Cel", "Skipped", "Required", "IgnoreEmpty", "Float", "Double", "Int32", "Int64", "Uint32", "Uint64", "Sint32", "Sint64", "Fixed32", "Fixed64", "Sfixed32", "Sfixed64", "Bool", "String", "Bytes", "Enum", "Repeated", "Map", "Any", "Duration", "Timestamp", "Type", });
+    internal_static_buf_validate_FloatRules_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_buf_validate_FloatRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_FloatRules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "Finite", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_DoubleRules_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    internal_static_buf_validate_DoubleRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_DoubleRules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "Finite", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_Int32Rules_descriptor =
+      getDescriptor().getMessageTypes().get(5);
+    internal_static_buf_validate_Int32Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_Int32Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_Int64Rules_descriptor =
+      getDescriptor().getMessageTypes().get(6);
+    internal_static_buf_validate_Int64Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_Int64Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_UInt32Rules_descriptor =
+      getDescriptor().getMessageTypes().get(7);
+    internal_static_buf_validate_UInt32Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_UInt32Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_UInt64Rules_descriptor =
+      getDescriptor().getMessageTypes().get(8);
+    internal_static_buf_validate_UInt64Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_UInt64Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_SInt32Rules_descriptor =
+      getDescriptor().getMessageTypes().get(9);
+    internal_static_buf_validate_SInt32Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_SInt32Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_SInt64Rules_descriptor =
+      getDescriptor().getMessageTypes().get(10);
+    internal_static_buf_validate_SInt64Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_SInt64Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_Fixed32Rules_descriptor =
+      getDescriptor().getMessageTypes().get(11);
+    internal_static_buf_validate_Fixed32Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_Fixed32Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_Fixed64Rules_descriptor =
+      getDescriptor().getMessageTypes().get(12);
+    internal_static_buf_validate_Fixed64Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_Fixed64Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_SFixed32Rules_descriptor =
+      getDescriptor().getMessageTypes().get(13);
+    internal_static_buf_validate_SFixed32Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_SFixed32Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_SFixed64Rules_descriptor =
+      getDescriptor().getMessageTypes().get(14);
+    internal_static_buf_validate_SFixed64Rules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_SFixed64Rules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_BoolRules_descriptor =
+      getDescriptor().getMessageTypes().get(15);
+    internal_static_buf_validate_BoolRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_BoolRules_descriptor,
+        new java.lang.String[] { "Const", });
+    internal_static_buf_validate_StringRules_descriptor =
+      getDescriptor().getMessageTypes().get(16);
+    internal_static_buf_validate_StringRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_StringRules_descriptor,
+        new java.lang.String[] { "Const", "Len", "MinLen", "MaxLen", "LenBytes", "MinBytes", "MaxBytes", "Pattern", "Prefix", "Suffix", "Contains", "NotContains", "In", "NotIn", "Email", "Hostname", "Ip", "Ipv4", "Ipv6", "Uri", "UriRef", "Address", "Uuid", "IpWithPrefixlen", "Ipv4WithPrefixlen", "Ipv6WithPrefixlen", "IpPrefix", "Ipv4Prefix", "Ipv6Prefix", "WellKnownRegex", "Strict", "WellKnown", });
+    internal_static_buf_validate_BytesRules_descriptor =
+      getDescriptor().getMessageTypes().get(17);
+    internal_static_buf_validate_BytesRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_BytesRules_descriptor,
+        new java.lang.String[] { "Const", "Len", "MinLen", "MaxLen", "Pattern", "Prefix", "Suffix", "Contains", "In", "NotIn", "Ip", "Ipv4", "Ipv6", "WellKnown", });
+    internal_static_buf_validate_EnumRules_descriptor =
+      getDescriptor().getMessageTypes().get(18);
+    internal_static_buf_validate_EnumRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_EnumRules_descriptor,
+        new java.lang.String[] { "Const", "DefinedOnly", "In", "NotIn", });
+    internal_static_buf_validate_RepeatedRules_descriptor =
+      getDescriptor().getMessageTypes().get(19);
+    internal_static_buf_validate_RepeatedRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_RepeatedRules_descriptor,
+        new java.lang.String[] { "MinItems", "MaxItems", "Unique", "Items", });
+    internal_static_buf_validate_MapRules_descriptor =
+      getDescriptor().getMessageTypes().get(20);
+    internal_static_buf_validate_MapRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_MapRules_descriptor,
+        new java.lang.String[] { "MinPairs", "MaxPairs", "Keys", "Values", });
+    internal_static_buf_validate_AnyRules_descriptor =
+      getDescriptor().getMessageTypes().get(21);
+    internal_static_buf_validate_AnyRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_AnyRules_descriptor,
+        new java.lang.String[] { "In", "NotIn", });
+    internal_static_buf_validate_DurationRules_descriptor =
+      getDescriptor().getMessageTypes().get(22);
+    internal_static_buf_validate_DurationRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_DurationRules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "Gt", "Gte", "In", "NotIn", "LessThan", "GreaterThan", });
+    internal_static_buf_validate_TimestampRules_descriptor =
+      getDescriptor().getMessageTypes().get(23);
+    internal_static_buf_validate_TimestampRules_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_TimestampRules_descriptor,
+        new java.lang.String[] { "Const", "Lt", "Lte", "LtNow", "Gt", "Gte", "GtNow", "Within", "LessThan", "GreaterThan", });
+    message.internalInit(descriptor.getExtensions().get(0));
+    oneof.internalInit(descriptor.getExtensions().get(1));
+    field.internalInit(descriptor.getExtensions().get(2));
+    com.google.protobuf.ExtensionRegistry registry =
+        com.google.protobuf.ExtensionRegistry.newInstance();
+    registry.add(de.danet.buf.validate.priv.PrivateProto.field);
+    com.google.protobuf.Descriptors.FileDescriptor
+        .internalUpdateFileDescriptor(descriptor, registry);
+    de.danet.buf.validate.ExpressionProto.getDescriptor();
+    de.danet.buf.validate.priv.PrivateProto.getDescriptor();
+    com.google.protobuf.DescriptorProtos.getDescriptor();
+    com.google.protobuf.DurationProto.getDescriptor();
+    com.google.protobuf.TimestampProto.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/gen/java/de/danet/buf/validate/Violation.java b/gen/java/de/danet/buf/validate/Violation.java
new file mode 100644
index 0000000000000000000000000000000000000000..38092861d933d7569bc81b403f87d6a97ab1a0c6
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Violation.java
@@ -0,0 +1,1032 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/expression.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * `Violation` represents a single instance where a validation rule, expressed
+ * as a `Constraint`, was not met. It provides information about the field that
+ * caused the violation, the specific constraint that wasn't fulfilled, and a
+ * human-readable error message.
+ *
+ * ```json
+ * {
+ *   "fieldPath": "bar",
+ *   "constraintId": "foo.bar",
+ *   "message": "bar must be greater than 0"
+ * }
+ * ```
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.Violation}
+ */
+public final class Violation extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.Violation)
+    ViolationOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use Violation.newBuilder() to construct.
+  private Violation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private Violation() {
+    fieldPath_ = "";
+    constraintId_ = "";
+    message_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new Violation();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violation_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violation_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.Violation.class, de.danet.buf.validate.Violation.Builder.class);
+  }
+
+  public static final int FIELD_PATH_FIELD_NUMBER = 1;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object fieldPath_ = "";
+  /**
+   * <pre>
+   * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+   * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+   * </pre>
+   *
+   * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+   * @return The fieldPath.
+   */
+  @java.lang.Override
+  public java.lang.String getFieldPath() {
+    java.lang.Object ref = fieldPath_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      fieldPath_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+   * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+   * </pre>
+   *
+   * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+   * @return The bytes for fieldPath.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getFieldPathBytes() {
+    java.lang.Object ref = fieldPath_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      fieldPath_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int CONSTRAINT_ID_FIELD_NUMBER = 2;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object constraintId_ = "";
+  /**
+   * <pre>
+   * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+   * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+   * </pre>
+   *
+   * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+   * @return The constraintId.
+   */
+  @java.lang.Override
+  public java.lang.String getConstraintId() {
+    java.lang.Object ref = constraintId_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      constraintId_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+   * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+   * </pre>
+   *
+   * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+   * @return The bytes for constraintId.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getConstraintIdBytes() {
+    java.lang.Object ref = constraintId_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      constraintId_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MESSAGE_FIELD_NUMBER = 3;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object message_ = "";
+  /**
+   * <pre>
+   * `message` is a human-readable error message that describes the nature of the violation.
+   * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+   * </pre>
+   *
+   * <code>string message = 3 [json_name = "message"];</code>
+   * @return The message.
+   */
+  @java.lang.Override
+  public java.lang.String getMessage() {
+    java.lang.Object ref = message_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      message_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * `message` is a human-readable error message that describes the nature of the violation.
+   * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+   * </pre>
+   *
+   * <code>string message = 3 [json_name = "message"];</code>
+   * @return The bytes for message.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMessageBytes() {
+    java.lang.Object ref = message_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      message_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int FOR_KEY_FIELD_NUMBER = 4;
+  private boolean forKey_ = false;
+  /**
+   * <pre>
+   * `for_key` indicates whether the violation was caused by a map key, rather than a value.
+   * </pre>
+   *
+   * <code>bool for_key = 4 [json_name = "forKey"];</code>
+   * @return The forKey.
+   */
+  @java.lang.Override
+  public boolean getForKey() {
+    return forKey_;
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fieldPath_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, fieldPath_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(constraintId_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintId_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_);
+    }
+    if (forKey_ != false) {
+      output.writeBool(4, forKey_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(fieldPath_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, fieldPath_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(constraintId_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintId_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_);
+    }
+    if (forKey_ != false) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeBoolSize(4, forKey_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.Violation)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.Violation other = (de.danet.buf.validate.Violation) obj;
+
+    if (!getFieldPath()
+        .equals(other.getFieldPath())) return false;
+    if (!getConstraintId()
+        .equals(other.getConstraintId())) return false;
+    if (!getMessage()
+        .equals(other.getMessage())) return false;
+    if (getForKey()
+        != other.getForKey()) return false;
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + FIELD_PATH_FIELD_NUMBER;
+    hash = (53 * hash) + getFieldPath().hashCode();
+    hash = (37 * hash) + CONSTRAINT_ID_FIELD_NUMBER;
+    hash = (53 * hash) + getConstraintId().hashCode();
+    hash = (37 * hash) + MESSAGE_FIELD_NUMBER;
+    hash = (53 * hash) + getMessage().hashCode();
+    hash = (37 * hash) + FOR_KEY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+        getForKey());
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.Violation parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.Violation parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.Violation parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Violation parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.Violation prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * `Violation` represents a single instance where a validation rule, expressed
+   * as a `Constraint`, was not met. It provides information about the field that
+   * caused the violation, the specific constraint that wasn't fulfilled, and a
+   * human-readable error message.
+   *
+   * ```json
+   * {
+   *   "fieldPath": "bar",
+   *   "constraintId": "foo.bar",
+   *   "message": "bar must be greater than 0"
+   * }
+   * ```
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.Violation}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.Violation)
+      de.danet.buf.validate.ViolationOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violation_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violation_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.Violation.class, de.danet.buf.validate.Violation.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.Violation.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      fieldPath_ = "";
+      constraintId_ = "";
+      message_ = "";
+      forKey_ = false;
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violation_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Violation getDefaultInstanceForType() {
+      return de.danet.buf.validate.Violation.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Violation build() {
+      de.danet.buf.validate.Violation result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Violation buildPartial() {
+      de.danet.buf.validate.Violation result = new de.danet.buf.validate.Violation(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.Violation result) {
+      int from_bitField0_ = bitField0_;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.fieldPath_ = fieldPath_;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.constraintId_ = constraintId_;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        result.message_ = message_;
+      }
+      if (((from_bitField0_ & 0x00000008) != 0)) {
+        result.forKey_ = forKey_;
+      }
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.Violation) {
+        return mergeFrom((de.danet.buf.validate.Violation)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.Violation other) {
+      if (other == de.danet.buf.validate.Violation.getDefaultInstance()) return this;
+      if (!other.getFieldPath().isEmpty()) {
+        fieldPath_ = other.fieldPath_;
+        bitField0_ |= 0x00000001;
+        onChanged();
+      }
+      if (!other.getConstraintId().isEmpty()) {
+        constraintId_ = other.constraintId_;
+        bitField0_ |= 0x00000002;
+        onChanged();
+      }
+      if (!other.getMessage().isEmpty()) {
+        message_ = other.message_;
+        bitField0_ |= 0x00000004;
+        onChanged();
+      }
+      if (other.getForKey() != false) {
+        setForKey(other.getForKey());
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              fieldPath_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 10
+            case 18: {
+              constraintId_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 18
+            case 26: {
+              message_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000004;
+              break;
+            } // case 26
+            case 32: {
+              forKey_ = input.readBool();
+              bitField0_ |= 0x00000008;
+              break;
+            } // case 32
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private java.lang.Object fieldPath_ = "";
+    /**
+     * <pre>
+     * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+     * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+     * </pre>
+     *
+     * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+     * @return The fieldPath.
+     */
+    public java.lang.String getFieldPath() {
+      java.lang.Object ref = fieldPath_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        fieldPath_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+     * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+     * </pre>
+     *
+     * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+     * @return The bytes for fieldPath.
+     */
+    public com.google.protobuf.ByteString
+        getFieldPathBytes() {
+      java.lang.Object ref = fieldPath_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        fieldPath_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+     * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+     * </pre>
+     *
+     * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+     * @param value The fieldPath to set.
+     * @return This builder for chaining.
+     */
+    public Builder setFieldPath(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      fieldPath_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+     * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+     * </pre>
+     *
+     * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearFieldPath() {
+      fieldPath_ = getDefaultInstance().getFieldPath();
+      bitField0_ = (bitField0_ & ~0x00000001);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+     * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+     * </pre>
+     *
+     * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+     * @param value The bytes for fieldPath to set.
+     * @return This builder for chaining.
+     */
+    public Builder setFieldPathBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      fieldPath_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object constraintId_ = "";
+    /**
+     * <pre>
+     * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+     * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+     * </pre>
+     *
+     * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+     * @return The constraintId.
+     */
+    public java.lang.String getConstraintId() {
+      java.lang.Object ref = constraintId_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintId_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+     * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+     * </pre>
+     *
+     * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+     * @return The bytes for constraintId.
+     */
+    public com.google.protobuf.ByteString
+        getConstraintIdBytes() {
+      java.lang.Object ref = constraintId_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+     * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+     * </pre>
+     *
+     * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+     * @param value The constraintId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConstraintId(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      constraintId_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+     * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+     * </pre>
+     *
+     * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearConstraintId() {
+      constraintId_ = getDefaultInstance().getConstraintId();
+      bitField0_ = (bitField0_ & ~0x00000002);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+     * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+     * </pre>
+     *
+     * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+     * @param value The bytes for constraintId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setConstraintIdBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      constraintId_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object message_ = "";
+    /**
+     * <pre>
+     * `message` is a human-readable error message that describes the nature of the violation.
+     * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+     * </pre>
+     *
+     * <code>string message = 3 [json_name = "message"];</code>
+     * @return The message.
+     */
+    public java.lang.String getMessage() {
+      java.lang.Object ref = message_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        message_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `message` is a human-readable error message that describes the nature of the violation.
+     * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+     * </pre>
+     *
+     * <code>string message = 3 [json_name = "message"];</code>
+     * @return The bytes for message.
+     */
+    public com.google.protobuf.ByteString
+        getMessageBytes() {
+      java.lang.Object ref = message_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        message_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * `message` is a human-readable error message that describes the nature of the violation.
+     * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+     * </pre>
+     *
+     * <code>string message = 3 [json_name = "message"];</code>
+     * @param value The message to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMessage(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      message_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `message` is a human-readable error message that describes the nature of the violation.
+     * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+     * </pre>
+     *
+     * <code>string message = 3 [json_name = "message"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMessage() {
+      message_ = getDefaultInstance().getMessage();
+      bitField0_ = (bitField0_ & ~0x00000004);
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `message` is a human-readable error message that describes the nature of the violation.
+     * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+     * </pre>
+     *
+     * <code>string message = 3 [json_name = "message"];</code>
+     * @param value The bytes for message to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMessageBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      message_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+
+    private boolean forKey_ ;
+    /**
+     * <pre>
+     * `for_key` indicates whether the violation was caused by a map key, rather than a value.
+     * </pre>
+     *
+     * <code>bool for_key = 4 [json_name = "forKey"];</code>
+     * @return The forKey.
+     */
+    @java.lang.Override
+    public boolean getForKey() {
+      return forKey_;
+    }
+    /**
+     * <pre>
+     * `for_key` indicates whether the violation was caused by a map key, rather than a value.
+     * </pre>
+     *
+     * <code>bool for_key = 4 [json_name = "forKey"];</code>
+     * @param value The forKey to set.
+     * @return This builder for chaining.
+     */
+    public Builder setForKey(boolean value) {
+
+      forKey_ = value;
+      bitField0_ |= 0x00000008;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * `for_key` indicates whether the violation was caused by a map key, rather than a value.
+     * </pre>
+     *
+     * <code>bool for_key = 4 [json_name = "forKey"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearForKey() {
+      bitField0_ = (bitField0_ & ~0x00000008);
+      forKey_ = false;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.Violation)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.Violation)
+  private static final de.danet.buf.validate.Violation DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.Violation();
+  }
+
+  public static de.danet.buf.validate.Violation getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Violation>
+      PARSER = new com.google.protobuf.AbstractParser<Violation>() {
+    @java.lang.Override
+    public Violation parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<Violation> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Violation> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.Violation getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/ViolationOrBuilder.java b/gen/java/de/danet/buf/validate/ViolationOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..17b21b08d435f41dcfc73e8ed1ba1b3c0140c301
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/ViolationOrBuilder.java
@@ -0,0 +1,86 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/expression.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface ViolationOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.Violation)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+   * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+   * </pre>
+   *
+   * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+   * @return The fieldPath.
+   */
+  java.lang.String getFieldPath();
+  /**
+   * <pre>
+   * `field_path` is a machine-readable identifier that points to the specific field that failed the validation.
+   * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
+   * </pre>
+   *
+   * <code>string field_path = 1 [json_name = "fieldPath"];</code>
+   * @return The bytes for fieldPath.
+   */
+  com.google.protobuf.ByteString
+      getFieldPathBytes();
+
+  /**
+   * <pre>
+   * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+   * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+   * </pre>
+   *
+   * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+   * @return The constraintId.
+   */
+  java.lang.String getConstraintId();
+  /**
+   * <pre>
+   * `constraint_id` is the unique identifier of the `Constraint` that was not fulfilled.
+   * This is the same `id` that was specified in the `Constraint` message, allowing easy tracing of which rule was violated.
+   * </pre>
+   *
+   * <code>string constraint_id = 2 [json_name = "constraintId"];</code>
+   * @return The bytes for constraintId.
+   */
+  com.google.protobuf.ByteString
+      getConstraintIdBytes();
+
+  /**
+   * <pre>
+   * `message` is a human-readable error message that describes the nature of the violation.
+   * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+   * </pre>
+   *
+   * <code>string message = 3 [json_name = "message"];</code>
+   * @return The message.
+   */
+  java.lang.String getMessage();
+  /**
+   * <pre>
+   * `message` is a human-readable error message that describes the nature of the violation.
+   * This can be the default error message from the violated `Constraint`, or it can be a custom message that gives more context about the violation.
+   * </pre>
+   *
+   * <code>string message = 3 [json_name = "message"];</code>
+   * @return The bytes for message.
+   */
+  com.google.protobuf.ByteString
+      getMessageBytes();
+
+  /**
+   * <pre>
+   * `for_key` indicates whether the violation was caused by a map key, rather than a value.
+   * </pre>
+   *
+   * <code>bool for_key = 4 [json_name = "forKey"];</code>
+   * @return The forKey.
+   */
+  boolean getForKey();
+}
diff --git a/gen/java/de/danet/buf/validate/Violations.java b/gen/java/de/danet/buf/validate/Violations.java
new file mode 100644
index 0000000000000000000000000000000000000000..344c0060efdd5aaff315e9a8956b9fa5b811b974
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/Violations.java
@@ -0,0 +1,864 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/expression.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+/**
+ * <pre>
+ * `Violations` is a collection of `Violation` messages. This message type is returned by
+ * protovalidate when a proto message fails to meet the requirements set by the `Constraint` validation rules.
+ * Each individual violation is represented by a `Violation` message.
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.Violations}
+ */
+public final class Violations extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.Violations)
+    ViolationsOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use Violations.newBuilder() to construct.
+  private Violations(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private Violations() {
+    violations_ = java.util.Collections.emptyList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new Violations();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violations_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violations_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.Violations.class, de.danet.buf.validate.Violations.Builder.class);
+  }
+
+  public static final int VIOLATIONS_FIELD_NUMBER = 1;
+  @SuppressWarnings("serial")
+  private java.util.List<de.danet.buf.validate.Violation> violations_;
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  @java.lang.Override
+  public java.util.List<de.danet.buf.validate.Violation> getViolationsList() {
+    return violations_;
+  }
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  @java.lang.Override
+  public java.util.List<? extends de.danet.buf.validate.ViolationOrBuilder> 
+      getViolationsOrBuilderList() {
+    return violations_;
+  }
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  @java.lang.Override
+  public int getViolationsCount() {
+    return violations_.size();
+  }
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.Violation getViolations(int index) {
+    return violations_.get(index);
+  }
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.ViolationOrBuilder getViolationsOrBuilder(
+      int index) {
+    return violations_.get(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    for (int i = 0; i < violations_.size(); i++) {
+      output.writeMessage(1, violations_.get(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    for (int i = 0; i < violations_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(1, violations_.get(i));
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.Violations)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.Violations other = (de.danet.buf.validate.Violations) obj;
+
+    if (!getViolationsList()
+        .equals(other.getViolationsList())) return false;
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (getViolationsCount() > 0) {
+      hash = (37 * hash) + VIOLATIONS_FIELD_NUMBER;
+      hash = (53 * hash) + getViolationsList().hashCode();
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.Violations parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.Violations parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.Violations parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.Violations parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.Violations prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * `Violations` is a collection of `Violation` messages. This message type is returned by
+   * protovalidate when a proto message fails to meet the requirements set by the `Constraint` validation rules.
+   * Each individual violation is represented by a `Violation` message.
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.Violations}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.Violations)
+      de.danet.buf.validate.ViolationsOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violations_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violations_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.Violations.class, de.danet.buf.validate.Violations.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.Violations.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      if (violationsBuilder_ == null) {
+        violations_ = java.util.Collections.emptyList();
+      } else {
+        violations_ = null;
+        violationsBuilder_.clear();
+      }
+      bitField0_ = (bitField0_ & ~0x00000001);
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.ExpressionProto.internal_static_buf_validate_Violations_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Violations getDefaultInstanceForType() {
+      return de.danet.buf.validate.Violations.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Violations build() {
+      de.danet.buf.validate.Violations result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.Violations buildPartial() {
+      de.danet.buf.validate.Violations result = new de.danet.buf.validate.Violations(this);
+      buildPartialRepeatedFields(result);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartialRepeatedFields(de.danet.buf.validate.Violations result) {
+      if (violationsBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0)) {
+          violations_ = java.util.Collections.unmodifiableList(violations_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.violations_ = violations_;
+      } else {
+        result.violations_ = violationsBuilder_.build();
+      }
+    }
+
+    private void buildPartial0(de.danet.buf.validate.Violations result) {
+      int from_bitField0_ = bitField0_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.Violations) {
+        return mergeFrom((de.danet.buf.validate.Violations)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.Violations other) {
+      if (other == de.danet.buf.validate.Violations.getDefaultInstance()) return this;
+      if (violationsBuilder_ == null) {
+        if (!other.violations_.isEmpty()) {
+          if (violations_.isEmpty()) {
+            violations_ = other.violations_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureViolationsIsMutable();
+            violations_.addAll(other.violations_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.violations_.isEmpty()) {
+          if (violationsBuilder_.isEmpty()) {
+            violationsBuilder_.dispose();
+            violationsBuilder_ = null;
+            violations_ = other.violations_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+            violationsBuilder_ = 
+              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                 getViolationsFieldBuilder() : null;
+          } else {
+            violationsBuilder_.addAllMessages(other.violations_);
+          }
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              de.danet.buf.validate.Violation m =
+                  input.readMessage(
+                      de.danet.buf.validate.Violation.parser(),
+                      extensionRegistry);
+              if (violationsBuilder_ == null) {
+                ensureViolationsIsMutable();
+                violations_.add(m);
+              } else {
+                violationsBuilder_.addMessage(m);
+              }
+              break;
+            } // case 10
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private java.util.List<de.danet.buf.validate.Violation> violations_ =
+      java.util.Collections.emptyList();
+    private void ensureViolationsIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        violations_ = new java.util.ArrayList<de.danet.buf.validate.Violation>(violations_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        de.danet.buf.validate.Violation, de.danet.buf.validate.Violation.Builder, de.danet.buf.validate.ViolationOrBuilder> violationsBuilder_;
+
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public java.util.List<de.danet.buf.validate.Violation> getViolationsList() {
+      if (violationsBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(violations_);
+      } else {
+        return violationsBuilder_.getMessageList();
+      }
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public int getViolationsCount() {
+      if (violationsBuilder_ == null) {
+        return violations_.size();
+      } else {
+        return violationsBuilder_.getCount();
+      }
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public de.danet.buf.validate.Violation getViolations(int index) {
+      if (violationsBuilder_ == null) {
+        return violations_.get(index);
+      } else {
+        return violationsBuilder_.getMessage(index);
+      }
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder setViolations(
+        int index, de.danet.buf.validate.Violation value) {
+      if (violationsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureViolationsIsMutable();
+        violations_.set(index, value);
+        onChanged();
+      } else {
+        violationsBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder setViolations(
+        int index, de.danet.buf.validate.Violation.Builder builderForValue) {
+      if (violationsBuilder_ == null) {
+        ensureViolationsIsMutable();
+        violations_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        violationsBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder addViolations(de.danet.buf.validate.Violation value) {
+      if (violationsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureViolationsIsMutable();
+        violations_.add(value);
+        onChanged();
+      } else {
+        violationsBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder addViolations(
+        int index, de.danet.buf.validate.Violation value) {
+      if (violationsBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureViolationsIsMutable();
+        violations_.add(index, value);
+        onChanged();
+      } else {
+        violationsBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder addViolations(
+        de.danet.buf.validate.Violation.Builder builderForValue) {
+      if (violationsBuilder_ == null) {
+        ensureViolationsIsMutable();
+        violations_.add(builderForValue.build());
+        onChanged();
+      } else {
+        violationsBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder addViolations(
+        int index, de.danet.buf.validate.Violation.Builder builderForValue) {
+      if (violationsBuilder_ == null) {
+        ensureViolationsIsMutable();
+        violations_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        violationsBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder addAllViolations(
+        java.lang.Iterable<? extends de.danet.buf.validate.Violation> values) {
+      if (violationsBuilder_ == null) {
+        ensureViolationsIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, violations_);
+        onChanged();
+      } else {
+        violationsBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder clearViolations() {
+      if (violationsBuilder_ == null) {
+        violations_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+      } else {
+        violationsBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public Builder removeViolations(int index) {
+      if (violationsBuilder_ == null) {
+        ensureViolationsIsMutable();
+        violations_.remove(index);
+        onChanged();
+      } else {
+        violationsBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public de.danet.buf.validate.Violation.Builder getViolationsBuilder(
+        int index) {
+      return getViolationsFieldBuilder().getBuilder(index);
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public de.danet.buf.validate.ViolationOrBuilder getViolationsOrBuilder(
+        int index) {
+      if (violationsBuilder_ == null) {
+        return violations_.get(index);  } else {
+        return violationsBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public java.util.List<? extends de.danet.buf.validate.ViolationOrBuilder> 
+         getViolationsOrBuilderList() {
+      if (violationsBuilder_ != null) {
+        return violationsBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(violations_);
+      }
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public de.danet.buf.validate.Violation.Builder addViolationsBuilder() {
+      return getViolationsFieldBuilder().addBuilder(
+          de.danet.buf.validate.Violation.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public de.danet.buf.validate.Violation.Builder addViolationsBuilder(
+        int index) {
+      return getViolationsFieldBuilder().addBuilder(
+          index, de.danet.buf.validate.Violation.getDefaultInstance());
+    }
+    /**
+     * <pre>
+     * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+     * </pre>
+     *
+     * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+     */
+    public java.util.List<de.danet.buf.validate.Violation.Builder> 
+         getViolationsBuilderList() {
+      return getViolationsFieldBuilder().getBuilderList();
+    }
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        de.danet.buf.validate.Violation, de.danet.buf.validate.Violation.Builder, de.danet.buf.validate.ViolationOrBuilder> 
+        getViolationsFieldBuilder() {
+      if (violationsBuilder_ == null) {
+        violationsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+            de.danet.buf.validate.Violation, de.danet.buf.validate.Violation.Builder, de.danet.buf.validate.ViolationOrBuilder>(
+                violations_,
+                ((bitField0_ & 0x00000001) != 0),
+                getParentForChildren(),
+                isClean());
+        violations_ = null;
+      }
+      return violationsBuilder_;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.Violations)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.Violations)
+  private static final de.danet.buf.validate.Violations DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.Violations();
+  }
+
+  public static de.danet.buf.validate.Violations getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Violations>
+      PARSER = new com.google.protobuf.AbstractParser<Violations>() {
+    @java.lang.Override
+    public Violations parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<Violations> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Violations> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.Violations getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/ViolationsOrBuilder.java b/gen/java/de/danet/buf/validate/ViolationsOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..eba243c9f01af505155fa7cef89e4504fa2a309c
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/ViolationsOrBuilder.java
@@ -0,0 +1,54 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/expression.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate;
+
+public interface ViolationsOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.Violations)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  java.util.List<de.danet.buf.validate.Violation> 
+      getViolationsList();
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  de.danet.buf.validate.Violation getViolations(int index);
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  int getViolationsCount();
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  java.util.List<? extends de.danet.buf.validate.ViolationOrBuilder> 
+      getViolationsOrBuilderList();
+  /**
+   * <pre>
+   * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
+   * </pre>
+   *
+   * <code>repeated .buf.validate.Violation violations = 1 [json_name = "violations"];</code>
+   */
+  de.danet.buf.validate.ViolationOrBuilder getViolationsOrBuilder(
+      int index);
+}
diff --git a/gen/java/de/danet/buf/validate/priv/Constraint.java b/gen/java/de/danet/buf/validate/priv/Constraint.java
new file mode 100644
index 0000000000000000000000000000000000000000..23d6716c0c37f2fda4dac760ae5e1ba3d38c30f8
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/priv/Constraint.java
@@ -0,0 +1,822 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/priv/private.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate.priv;
+
+/**
+ * <pre>
+ * Do not use. Internal to protovalidate library
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.priv.Constraint}
+ */
+public final class Constraint extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.priv.Constraint)
+    ConstraintOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use Constraint.newBuilder() to construct.
+  private Constraint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private Constraint() {
+    id_ = "";
+    message_ = "";
+    expression_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new Constraint();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_Constraint_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_Constraint_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.priv.Constraint.class, de.danet.buf.validate.priv.Constraint.Builder.class);
+  }
+
+  public static final int ID_FIELD_NUMBER = 1;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object id_ = "";
+  /**
+   * <code>string id = 1 [json_name = "id"];</code>
+   * @return The id.
+   */
+  @java.lang.Override
+  public java.lang.String getId() {
+    java.lang.Object ref = id_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      id_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string id = 1 [json_name = "id"];</code>
+   * @return The bytes for id.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getIdBytes() {
+    java.lang.Object ref = id_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      id_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MESSAGE_FIELD_NUMBER = 2;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object message_ = "";
+  /**
+   * <code>string message = 2 [json_name = "message"];</code>
+   * @return The message.
+   */
+  @java.lang.Override
+  public java.lang.String getMessage() {
+    java.lang.Object ref = message_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      message_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string message = 2 [json_name = "message"];</code>
+   * @return The bytes for message.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMessageBytes() {
+    java.lang.Object ref = message_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      message_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int EXPRESSION_FIELD_NUMBER = 3;
+  @SuppressWarnings("serial")
+  private volatile java.lang.Object expression_ = "";
+  /**
+   * <code>string expression = 3 [json_name = "expression"];</code>
+   * @return The expression.
+   */
+  @java.lang.Override
+  public java.lang.String getExpression() {
+    java.lang.Object ref = expression_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      expression_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string expression = 3 [json_name = "expression"];</code>
+   * @return The bytes for expression.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getExpressionBytes() {
+    java.lang.Object ref = expression_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      expression_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(expression_)) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, expression_);
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_);
+    }
+    if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(expression_)) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, expression_);
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.priv.Constraint)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.priv.Constraint other = (de.danet.buf.validate.priv.Constraint) obj;
+
+    if (!getId()
+        .equals(other.getId())) return false;
+    if (!getMessage()
+        .equals(other.getMessage())) return false;
+    if (!getExpression()
+        .equals(other.getExpression())) return false;
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + ID_FIELD_NUMBER;
+    hash = (53 * hash) + getId().hashCode();
+    hash = (37 * hash) + MESSAGE_FIELD_NUMBER;
+    hash = (53 * hash) + getMessage().hashCode();
+    hash = (37 * hash) + EXPRESSION_FIELD_NUMBER;
+    hash = (53 * hash) + getExpression().hashCode();
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.priv.Constraint parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.priv.Constraint parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.priv.Constraint parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.priv.Constraint parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.priv.Constraint prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * Do not use. Internal to protovalidate library
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.priv.Constraint}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.priv.Constraint)
+      de.danet.buf.validate.priv.ConstraintOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_Constraint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_Constraint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.priv.Constraint.class, de.danet.buf.validate.priv.Constraint.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.priv.Constraint.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      id_ = "";
+      message_ = "";
+      expression_ = "";
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_Constraint_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.priv.Constraint getDefaultInstanceForType() {
+      return de.danet.buf.validate.priv.Constraint.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.priv.Constraint build() {
+      de.danet.buf.validate.priv.Constraint result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.priv.Constraint buildPartial() {
+      de.danet.buf.validate.priv.Constraint result = new de.danet.buf.validate.priv.Constraint(this);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartial0(de.danet.buf.validate.priv.Constraint result) {
+      int from_bitField0_ = bitField0_;
+      if (((from_bitField0_ & 0x00000001) != 0)) {
+        result.id_ = id_;
+      }
+      if (((from_bitField0_ & 0x00000002) != 0)) {
+        result.message_ = message_;
+      }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        result.expression_ = expression_;
+      }
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.priv.Constraint) {
+        return mergeFrom((de.danet.buf.validate.priv.Constraint)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.priv.Constraint other) {
+      if (other == de.danet.buf.validate.priv.Constraint.getDefaultInstance()) return this;
+      if (!other.getId().isEmpty()) {
+        id_ = other.id_;
+        bitField0_ |= 0x00000001;
+        onChanged();
+      }
+      if (!other.getMessage().isEmpty()) {
+        message_ = other.message_;
+        bitField0_ |= 0x00000002;
+        onChanged();
+      }
+      if (!other.getExpression().isEmpty()) {
+        expression_ = other.expression_;
+        bitField0_ |= 0x00000004;
+        onChanged();
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              id_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000001;
+              break;
+            } // case 10
+            case 18: {
+              message_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000002;
+              break;
+            } // case 18
+            case 26: {
+              expression_ = input.readStringRequireUtf8();
+              bitField0_ |= 0x00000004;
+              break;
+            } // case 26
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private java.lang.Object id_ = "";
+    /**
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @return The id.
+     */
+    public java.lang.String getId() {
+      java.lang.Object ref = id_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        id_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @return The bytes for id.
+     */
+    public com.google.protobuf.ByteString
+        getIdBytes() {
+      java.lang.Object ref = id_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        id_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @param value The id to set.
+     * @return This builder for chaining.
+     */
+    public Builder setId(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      id_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearId() {
+      id_ = getDefaultInstance().getId();
+      bitField0_ = (bitField0_ & ~0x00000001);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string id = 1 [json_name = "id"];</code>
+     * @param value The bytes for id to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIdBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      id_ = value;
+      bitField0_ |= 0x00000001;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object message_ = "";
+    /**
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @return The message.
+     */
+    public java.lang.String getMessage() {
+      java.lang.Object ref = message_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        message_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @return The bytes for message.
+     */
+    public com.google.protobuf.ByteString
+        getMessageBytes() {
+      java.lang.Object ref = message_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        message_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @param value The message to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMessage(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      message_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMessage() {
+      message_ = getDefaultInstance().getMessage();
+      bitField0_ = (bitField0_ & ~0x00000002);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string message = 2 [json_name = "message"];</code>
+     * @param value The bytes for message to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMessageBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      message_ = value;
+      bitField0_ |= 0x00000002;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object expression_ = "";
+    /**
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @return The expression.
+     */
+    public java.lang.String getExpression() {
+      java.lang.Object ref = expression_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        expression_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @return The bytes for expression.
+     */
+    public com.google.protobuf.ByteString
+        getExpressionBytes() {
+      java.lang.Object ref = expression_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        expression_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @param value The expression to set.
+     * @return This builder for chaining.
+     */
+    public Builder setExpression(
+        java.lang.String value) {
+      if (value == null) { throw new NullPointerException(); }
+      expression_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearExpression() {
+      expression_ = getDefaultInstance().getExpression();
+      bitField0_ = (bitField0_ & ~0x00000004);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string expression = 3 [json_name = "expression"];</code>
+     * @param value The bytes for expression to set.
+     * @return This builder for chaining.
+     */
+    public Builder setExpressionBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) { throw new NullPointerException(); }
+      checkByteStringIsUtf8(value);
+      expression_ = value;
+      bitField0_ |= 0x00000004;
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.priv.Constraint)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.priv.Constraint)
+  private static final de.danet.buf.validate.priv.Constraint DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.priv.Constraint();
+  }
+
+  public static de.danet.buf.validate.priv.Constraint getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<Constraint>
+      PARSER = new com.google.protobuf.AbstractParser<Constraint>() {
+    @java.lang.Override
+    public Constraint parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<Constraint> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<Constraint> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.priv.Constraint getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/priv/ConstraintOrBuilder.java b/gen/java/de/danet/buf/validate/priv/ConstraintOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..27dba311fe1f3b80bce21725206f174f7a16ec5c
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/priv/ConstraintOrBuilder.java
@@ -0,0 +1,46 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/priv/private.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate.priv;
+
+public interface ConstraintOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.priv.Constraint)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>string id = 1 [json_name = "id"];</code>
+   * @return The id.
+   */
+  java.lang.String getId();
+  /**
+   * <code>string id = 1 [json_name = "id"];</code>
+   * @return The bytes for id.
+   */
+  com.google.protobuf.ByteString
+      getIdBytes();
+
+  /**
+   * <code>string message = 2 [json_name = "message"];</code>
+   * @return The message.
+   */
+  java.lang.String getMessage();
+  /**
+   * <code>string message = 2 [json_name = "message"];</code>
+   * @return The bytes for message.
+   */
+  com.google.protobuf.ByteString
+      getMessageBytes();
+
+  /**
+   * <code>string expression = 3 [json_name = "expression"];</code>
+   * @return The expression.
+   */
+  java.lang.String getExpression();
+  /**
+   * <code>string expression = 3 [json_name = "expression"];</code>
+   * @return The bytes for expression.
+   */
+  com.google.protobuf.ByteString
+      getExpressionBytes();
+}
diff --git a/gen/java/de/danet/buf/validate/priv/FieldConstraints.java b/gen/java/de/danet/buf/validate/priv/FieldConstraints.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e41765bfeff05a592a401ae31c924c912e8a83a
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/priv/FieldConstraints.java
@@ -0,0 +1,768 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/priv/private.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate.priv;
+
+/**
+ * <pre>
+ * Do not use. Internal to protovalidate library
+ * </pre>
+ *
+ * Protobuf type {@code buf.validate.priv.FieldConstraints}
+ */
+public final class FieldConstraints extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:buf.validate.priv.FieldConstraints)
+    FieldConstraintsOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use FieldConstraints.newBuilder() to construct.
+  private FieldConstraints(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private FieldConstraints() {
+    cel_ = java.util.Collections.emptyList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new FieldConstraints();
+  }
+
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_FieldConstraints_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_FieldConstraints_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            de.danet.buf.validate.priv.FieldConstraints.class, de.danet.buf.validate.priv.FieldConstraints.Builder.class);
+  }
+
+  public static final int CEL_FIELD_NUMBER = 1;
+  @SuppressWarnings("serial")
+  private java.util.List<de.danet.buf.validate.priv.Constraint> cel_;
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public java.util.List<de.danet.buf.validate.priv.Constraint> getCelList() {
+    return cel_;
+  }
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public java.util.List<? extends de.danet.buf.validate.priv.ConstraintOrBuilder> 
+      getCelOrBuilderList() {
+    return cel_;
+  }
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public int getCelCount() {
+    return cel_.size();
+  }
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.priv.Constraint getCel(int index) {
+    return cel_.get(index);
+  }
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  @java.lang.Override
+  public de.danet.buf.validate.priv.ConstraintOrBuilder getCelOrBuilder(
+      int index) {
+    return cel_.get(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    for (int i = 0; i < cel_.size(); i++) {
+      output.writeMessage(1, cel_.get(i));
+    }
+    getUnknownFields().writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    for (int i = 0; i < cel_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(1, cel_.get(i));
+    }
+    size += getUnknownFields().getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof de.danet.buf.validate.priv.FieldConstraints)) {
+      return super.equals(obj);
+    }
+    de.danet.buf.validate.priv.FieldConstraints other = (de.danet.buf.validate.priv.FieldConstraints) obj;
+
+    if (!getCelList()
+        .equals(other.getCelList())) return false;
+    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    if (getCelCount() > 0) {
+      hash = (37 * hash) + CEL_FIELD_NUMBER;
+      hash = (53 * hash) + getCelList().hashCode();
+    }
+    hash = (29 * hash) + getUnknownFields().hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  public static de.danet.buf.validate.priv.FieldConstraints parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+
+  public static de.danet.buf.validate.priv.FieldConstraints parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static de.danet.buf.validate.priv.FieldConstraints parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(de.danet.buf.validate.priv.FieldConstraints prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * <pre>
+   * Do not use. Internal to protovalidate library
+   * </pre>
+   *
+   * Protobuf type {@code buf.validate.priv.FieldConstraints}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:buf.validate.priv.FieldConstraints)
+      de.danet.buf.validate.priv.FieldConstraintsOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_FieldConstraints_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_FieldConstraints_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              de.danet.buf.validate.priv.FieldConstraints.class, de.danet.buf.validate.priv.FieldConstraints.Builder.class);
+    }
+
+    // Construct using de.danet.buf.validate.priv.FieldConstraints.newBuilder()
+    private Builder() {
+
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      bitField0_ = 0;
+      if (celBuilder_ == null) {
+        cel_ = java.util.Collections.emptyList();
+      } else {
+        cel_ = null;
+        celBuilder_.clear();
+      }
+      bitField0_ = (bitField0_ & ~0x00000001);
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return de.danet.buf.validate.priv.PrivateProto.internal_static_buf_validate_priv_FieldConstraints_descriptor;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.priv.FieldConstraints getDefaultInstanceForType() {
+      return de.danet.buf.validate.priv.FieldConstraints.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.priv.FieldConstraints build() {
+      de.danet.buf.validate.priv.FieldConstraints result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public de.danet.buf.validate.priv.FieldConstraints buildPartial() {
+      de.danet.buf.validate.priv.FieldConstraints result = new de.danet.buf.validate.priv.FieldConstraints(this);
+      buildPartialRepeatedFields(result);
+      if (bitField0_ != 0) { buildPartial0(result); }
+      onBuilt();
+      return result;
+    }
+
+    private void buildPartialRepeatedFields(de.danet.buf.validate.priv.FieldConstraints result) {
+      if (celBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0)) {
+          cel_ = java.util.Collections.unmodifiableList(cel_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.cel_ = cel_;
+      } else {
+        result.cel_ = celBuilder_.build();
+      }
+    }
+
+    private void buildPartial0(de.danet.buf.validate.priv.FieldConstraints result) {
+      int from_bitField0_ = bitField0_;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof de.danet.buf.validate.priv.FieldConstraints) {
+        return mergeFrom((de.danet.buf.validate.priv.FieldConstraints)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(de.danet.buf.validate.priv.FieldConstraints other) {
+      if (other == de.danet.buf.validate.priv.FieldConstraints.getDefaultInstance()) return this;
+      if (celBuilder_ == null) {
+        if (!other.cel_.isEmpty()) {
+          if (cel_.isEmpty()) {
+            cel_ = other.cel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureCelIsMutable();
+            cel_.addAll(other.cel_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.cel_.isEmpty()) {
+          if (celBuilder_.isEmpty()) {
+            celBuilder_.dispose();
+            celBuilder_ = null;
+            cel_ = other.cel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+            celBuilder_ = 
+              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                 getCelFieldBuilder() : null;
+          } else {
+            celBuilder_.addAllMessages(other.cel_);
+          }
+        }
+      }
+      this.mergeUnknownFields(other.getUnknownFields());
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              de.danet.buf.validate.priv.Constraint m =
+                  input.readMessage(
+                      de.danet.buf.validate.priv.Constraint.parser(),
+                      extensionRegistry);
+              if (celBuilder_ == null) {
+                ensureCelIsMutable();
+                cel_.add(m);
+              } else {
+                celBuilder_.addMessage(m);
+              }
+              break;
+            } // case 10
+            default: {
+              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                done = true; // was an endgroup tag
+              }
+              break;
+            } // default:
+          } // switch (tag)
+        } // while (!done)
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.unwrapIOException();
+      } finally {
+        onChanged();
+      } // finally
+      return this;
+    }
+    private int bitField0_;
+
+    private java.util.List<de.danet.buf.validate.priv.Constraint> cel_ =
+      java.util.Collections.emptyList();
+    private void ensureCelIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        cel_ = new java.util.ArrayList<de.danet.buf.validate.priv.Constraint>(cel_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        de.danet.buf.validate.priv.Constraint, de.danet.buf.validate.priv.Constraint.Builder, de.danet.buf.validate.priv.ConstraintOrBuilder> celBuilder_;
+
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public java.util.List<de.danet.buf.validate.priv.Constraint> getCelList() {
+      if (celBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(cel_);
+      } else {
+        return celBuilder_.getMessageList();
+      }
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public int getCelCount() {
+      if (celBuilder_ == null) {
+        return cel_.size();
+      } else {
+        return celBuilder_.getCount();
+      }
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.priv.Constraint getCel(int index) {
+      if (celBuilder_ == null) {
+        return cel_.get(index);
+      } else {
+        return celBuilder_.getMessage(index);
+      }
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder setCel(
+        int index, de.danet.buf.validate.priv.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.set(index, value);
+        onChanged();
+      } else {
+        celBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder setCel(
+        int index, de.danet.buf.validate.priv.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder addCel(de.danet.buf.validate.priv.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.add(value);
+        onChanged();
+      } else {
+        celBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        int index, de.danet.buf.validate.priv.Constraint value) {
+      if (celBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureCelIsMutable();
+        cel_.add(index, value);
+        onChanged();
+      } else {
+        celBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        de.danet.buf.validate.priv.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.add(builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder addCel(
+        int index, de.danet.buf.validate.priv.Constraint.Builder builderForValue) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        celBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder addAllCel(
+        java.lang.Iterable<? extends de.danet.buf.validate.priv.Constraint> values) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, cel_);
+        onChanged();
+      } else {
+        celBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder clearCel() {
+      if (celBuilder_ == null) {
+        cel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+      } else {
+        celBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public Builder removeCel(int index) {
+      if (celBuilder_ == null) {
+        ensureCelIsMutable();
+        cel_.remove(index);
+        onChanged();
+      } else {
+        celBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.priv.Constraint.Builder getCelBuilder(
+        int index) {
+      return getCelFieldBuilder().getBuilder(index);
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.priv.ConstraintOrBuilder getCelOrBuilder(
+        int index) {
+      if (celBuilder_ == null) {
+        return cel_.get(index);  } else {
+        return celBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public java.util.List<? extends de.danet.buf.validate.priv.ConstraintOrBuilder> 
+         getCelOrBuilderList() {
+      if (celBuilder_ != null) {
+        return celBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(cel_);
+      }
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.priv.Constraint.Builder addCelBuilder() {
+      return getCelFieldBuilder().addBuilder(
+          de.danet.buf.validate.priv.Constraint.getDefaultInstance());
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public de.danet.buf.validate.priv.Constraint.Builder addCelBuilder(
+        int index) {
+      return getCelFieldBuilder().addBuilder(
+          index, de.danet.buf.validate.priv.Constraint.getDefaultInstance());
+    }
+    /**
+     * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+     */
+    public java.util.List<de.danet.buf.validate.priv.Constraint.Builder> 
+         getCelBuilderList() {
+      return getCelFieldBuilder().getBuilderList();
+    }
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        de.danet.buf.validate.priv.Constraint, de.danet.buf.validate.priv.Constraint.Builder, de.danet.buf.validate.priv.ConstraintOrBuilder> 
+        getCelFieldBuilder() {
+      if (celBuilder_ == null) {
+        celBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+            de.danet.buf.validate.priv.Constraint, de.danet.buf.validate.priv.Constraint.Builder, de.danet.buf.validate.priv.ConstraintOrBuilder>(
+                cel_,
+                ((bitField0_ & 0x00000001) != 0),
+                getParentForChildren(),
+                isClean());
+        cel_ = null;
+      }
+      return celBuilder_;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:buf.validate.priv.FieldConstraints)
+  }
+
+  // @@protoc_insertion_point(class_scope:buf.validate.priv.FieldConstraints)
+  private static final de.danet.buf.validate.priv.FieldConstraints DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new de.danet.buf.validate.priv.FieldConstraints();
+  }
+
+  public static de.danet.buf.validate.priv.FieldConstraints getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<FieldConstraints>
+      PARSER = new com.google.protobuf.AbstractParser<FieldConstraints>() {
+    @java.lang.Override
+    public FieldConstraints parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      Builder builder = newBuilder();
+      try {
+        builder.mergeFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(builder.buildPartial());
+      } catch (com.google.protobuf.UninitializedMessageException e) {
+        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(e)
+            .setUnfinishedMessage(builder.buildPartial());
+      }
+      return builder.buildPartial();
+    }
+  };
+
+  public static com.google.protobuf.Parser<FieldConstraints> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<FieldConstraints> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public de.danet.buf.validate.priv.FieldConstraints getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+
diff --git a/gen/java/de/danet/buf/validate/priv/FieldConstraintsOrBuilder.java b/gen/java/de/danet/buf/validate/priv/FieldConstraintsOrBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..47c9c6e42fa27099659941fccff4dbed0cb06afe
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/priv/FieldConstraintsOrBuilder.java
@@ -0,0 +1,34 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/priv/private.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate.priv;
+
+public interface FieldConstraintsOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:buf.validate.priv.FieldConstraints)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  java.util.List<de.danet.buf.validate.priv.Constraint> 
+      getCelList();
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  de.danet.buf.validate.priv.Constraint getCel(int index);
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  int getCelCount();
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  java.util.List<? extends de.danet.buf.validate.priv.ConstraintOrBuilder> 
+      getCelOrBuilderList();
+  /**
+   * <code>repeated .buf.validate.priv.Constraint cel = 1 [json_name = "cel"];</code>
+   */
+  de.danet.buf.validate.priv.ConstraintOrBuilder getCelOrBuilder(
+      int index);
+}
diff --git a/gen/java/de/danet/buf/validate/priv/PrivateProto.java b/gen/java/de/danet/buf/validate/priv/PrivateProto.java
new file mode 100644
index 0000000000000000000000000000000000000000..b00121afd1a752b0a2d1f78081f16add51d6a2d2
--- /dev/null
+++ b/gen/java/de/danet/buf/validate/priv/PrivateProto.java
@@ -0,0 +1,91 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: buf/validate/priv/private.proto
+
+// Protobuf Java Version: 3.25.0
+package de.danet.buf.validate.priv;
+
+public final class PrivateProto {
+  private PrivateProto() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+    registry.add(de.danet.buf.validate.priv.PrivateProto.field);
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  public static final int FIELD_FIELD_NUMBER = 1160;
+  /**
+   * <pre>
+   * Do not use. Internal to protovalidate library
+   * </pre>
+   *
+   * <code>extend .google.protobuf.FieldOptions { ... }</code>
+   */
+  public static final
+    com.google.protobuf.GeneratedMessage.GeneratedExtension<
+      com.google.protobuf.DescriptorProtos.FieldOptions,
+      de.danet.buf.validate.priv.FieldConstraints> field = com.google.protobuf.GeneratedMessage
+          .newFileScopedGeneratedExtension(
+        de.danet.buf.validate.priv.FieldConstraints.class,
+        de.danet.buf.validate.priv.FieldConstraints.getDefaultInstance());
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_priv_FieldConstraints_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_priv_FieldConstraints_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_buf_validate_priv_Constraint_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_buf_validate_priv_Constraint_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\037buf/validate/priv/private.proto\022\021buf.v" +
+      "alidate.priv\032 google/protobuf/descriptor" +
+      ".proto\"C\n\020FieldConstraints\022/\n\003cel\030\001 \003(\0132" +
+      "\035.buf.validate.priv.ConstraintR\003cel\"V\n\nC" +
+      "onstraint\022\016\n\002id\030\001 \001(\tR\002id\022\030\n\007message\030\002 \001" +
+      "(\tR\007message\022\036\n\nexpression\030\003 \001(\tR\nexpress" +
+      "ion:\\\n\005field\022\035.google.protobuf.FieldOpti" +
+      "ons\030\210\t \001(\0132#.buf.validate.priv.FieldCons" +
+      "traintsR\005field\210\001\001B\336\001\n\032de.danet.buf.valid" +
+      "ate.privB\014PrivateProtoP\001ZLbuf.build/gen/" +
+      "go/bufbuild/protovalidate/protocolbuffer" +
+      "s/go/buf/validate/priv\242\002\003BVP\252\002\021Buf.Valid" +
+      "ate.Priv\312\002\021Buf\\Validate\\Priv\342\002\035Buf\\Valid" +
+      "ate\\Priv\\GPBMetadata\352\002\023Buf::Validate::Pr" +
+      "ivb\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          com.google.protobuf.DescriptorProtos.getDescriptor(),
+        });
+    internal_static_buf_validate_priv_FieldConstraints_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_buf_validate_priv_FieldConstraints_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_priv_FieldConstraints_descriptor,
+        new java.lang.String[] { "Cel", });
+    internal_static_buf_validate_priv_Constraint_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_buf_validate_priv_Constraint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_buf_validate_priv_Constraint_descriptor,
+        new java.lang.String[] { "Id", "Message", "Expression", });
+    field.internalInit(descriptor.getExtensions().get(0));
+    com.google.protobuf.DescriptorProtos.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/gen/python/buf/validate/expression_pb2.py b/gen/python/buf/validate/expression_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..628a9342ae5484a6e83778f658b9faf5c7148c5a
--- /dev/null
+++ b/gen/python/buf/validate/expression_pb2.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: buf/validate/expression.proto
+# Protobuf Python Version: 4.25.0
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import builder as _builder
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x62uf/validate/expression.proto\x12\x0c\x62uf.validate\"V\n\nConstraint\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression\"E\n\nViolations\x12\x37\n\nviolations\x18\x01 \x03(\x0b\x32\x17.buf.validate.ViolationR\nviolations\"\x82\x01\n\tViolation\x12\x1d\n\nfield_path\x18\x01 \x01(\tR\tfieldPath\x12#\n\rconstraint_id\x18\x02 \x01(\tR\x0c\x63onstraintId\x12\x18\n\x07message\x18\x03 \x01(\tR\x07message\x12\x17\n\x07\x66or_key\x18\x04 \x01(\x08R\x06\x66orKeyB\xc2\x01\n\x15\x64\x65.danet.buf.validateB\x0f\x45xpressionProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate\xa2\x02\x03\x42VX\xaa\x02\x0c\x42uf.Validate\xca\x02\x0c\x42uf\\Validate\xe2\x02\x18\x42uf\\Validate\\GPBMetadata\xea\x02\rBuf::Validateb\x06proto3')
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.expression_pb2', _globals)
+if _descriptor._USE_C_DESCRIPTORS == False:
+  _globals['DESCRIPTOR']._options = None
+  _globals['DESCRIPTOR']._serialized_options = b'\n\025de.danet.buf.validateB\017ExpressionProtoP\001ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate\242\002\003BVX\252\002\014Buf.Validate\312\002\014Buf\\Validate\342\002\030Buf\\Validate\\GPBMetadata\352\002\rBuf::Validate'
+  _globals['_CONSTRAINT']._serialized_start=47
+  _globals['_CONSTRAINT']._serialized_end=133
+  _globals['_VIOLATIONS']._serialized_start=135
+  _globals['_VIOLATIONS']._serialized_end=204
+  _globals['_VIOLATION']._serialized_start=207
+  _globals['_VIOLATION']._serialized_end=337
+# @@protoc_insertion_point(module_scope)
diff --git a/gen/python/buf/validate/expression_pb2.pyi b/gen/python/buf/validate/expression_pb2.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..747c650e35afec6ac35cdf54ad7b01c74e546d76
--- /dev/null
+++ b/gen/python/buf/validate/expression_pb2.pyi
@@ -0,0 +1,34 @@
+from google.protobuf.internal import containers as _containers
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class Constraint(_message.Message):
+    __slots__ = ("id", "message", "expression")
+    ID_FIELD_NUMBER: _ClassVar[int]
+    MESSAGE_FIELD_NUMBER: _ClassVar[int]
+    EXPRESSION_FIELD_NUMBER: _ClassVar[int]
+    id: str
+    message: str
+    expression: str
+    def __init__(self, id: _Optional[str] = ..., message: _Optional[str] = ..., expression: _Optional[str] = ...) -> None: ...
+
+class Violations(_message.Message):
+    __slots__ = ("violations",)
+    VIOLATIONS_FIELD_NUMBER: _ClassVar[int]
+    violations: _containers.RepeatedCompositeFieldContainer[Violation]
+    def __init__(self, violations: _Optional[_Iterable[_Union[Violation, _Mapping]]] = ...) -> None: ...
+
+class Violation(_message.Message):
+    __slots__ = ("field_path", "constraint_id", "message", "for_key")
+    FIELD_PATH_FIELD_NUMBER: _ClassVar[int]
+    CONSTRAINT_ID_FIELD_NUMBER: _ClassVar[int]
+    MESSAGE_FIELD_NUMBER: _ClassVar[int]
+    FOR_KEY_FIELD_NUMBER: _ClassVar[int]
+    field_path: str
+    constraint_id: str
+    message: str
+    for_key: bool
+    def __init__(self, field_path: _Optional[str] = ..., constraint_id: _Optional[str] = ..., message: _Optional[str] = ..., for_key: bool = ...) -> None: ...
diff --git a/gen/python/buf/validate/expression_pb2_grpc.py b/gen/python/buf/validate/expression_pb2_grpc.py
new file mode 100644
index 0000000000000000000000000000000000000000..2daafffebfc817aefe8fcb96eaec25e65b3903e8
--- /dev/null
+++ b/gen/python/buf/validate/expression_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/gen/python/buf/validate/priv/private_pb2.py b/gen/python/buf/validate/priv/private_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..db1894e959bf2d21a3364ac65ba1e35e18b2475f
--- /dev/null
+++ b/gen/python/buf/validate/priv/private_pb2.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: buf/validate/priv/private.proto
+# Protobuf Python Version: 4.25.0
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import builder as _builder
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x62uf/validate/priv/private.proto\x12\x11\x62uf.validate.priv\x1a google/protobuf/descriptor.proto\"C\n\x10\x46ieldConstraints\x12/\n\x03\x63\x65l\x18\x01 \x03(\x0b\x32\x1d.buf.validate.priv.ConstraintR\x03\x63\x65l\"V\n\nConstraint\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression:\\\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x88\t \x01(\x0b\x32#.buf.validate.priv.FieldConstraintsR\x05\x66ield\x88\x01\x01\x42\xde\x01\n\x1a\x64\x65.danet.buf.validate.privB\x0cPrivateProtoP\x01ZLbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate/priv\xa2\x02\x03\x42VP\xaa\x02\x11\x42uf.Validate.Priv\xca\x02\x11\x42uf\\Validate\\Priv\xe2\x02\x1d\x42uf\\Validate\\Priv\\GPBMetadata\xea\x02\x13\x42uf::Validate::Privb\x06proto3')
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.priv.private_pb2', _globals)
+if _descriptor._USE_C_DESCRIPTORS == False:
+  _globals['DESCRIPTOR']._options = None
+  _globals['DESCRIPTOR']._serialized_options = b'\n\032de.danet.buf.validate.privB\014PrivateProtoP\001ZLbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate/priv\242\002\003BVP\252\002\021Buf.Validate.Priv\312\002\021Buf\\Validate\\Priv\342\002\035Buf\\Validate\\Priv\\GPBMetadata\352\002\023Buf::Validate::Priv'
+  _globals['_FIELDCONSTRAINTS']._serialized_start=88
+  _globals['_FIELDCONSTRAINTS']._serialized_end=155
+  _globals['_CONSTRAINT']._serialized_start=157
+  _globals['_CONSTRAINT']._serialized_end=243
+# @@protoc_insertion_point(module_scope)
diff --git a/gen/python/buf/validate/priv/private_pb2.pyi b/gen/python/buf/validate/priv/private_pb2.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..f42ef5a62e012de3908b54ee5f09250757eb736e
--- /dev/null
+++ b/gen/python/buf/validate/priv/private_pb2.pyi
@@ -0,0 +1,25 @@
+from google.protobuf import descriptor_pb2 as _descriptor_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+FIELD_FIELD_NUMBER: _ClassVar[int]
+field: _descriptor.FieldDescriptor
+
+class FieldConstraints(_message.Message):
+    __slots__ = ("cel",)
+    CEL_FIELD_NUMBER: _ClassVar[int]
+    cel: _containers.RepeatedCompositeFieldContainer[Constraint]
+    def __init__(self, cel: _Optional[_Iterable[_Union[Constraint, _Mapping]]] = ...) -> None: ...
+
+class Constraint(_message.Message):
+    __slots__ = ("id", "message", "expression")
+    ID_FIELD_NUMBER: _ClassVar[int]
+    MESSAGE_FIELD_NUMBER: _ClassVar[int]
+    EXPRESSION_FIELD_NUMBER: _ClassVar[int]
+    id: str
+    message: str
+    expression: str
+    def __init__(self, id: _Optional[str] = ..., message: _Optional[str] = ..., expression: _Optional[str] = ...) -> None: ...
diff --git a/gen/python/buf/validate/priv/private_pb2_grpc.py b/gen/python/buf/validate/priv/private_pb2_grpc.py
new file mode 100644
index 0000000000000000000000000000000000000000..2daafffebfc817aefe8fcb96eaec25e65b3903e8
--- /dev/null
+++ b/gen/python/buf/validate/priv/private_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/gen/python/buf/validate/validate_pb2.py b/gen/python/buf/validate/validate_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..829ace29f14941693195eb2c388a0441766e2f03
--- /dev/null
+++ b/gen/python/buf/validate/validate_pb2.py
@@ -0,0 +1,386 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: buf/validate/validate.proto
+# Protobuf Python Version: 4.25.0
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf.internal import builder as _builder
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from buf.validate import expression_pb2 as buf_dot_validate_dot_expression__pb2
+from buf.validate.priv import private_pb2 as buf_dot_validate_dot_priv_dot_private__pb2
+from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
+from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x62uf/validate/validate.proto\x12\x0c\x62uf.validate\x1a\x1d\x62uf/validate/expression.proto\x1a\x1f\x62uf/validate/priv/private.proto\x1a google/protobuf/descriptor.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"n\n\x12MessageConstraints\x12\x1f\n\x08\x64isabled\x18\x01 \x01(\x08H\x00R\x08\x64isabled\x88\x01\x01\x12*\n\x03\x63\x65l\x18\x03 \x03(\x0b\x32\x18.buf.validate.ConstraintR\x03\x63\x65lB\x0b\n\t_disabled\"@\n\x10OneofConstraints\x12\x1f\n\x08required\x18\x01 \x01(\x08H\x00R\x08required\x88\x01\x01\x42\x0b\n\t_required\"\xf5\t\n\x10\x46ieldConstraints\x12*\n\x03\x63\x65l\x18\x17 \x03(\x0b\x32\x18.buf.validate.ConstraintR\x03\x63\x65l\x12\x18\n\x07skipped\x18\x18 \x01(\x08R\x07skipped\x12\x1a\n\x08required\x18\x19 \x01(\x08R\x08required\x12!\n\x0cignore_empty\x18\x1a \x01(\x08R\x0bignoreEmpty\x12\x30\n\x05\x66loat\x18\x01 \x01(\x0b\x32\x18.buf.validate.FloatRulesH\x00R\x05\x66loat\x12\x33\n\x06\x64ouble\x18\x02 \x01(\x0b\x32\x19.buf.validate.DoubleRulesH\x00R\x06\x64ouble\x12\x30\n\x05int32\x18\x03 \x01(\x0b\x32\x18.buf.validate.Int32RulesH\x00R\x05int32\x12\x30\n\x05int64\x18\x04 \x01(\x0b\x32\x18.buf.validate.Int64RulesH\x00R\x05int64\x12\x33\n\x06uint32\x18\x05 \x01(\x0b\x32\x19.buf.validate.UInt32RulesH\x00R\x06uint32\x12\x33\n\x06uint64\x18\x06 \x01(\x0b\x32\x19.buf.validate.UInt64RulesH\x00R\x06uint64\x12\x33\n\x06sint32\x18\x07 \x01(\x0b\x32\x19.buf.validate.SInt32RulesH\x00R\x06sint32\x12\x33\n\x06sint64\x18\x08 \x01(\x0b\x32\x19.buf.validate.SInt64RulesH\x00R\x06sint64\x12\x36\n\x07\x66ixed32\x18\t \x01(\x0b\x32\x1a.buf.validate.Fixed32RulesH\x00R\x07\x66ixed32\x12\x36\n\x07\x66ixed64\x18\n \x01(\x0b\x32\x1a.buf.validate.Fixed64RulesH\x00R\x07\x66ixed64\x12\x39\n\x08sfixed32\x18\x0b \x01(\x0b\x32\x1b.buf.validate.SFixed32RulesH\x00R\x08sfixed32\x12\x39\n\x08sfixed64\x18\x0c \x01(\x0b\x32\x1b.buf.validate.SFixed64RulesH\x00R\x08sfixed64\x12-\n\x04\x62ool\x18\r \x01(\x0b\x32\x17.buf.validate.BoolRulesH\x00R\x04\x62ool\x12\x33\n\x06string\x18\x0e \x01(\x0b\x32\x19.buf.validate.StringRulesH\x00R\x06string\x12\x30\n\x05\x62ytes\x18\x0f \x01(\x0b\x32\x18.buf.validate.BytesRulesH\x00R\x05\x62ytes\x12-\n\x04\x65num\x18\x10 \x01(\x0b\x32\x17.buf.validate.EnumRulesH\x00R\x04\x65num\x12\x39\n\x08repeated\x18\x12 \x01(\x0b\x32\x1b.buf.validate.RepeatedRulesH\x00R\x08repeated\x12*\n\x03map\x18\x13 \x01(\x0b\x32\x16.buf.validate.MapRulesH\x00R\x03map\x12*\n\x03\x61ny\x18\x14 \x01(\x0b\x32\x16.buf.validate.AnyRulesH\x00R\x03\x61ny\x12\x39\n\x08\x64uration\x18\x15 \x01(\x0b\x32\x1b.buf.validate.DurationRulesH\x00R\x08\x64uration\x12<\n\ttimestamp\x18\x16 \x01(\x0b\x32\x1c.buf.validate.TimestampRulesH\x00R\ttimestampB\x06\n\x04type\"\xa2\x17\n\nFloatRules\x12u\n\x05\x63onst\x18\x01 \x01(\x02\x42Z\xc2HW\nU\n\x0b\x66loat.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xa3\x01\n\x02lt\x18\x02 \x01(\x02\x42\x90\x01\xc2H\x8c\x01\n\x89\x01\n\x08\x66loat.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb4\x01\n\x03lte\x18\x03 \x01(\x02\x42\x9f\x01\xc2H\x9b\x01\n\x98\x01\n\tfloat.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf3\x07\n\x02gt\x18\x04 \x01(\x02\x42\xe0\x07\xc2H\xdc\x07\n\x8d\x01\n\x08\x66loat.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc3\x01\n\x0b\x66loat.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xcd\x01\n\x15\x66loat.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd3\x01\n\x0c\x66loat.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xdd\x01\n\x16\x66loat.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xbf\x08\n\x03gte\x18\x05 \x01(\x02\x42\xaa\x08\xc2H\xa6\x08\n\x9b\x01\n\tfloat.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd2\x01\n\x0c\x66loat.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdc\x01\n\x16\x66loat.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe2\x01\n\rfloat.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xec\x01\n\x17\x66loat.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x02\x42i\xc2Hf\nd\n\x08\x66loat.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x02\x42\x66\xc2Hc\na\n\x0c\x66loat.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12g\n\x06\x66inite\x18\x08 \x01(\x08\x42O\xc2HL\nJ\n\x0c\x66loat.finite\x1a:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'R\x06\x66initeB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xb3\x17\n\x0b\x44oubleRules\x12v\n\x05\x63onst\x18\x01 \x01(\x01\x42[\xc2HX\nV\n\x0c\x64ouble.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xa4\x01\n\x02lt\x18\x02 \x01(\x01\x42\x91\x01\xc2H\x8d\x01\n\x8a\x01\n\tdouble.lt\x1a}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xb5\x01\n\x03lte\x18\x03 \x01(\x01\x42\xa0\x01\xc2H\x9c\x01\n\x99\x01\n\ndouble.lte\x1a\x8a\x01!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xf8\x07\n\x02gt\x18\x04 \x01(\x01\x42\xe5\x07\xc2H\xe1\x07\n\x8e\x01\n\tdouble.gt\x1a\x80\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xc4\x01\n\x0c\x64ouble.gt_lt\x1a\xb3\x01has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xce\x01\n\x16\x64ouble.gt_lt_exclusive\x1a\xb3\x01has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xd4\x01\n\rdouble.gt_lte\x1a\xc2\x01has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xde\x01\n\x17\x64ouble.gt_lte_exclusive\x1a\xc2\x01has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xc4\x08\n\x03gte\x18\x05 \x01(\x01\x42\xaf\x08\xc2H\xab\x08\n\x9c\x01\n\ndouble.gte\x1a\x8d\x01!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xd3\x01\n\rdouble.gte_lt\x1a\xc1\x01has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xdd\x01\n\x17\x64ouble.gte_lt_exclusive\x1a\xc1\x01has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xe3\x01\n\x0e\x64ouble.gte_lte\x1a\xd0\x01has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xed\x01\n\x18\x64ouble.gte_lte_exclusive\x1a\xd0\x01has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x01\x42j\xc2Hg\ne\n\tdouble.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x01\x42g\xc2Hd\nb\n\rdouble.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12h\n\x06\x66inite\x18\x08 \x01(\x08\x42P\xc2HM\nK\n\rdouble.finite\x1a:this.isNan() || this.isInf() ? \'value must be finite\' : \'\'R\x06\x66initeB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xe2\x14\n\nInt32Rules\x12u\n\x05\x63onst\x18\x01 \x01(\x05\x42Z\xc2HW\nU\n\x0bint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x05\x42|\xc2Hy\nw\n\x08int32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x05\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x05\x42\x88\x07\xc2H\x84\x07\nz\n\x08int32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x05\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x05\x42i\xc2Hf\nd\n\x08int32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x05\x42\x66\xc2Hc\na\n\x0cint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xe2\x14\n\nInt64Rules\x12u\n\x05\x63onst\x18\x01 \x01(\x03\x42Z\xc2HW\nU\n\x0bint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8e\x01\n\x02lt\x18\x02 \x01(\x03\x42|\xc2Hy\nw\n\x08int64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa1\x01\n\x03lte\x18\x03 \x01(\x03\x42\x8c\x01\xc2H\x88\x01\n\x85\x01\n\tint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x9b\x07\n\x02gt\x18\x04 \x01(\x03\x42\x88\x07\xc2H\x84\x07\nz\n\x08int64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb3\x01\n\x0bint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbb\x01\n\x15int64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc3\x01\n\x0cint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcb\x01\n\x16int64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xe8\x07\n\x03gte\x18\x05 \x01(\x03\x42\xd3\x07\xc2H\xcf\x07\n\x88\x01\n\tint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc2\x01\n\x0cint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xca\x01\n\x16int64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd2\x01\n\rint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xda\x01\n\x17int64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12y\n\x02in\x18\x06 \x03(\x03\x42i\xc2Hf\nd\n\x08int64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\x07 \x03(\x03\x42\x66\xc2Hc\na\n\x0cint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bUInt32Rules\x12v\n\x05\x63onst\x18\x01 \x01(\rB[\xc2HX\nV\n\x0cuint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\rB}\xc2Hz\nx\n\tuint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\rB\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\rB\x8d\x07\xc2H\x89\x07\n{\n\tuint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\rB\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\rBj\xc2Hg\ne\n\tuint32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\rBg\xc2Hd\nb\n\ruint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bUInt64Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x04\x42[\xc2HX\nV\n\x0cuint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x04\x42}\xc2Hz\nx\n\tuint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x04\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nuint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x04\x42\x8d\x07\xc2H\x89\x07\n{\n\tuint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0cuint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16uint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\ruint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17uint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x04\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nuint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\ruint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17uint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0euint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18uint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x04\x42j\xc2Hg\ne\n\tuint64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x04\x42g\xc2Hd\nb\n\ruint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bSInt32Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x11\x42[\xc2HX\nV\n\x0csint32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x11\x42}\xc2Hz\nx\n\tsint32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x11\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x11\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x11\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x11\x42j\xc2Hg\ne\n\tsint32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x11\x42g\xc2Hd\nb\n\rsint32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xf2\x14\n\x0bSInt64Rules\x12v\n\x05\x63onst\x18\x01 \x01(\x12\x42[\xc2HX\nV\n\x0csint64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x8f\x01\n\x02lt\x18\x02 \x01(\x12\x42}\xc2Hz\nx\n\tsint64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa2\x01\n\x03lte\x18\x03 \x01(\x12\x42\x8d\x01\xc2H\x89\x01\n\x86\x01\n\nsint64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa0\x07\n\x02gt\x18\x04 \x01(\x12\x42\x8d\x07\xc2H\x89\x07\n{\n\tsint64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb4\x01\n\x0csint64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbc\x01\n\x16sint64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc4\x01\n\rsint64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcc\x01\n\x17sint64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xed\x07\n\x03gte\x18\x05 \x01(\x12\x42\xd8\x07\xc2H\xd4\x07\n\x89\x01\n\nsint64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc3\x01\n\rsint64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcb\x01\n\x17sint64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd3\x01\n\x0esint64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdb\x01\n\x18sint64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12z\n\x02in\x18\x06 \x03(\x12\x42j\xc2Hg\ne\n\tsint64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x07 \x03(\x12\x42g\xc2Hd\nb\n\rsint64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x82\x15\n\x0c\x46ixed32Rules\x12w\n\x05\x63onst\x18\x01 \x01(\x07\x42\\\xc2HY\nW\n\rfixed32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x90\x01\n\x02lt\x18\x02 \x01(\x07\x42~\xc2H{\ny\n\nfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x07\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x07\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x07\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12{\n\x02in\x18\x06 \x03(\x07\x42k\xc2Hh\nf\n\nfixed32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x07\x42h\xc2He\nc\n\x0e\x66ixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x82\x15\n\x0c\x46ixed64Rules\x12w\n\x05\x63onst\x18\x01 \x01(\x06\x42\\\xc2HY\nW\n\rfixed64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x90\x01\n\x02lt\x18\x02 \x01(\x06\x42~\xc2H{\ny\n\nfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa3\x01\n\x03lte\x18\x03 \x01(\x06\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x0b\x66ixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xa5\x07\n\x02gt\x18\x04 \x01(\x06\x42\x92\x07\xc2H\x8e\x07\n|\n\nfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb5\x01\n\rfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbd\x01\n\x17\x66ixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc5\x01\n\x0e\x66ixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcd\x01\n\x18\x66ixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf2\x07\n\x03gte\x18\x05 \x01(\x06\x42\xdd\x07\xc2H\xd9\x07\n\x8a\x01\n\x0b\x66ixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc4\x01\n\x0e\x66ixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcc\x01\n\x18\x66ixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd4\x01\n\x0f\x66ixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdc\x01\n\x19\x66ixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12{\n\x02in\x18\x06 \x03(\x06\x42k\xc2Hh\nf\n\nfixed64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x7f\n\x06not_in\x18\x07 \x03(\x06\x42h\xc2He\nc\n\x0e\x66ixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x93\x15\n\rSFixed32Rules\x12x\n\x05\x63onst\x18\x01 \x01(\x0f\x42]\xc2HZ\nX\n\x0esfixed32.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x91\x01\n\x02lt\x18\x02 \x01(\x0f\x42\x7f\xc2H|\nz\n\x0bsfixed32.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x0f\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed32.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x0f\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed32.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed32.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed32.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed32.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed32.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x0f\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed32.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed32.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed32.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed32.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed32.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12|\n\x02in\x18\x06 \x03(\x0f\x42l\xc2Hi\ng\n\x0bsfixed32.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x0f\x42i\xc2Hf\nd\n\x0fsfixed32.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x93\x15\n\rSFixed64Rules\x12x\n\x05\x63onst\x18\x01 \x01(\x10\x42]\xc2HZ\nX\n\x0esfixed64.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\x91\x01\n\x02lt\x18\x02 \x01(\x10\x42\x7f\xc2H|\nz\n\x0bsfixed64.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xa4\x01\n\x03lte\x18\x03 \x01(\x10\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0csfixed64.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xaa\x07\n\x02gt\x18\x04 \x01(\x10\x42\x97\x07\xc2H\x93\x07\n}\n\x0bsfixed64.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0esfixed64.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18sfixed64.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0fsfixed64.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19sfixed64.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\xf7\x07\n\x03gte\x18\x05 \x01(\x10\x42\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0csfixed64.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0fsfixed64.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19sfixed64.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10sfixed64.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1asfixed64.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12|\n\x02in\x18\x06 \x03(\x10\x42l\xc2Hi\ng\n\x0bsfixed64.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x80\x01\n\x06not_in\x18\x07 \x03(\x10\x42i\xc2Hf\nd\n\x0fsfixed64.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\x8b\x01\n\tBoolRules\x12t\n\x05\x63onst\x18\x01 \x01(\x08\x42Y\xc2HV\nT\n\nbool.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x00R\x05\x63onst\x88\x01\x01\x42\x08\n\x06_const\"\xe8$\n\x0bStringRules\x12x\n\x05\x63onst\x18\x01 \x01(\tB]\xc2HZ\nX\n\x0cstring.const\x1aHthis != rules.const ? \'value must equal `%s`\'.format([rules.const]) : \'\'H\x01R\x05\x63onst\x88\x01\x01\x12\x88\x01\n\x03len\x18\x13 \x01(\x04\x42q\xc2Hn\nl\n\nstring.len\x1a^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\'H\x02R\x03len\x88\x01\x01\x12\xa6\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x0estring.min_len\x1anuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\'H\x03R\x06minLen\x88\x01\x01\x12\xa4\x01\n\x07max_len\x18\x03 \x01(\x04\x42\x85\x01\xc2H\x81\x01\n\x7f\n\x0estring.max_len\x1amuint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\'H\x04R\x06maxLen\x88\x01\x01\x12\xaa\x01\n\tlen_bytes\x18\x14 \x01(\x04\x42\x87\x01\xc2H\x83\x01\n\x80\x01\n\x10string.len_bytes\x1aluint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\'H\x05R\x08lenBytes\x88\x01\x01\x12\xb2\x01\n\tmin_bytes\x18\x04 \x01(\x04\x42\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x10string.min_bytes\x1atuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\'H\x06R\x08minBytes\x88\x01\x01\x12\xb1\x01\n\tmax_bytes\x18\x05 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x10string.max_bytes\x1asuint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\'H\x07R\x08maxBytes\x88\x01\x01\x12\x9b\x01\n\x07pattern\x18\x06 \x01(\tB|\xc2Hy\nw\n\x0estring.pattern\x1a\x65!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\'H\x08R\x07pattern\x88\x01\x01\x12\x91\x01\n\x06prefix\x18\x07 \x01(\tBt\xc2Hq\no\n\rstring.prefix\x1a^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\'H\tR\x06prefix\x88\x01\x01\x12\x8f\x01\n\x06suffix\x18\x08 \x01(\tBr\xc2Ho\nm\n\rstring.suffix\x1a\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\'H\nR\x06suffix\x88\x01\x01\x12\x9f\x01\n\x08\x63ontains\x18\t \x01(\tB~\xc2H{\ny\n\x0fstring.contains\x1a\x66!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\'H\x0bR\x08\x63ontains\x88\x01\x01\x12\xaa\x01\n\x0cnot_contains\x18\x17 \x01(\tB\x81\x01\xc2H~\n|\n\x13string.not_contains\x1a\x65this.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\'H\x0cR\x0bnotContains\x88\x01\x01\x12z\n\x02in\x18\n \x03(\tBj\xc2Hg\ne\n\tstring.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12~\n\x06not_in\x18\x0b \x03(\tBg\xc2Hd\nb\n\rstring.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12`\n\x05\x65mail\x18\x0c \x01(\x08\x42H\xc2HE\nC\n\x0cstring.email\x12#value must be a valid email address\x1a\x0ethis.isEmail()H\x00R\x05\x65mail\x12g\n\x08hostname\x18\r \x01(\x08\x42I\xc2HF\nD\n\x0fstring.hostname\x12\x1evalue must be a valid hostname\x1a\x11this.isHostname()H\x00R\x08hostname\x12Q\n\x02ip\x18\x0e \x01(\x08\x42?\xc2H<\n:\n\tstring.ip\x12 value must be a valid IP address\x1a\x0bthis.isIp()H\x00R\x02ip\x12Z\n\x04ipv4\x18\x0f \x01(\x08\x42\x44\xc2HA\n?\n\x0bstring.ipv4\x12\"value must be a valid IPv4 address\x1a\x0cthis.isIp(4)H\x00R\x04ipv4\x12Z\n\x04ipv6\x18\x10 \x01(\x08\x42\x44\xc2HA\n?\n\x0bstring.ipv6\x12\"value must be a valid IPv6 address\x1a\x0cthis.isIp(6)H\x00R\x04ipv6\x12N\n\x03uri\x18\x11 \x01(\x08\x42:\xc2H7\n5\n\nstring.uri\x12\x19value must be a valid URI\x1a\x0cthis.isUri()H\x00R\x03uri\x12\\\n\x07uri_ref\x18\x12 \x01(\x08\x42\x41\xc2H>\n<\n\x0estring.uri_ref\x12\x19value must be a valid URI\x1a\x0fthis.isUriRef()H\x00R\x06uriRef\x12\x82\x01\n\x07\x61\x64\x64ress\x18\x15 \x01(\x08\x42\x66\xc2Hc\na\n\x0estring.address\x12-value must be a valid hostname, or ip address\x1a this.isHostname() || this.isIp()H\x00R\x07\x61\x64\x64ress\x12\xb0\x01\n\x04uuid\x18\x16 \x01(\x08\x42\x99\x01\xc2H\x95\x01\n\x92\x01\n\x0bstring.uuid\x1a\x82\x01!this.matches(\'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') ? \'value must be a valid UUID\' : \'\'H\x00R\x04uuid\x12\x81\x01\n\x11ip_with_prefixlen\x18\x1a \x01(\x08\x42S\xc2HP\nN\n\x18string.ip_with_prefixlen\x12\x1fvalue must be a valid IP prefix\x1a\x11this.isIpPrefix()H\x00R\x0fipWithPrefixlen\x12\x9e\x01\n\x13ipv4_with_prefixlen\x18\x1b \x01(\x08\x42l\xc2Hi\ng\n\x1astring.ipv4_with_prefixlen\x12\x35value must be a valid IPv4 address with prefix length\x1a\x12this.isIpPrefix(4)H\x00R\x11ipv4WithPrefixlen\x12\x9e\x01\n\x13ipv6_with_prefixlen\x18\x1c \x01(\x08\x42l\xc2Hi\ng\n\x1astring.ipv6_with_prefixlen\x12\x35value must be a valid IPv6 address with prefix length\x1a\x12this.isIpPrefix(6)H\x00R\x11ipv6WithPrefixlen\x12n\n\tip_prefix\x18\x1d \x01(\x08\x42O\xc2HL\nJ\n\x10string.ip_prefix\x12\x1fvalue must be a valid IP prefix\x1a\x15this.isIpPrefix(true)H\x00R\x08ipPrefix\x12y\n\x0bipv4_prefix\x18\x1e \x01(\x08\x42V\xc2HS\nQ\n\x12string.ipv4_prefix\x12!value must be a valid IPv4 prefix\x1a\x18this.isIpPrefix(4, true)H\x00R\nipv4Prefix\x12y\n\x0bipv6_prefix\x18\x1f \x01(\x08\x42V\xc2HS\nQ\n\x12string.ipv6_prefix\x12!value must be a valid IPv6 prefix\x1a\x18this.isIpPrefix(6, true)H\x00R\nipv6Prefix\x12\xac\x04\n\x10well_known_regex\x18\x18 \x01(\x0e\x32\x18.buf.validate.KnownRegexB\xe5\x03\xc2H\xe1\x03\n\xeb\x01\n#string.well_known_regex.header_name\x1a\xc3\x01rules.well_known_regex == 1 && !this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\') ? \'value must be a valid HTTP header name\' : \'\'\n\xf0\x01\n$string.well_known_regex.header_value\x1a\xc7\x01rules.well_known_regex == 2 && !this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\') ? \'value must be a valid HTTP header value\' : \'\'H\x00R\x0ewellKnownRegex\x12\x1b\n\x06strict\x18\x19 \x01(\x08H\rR\x06strict\x88\x01\x01\x42\x0c\n\nwell_knownB\x08\n\x06_constB\x06\n\x04_lenB\n\n\x08_min_lenB\n\n\x08_max_lenB\x0c\n\n_len_bytesB\x0c\n\n_min_bytesB\x0c\n\n_max_bytesB\n\n\x08_patternB\t\n\x07_prefixB\t\n\x07_suffixB\x0b\n\t_containsB\x0f\n\r_not_containsB\t\n\x07_strict\"\xda\x0e\n\nBytesRules\x12r\n\x05\x63onst\x18\x01 \x01(\x0c\x42W\xc2HT\nR\n\x0b\x62ytes.const\x1a\x43this != rules.const ? \'value must be %x\'.format([rules.const]) : \'\'H\x01R\x05\x63onst\x88\x01\x01\x12\x82\x01\n\x03len\x18\r \x01(\x04\x42k\xc2Hh\nf\n\tbytes.len\x1aYuint(this.size()) != rules.len ? \'value length must be %s bytes\'.format([rules.len]) : \'\'H\x02R\x03len\x88\x01\x01\x12\x9d\x01\n\x07min_len\x18\x02 \x01(\x04\x42\x7f\xc2H|\nz\n\rbytes.min_len\x1aiuint(this.size()) < rules.min_len ? \'value length must be at least %s bytes\'.format([rules.min_len]) : \'\'H\x03R\x06minLen\x88\x01\x01\x12\x95\x01\n\x07max_len\x18\x03 \x01(\x04\x42w\xc2Ht\nr\n\rbytes.max_len\x1a\x61uint(this.size()) > rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\'H\x04R\x06maxLen\x88\x01\x01\x12\x9e\x01\n\x07pattern\x18\x04 \x01(\tB\x7f\xc2H|\nz\n\rbytes.pattern\x1ai!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\'H\x05R\x07pattern\x88\x01\x01\x12\x8e\x01\n\x06prefix\x18\x05 \x01(\x0c\x42q\xc2Hn\nl\n\x0c\x62ytes.prefix\x1a\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\'H\x06R\x06prefix\x88\x01\x01\x12\x8c\x01\n\x06suffix\x18\x06 \x01(\x0c\x42o\xc2Hl\nj\n\x0c\x62ytes.suffix\x1aZ!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\'H\x07R\x06suffix\x88\x01\x01\x12\x92\x01\n\x08\x63ontains\x18\x07 \x01(\x0c\x42q\xc2Hn\nl\n\x0e\x62ytes.contains\x1aZ!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\'H\x08R\x08\x63ontains\x88\x01\x01\x12\x9b\x01\n\x02in\x18\x08 \x03(\x0c\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x08\x62ytes.in\x1awdyn(rules)[\'in\'].size() > 0 && !(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12}\n\x06not_in\x18\t \x03(\x0c\x42\x66\xc2Hc\na\n\x0c\x62ytes.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notIn\x12r\n\x02ip\x18\n \x01(\x08\x42`\xc2H]\n[\n\x08\x62ytes.ip\x1aOthis.size() != 4 && this.size() != 16 ? \'value must be a valid IP address\' : \'\'H\x00R\x02ip\x12\x65\n\x04ipv4\x18\x0b \x01(\x08\x42O\xc2HL\nJ\n\nbytes.ipv4\x1a<this.size() != 4 ? \'value must be a valid IPv4 address\' : \'\'H\x00R\x04ipv4\x12\x66\n\x04ipv6\x18\x0c \x01(\x08\x42P\xc2HM\nK\n\nbytes.ipv6\x1a=this.size() != 16 ? \'value must be a valid IPv6 address\' : \'\'H\x00R\x04ipv6B\x0c\n\nwell_knownB\x08\n\x06_constB\x06\n\x04_lenB\n\n\x08_min_lenB\n\n\x08_max_lenB\n\n\x08_patternB\t\n\x07_prefixB\t\n\x07_suffixB\x0b\n\t_contains\"\xbc\x03\n\tEnumRules\x12t\n\x05\x63onst\x18\x01 \x01(\x05\x42Y\xc2HV\nT\n\nenum.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x00R\x05\x63onst\x88\x01\x01\x12&\n\x0c\x64\x65\x66ined_only\x18\x02 \x01(\x08H\x01R\x0b\x64\x65\x66inedOnly\x88\x01\x01\x12x\n\x02in\x18\x03 \x03(\x05\x42h\xc2He\nc\n\x07\x65num.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12|\n\x06not_in\x18\x04 \x03(\x05\x42\x65\xc2Hb\n`\n\x0b\x65num.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x08\n\x06_constB\x0f\n\r_defined_only\"\xcd\x04\n\rRepeatedRules\x12\xad\x01\n\tmin_items\x18\x01 \x01(\x04\x42\x8a\x01\xc2H\x86\x01\n\x83\x01\n\x12repeated.min_items\x1amuint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\'H\x00R\x08minItems\x88\x01\x01\x12\xb1\x01\n\tmax_items\x18\x02 \x01(\x04\x42\x8e\x01\xc2H\x8a\x01\n\x87\x01\n\x12repeated.max_items\x1aquint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\'H\x01R\x08maxItems\x88\x01\x01\x12l\n\x06unique\x18\x03 \x01(\x08\x42O\xc2HL\nJ\n\x0frepeated.unique\x12(repeated value must contain unique items\x1a\rthis.unique()H\x02R\x06unique\x88\x01\x01\x12\x39\n\x05items\x18\x04 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x03R\x05items\x88\x01\x01\x42\x0c\n\n_min_itemsB\x0c\n\n_max_itemsB\t\n\x07_uniqueB\x08\n\x06_items\"\xf1\x03\n\x08MapRules\x12\x9e\x01\n\tmin_pairs\x18\x01 \x01(\x04\x42|\xc2Hy\nw\n\rmap.min_pairs\x1a\x66uint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\'H\x00R\x08minPairs\x88\x01\x01\x12\x9d\x01\n\tmax_pairs\x18\x02 \x01(\x04\x42{\xc2Hx\nv\n\rmap.max_pairs\x1a\x65uint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\'H\x01R\x08maxPairs\x88\x01\x01\x12\x37\n\x04keys\x18\x04 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x02R\x04keys\x88\x01\x01\x12;\n\x06values\x18\x05 \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsH\x03R\x06values\x88\x01\x01\x42\x0c\n\n_min_pairsB\x0c\n\n_max_pairsB\x07\n\x05_keysB\t\n\x07_values\"1\n\x08\x41nyRules\x12\x0e\n\x02in\x18\x02 \x03(\tR\x02in\x12\x15\n\x06not_in\x18\x03 \x03(\tR\x05notIn\"\xd2\x16\n\rDurationRules\x12\x93\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationB]\xc2HZ\nX\n\x0e\x64uration.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xac\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x19.google.protobuf.DurationB\x7f\xc2H|\nz\n\x0b\x64uration.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xbf\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationB\x8f\x01\xc2H\x8b\x01\n\x88\x01\n\x0c\x64uration.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\xc5\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x19.google.protobuf.DurationB\x97\x07\xc2H\x93\x07\n}\n\x0b\x64uration.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb6\x01\n\x0e\x64uration.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbe\x01\n\x18\x64uration.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc6\x01\n\x0f\x64uration.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xce\x01\n\x19\x64uration.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x92\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationB\xe2\x07\xc2H\xde\x07\n\x8b\x01\n\x0c\x64uration.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc5\x01\n\x0f\x64uration.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xcd\x01\n\x19\x64uration.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd5\x01\n\x10\x64uration.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xdd\x01\n\x1a\x64uration.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x97\x01\n\x02in\x18\x07 \x03(\x0b\x32\x19.google.protobuf.DurationBl\xc2Hi\ng\n\x0b\x64uration.in\x1aX!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\'R\x02in\x12\x9b\x01\n\x06not_in\x18\x08 \x03(\x0b\x32\x19.google.protobuf.DurationBi\xc2Hf\nd\n\x0f\x64uration.not_in\x1aQthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\'R\x05notInB\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_const\"\xca\x17\n\x0eTimestampRules\x12\x95\x01\n\x05\x63onst\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampB^\xc2H[\nY\n\x0ftimestamp.const\x1a\x46this != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\'H\x02R\x05\x63onst\x88\x01\x01\x12\xaf\x01\n\x02lt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x80\x01\xc2H}\n{\n\x0ctimestamp.lt\x1ak!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\'H\x00R\x02lt\x12\xc1\x01\n\x03lte\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x90\x01\xc2H\x8c\x01\n\x89\x01\n\rtimestamp.lte\x1ax!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\'H\x00R\x03lte\x12\x61\n\x06lt_now\x18\x07 \x01(\x08\x42H\xc2HE\nC\n\x10timestamp.lt_now\x1a/this > now ? \'value must be less than now\' : \'\'H\x00R\x05ltNow\x12\xcb\x07\n\x02gt\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x9c\x07\xc2H\x98\x07\n~\n\x0ctimestamp.gt\x1an!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\xb7\x01\n\x0ftimestamp.gt_lt\x1a\xa3\x01has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xbf\x01\n\x19timestamp.gt_lt_exclusive\x1a\xa1\x01has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\xc7\x01\n\x10timestamp.gt_lte\x1a\xb2\x01has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\xcf\x01\n\x1atimestamp.gt_lte_exclusive\x1a\xb0\x01has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'H\x01R\x02gt\x12\x98\x08\n\x03gte\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\xe7\x07\xc2H\xe3\x07\n\x8c\x01\n\rtimestamp.gte\x1a{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\xc6\x01\n\x10timestamp.gte_lt\x1a\xb1\x01has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xce\x01\n\x1atimestamp.gte_lt_exclusive\x1a\xaf\x01has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\xd6\x01\n\x11timestamp.gte_lte\x1a\xc0\x01has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\xde\x01\n\x1btimestamp.gte_lte_exclusive\x1a\xbe\x01has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'H\x01R\x03gte\x12\x64\n\x06gt_now\x18\x08 \x01(\x08\x42K\xc2HH\nF\n\x10timestamp.gt_now\x1a\x32this < now ? \'value must be greater than now\' : \'\'H\x01R\x05gtNow\x12\xc5\x01\n\x06within\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationB\x8c\x01\xc2H\x88\x01\n\x85\x01\n\x10timestamp.within\x1aqthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\'H\x03R\x06within\x88\x01\x01\x42\x0b\n\tless_thanB\x0e\n\x0cgreater_thanB\x08\n\x06_constB\t\n\x07_within*n\n\nKnownRegex\x12\x1b\n\x17KNOWN_REGEX_UNSPECIFIED\x10\x00\x12 \n\x1cKNOWN_REGEX_HTTP_HEADER_NAME\x10\x01\x12!\n\x1dKNOWN_REGEX_HTTP_HEADER_VALUE\x10\x02:_\n\x07message\x12\x1f.google.protobuf.MessageOptions\x18\x87\t \x01(\x0b\x32 .buf.validate.MessageConstraintsR\x07message\x88\x01\x01:W\n\x05oneof\x12\x1d.google.protobuf.OneofOptions\x18\x87\t \x01(\x0b\x32\x1e.buf.validate.OneofConstraintsR\x05oneof\x88\x01\x01:W\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x87\t \x01(\x0b\x32\x1e.buf.validate.FieldConstraintsR\x05\x66ield\x88\x01\x01\x42\xc0\x01\n\x15\x64\x65.danet.buf.validateB\rValidateProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate\xa2\x02\x03\x42VX\xaa\x02\x0c\x42uf.Validate\xca\x02\x0c\x42uf\\Validate\xe2\x02\x18\x42uf\\Validate\\GPBMetadata\xea\x02\rBuf::Validateb\x06proto3')
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'buf.validate.validate_pb2', _globals)
+if _descriptor._USE_C_DESCRIPTORS == False:
+  _globals['DESCRIPTOR']._options = None
+  _globals['DESCRIPTOR']._serialized_options = b'\n\025de.danet.buf.validateB\rValidateProtoP\001ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate\242\002\003BVX\252\002\014Buf.Validate\312\002\014Buf\\Validate\342\002\030Buf\\Validate\\GPBMetadata\352\002\rBuf::Validate'
+  _globals['_FLOATRULES'].fields_by_name['const']._options = None
+  _globals['_FLOATRULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013float.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_FLOATRULES'].fields_by_name['lt']._options = None
+  _globals['_FLOATRULES'].fields_by_name['lt']._serialized_options = b'\302H\214\001\n\211\001\n\010float.lt\032}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_FLOATRULES'].fields_by_name['lte']._options = None
+  _globals['_FLOATRULES'].fields_by_name['lte']._serialized_options = b'\302H\233\001\n\230\001\n\tfloat.lte\032\212\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_FLOATRULES'].fields_by_name['gt']._options = None
+  _globals['_FLOATRULES'].fields_by_name['gt']._serialized_options = b'\302H\334\007\n\215\001\n\010float.gt\032\200\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\303\001\n\013float.gt_lt\032\263\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\315\001\n\025float.gt_lt_exclusive\032\263\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\323\001\n\014float.gt_lte\032\302\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\335\001\n\026float.gt_lte_exclusive\032\302\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_FLOATRULES'].fields_by_name['gte']._options = None
+  _globals['_FLOATRULES'].fields_by_name['gte']._serialized_options = b'\302H\246\010\n\233\001\n\tfloat.gte\032\215\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\322\001\n\014float.gte_lt\032\301\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\334\001\n\026float.gte_lt_exclusive\032\301\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\342\001\n\rfloat.gte_lte\032\320\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\354\001\n\027float.gte_lte_exclusive\032\320\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_FLOATRULES'].fields_by_name['in']._options = None
+  _globals['_FLOATRULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010float.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_FLOATRULES'].fields_by_name['not_in']._options = None
+  _globals['_FLOATRULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014float.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_FLOATRULES'].fields_by_name['finite']._options = None
+  _globals['_FLOATRULES'].fields_by_name['finite']._serialized_options = b'\302HL\nJ\n\014float.finite\032:this.isNan() || this.isInf() ? \'value must be finite\' : \'\''
+  _globals['_DOUBLERULES'].fields_by_name['const']._options = None
+  _globals['_DOUBLERULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014double.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_DOUBLERULES'].fields_by_name['lt']._options = None
+  _globals['_DOUBLERULES'].fields_by_name['lt']._serialized_options = b'\302H\215\001\n\212\001\n\tdouble.lt\032}!has(rules.gte) && !has(rules.gt) && (this.isNan() || this >= rules.lt)? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_DOUBLERULES'].fields_by_name['lte']._options = None
+  _globals['_DOUBLERULES'].fields_by_name['lte']._serialized_options = b'\302H\234\001\n\231\001\n\ndouble.lte\032\212\001!has(rules.gte) && !has(rules.gt) && (this.isNan() || this > rules.lte)? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_DOUBLERULES'].fields_by_name['gt']._options = None
+  _globals['_DOUBLERULES'].fields_by_name['gt']._serialized_options = b'\302H\341\007\n\216\001\n\tdouble.gt\032\200\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this <= rules.gt)? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\304\001\n\014double.gt_lt\032\263\001has(rules.lt) && rules.lt >= rules.gt && (this.isNan() || this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\316\001\n\026double.gt_lt_exclusive\032\263\001has(rules.lt) && rules.lt < rules.gt && (this.isNan() || (rules.lt <= this && this <= rules.gt))? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\324\001\n\rdouble.gt_lte\032\302\001has(rules.lte) && rules.lte >= rules.gt && (this.isNan() || this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\336\001\n\027double.gt_lte_exclusive\032\302\001has(rules.lte) && rules.lte < rules.gt && (this.isNan() || (rules.lte < this && this <= rules.gt))? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_DOUBLERULES'].fields_by_name['gte']._options = None
+  _globals['_DOUBLERULES'].fields_by_name['gte']._serialized_options = b'\302H\253\010\n\234\001\n\ndouble.gte\032\215\001!has(rules.lt) && !has(rules.lte) && (this.isNan() || this < rules.gte)? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\323\001\n\rdouble.gte_lt\032\301\001has(rules.lt) && rules.lt >= rules.gte && (this.isNan() || this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\335\001\n\027double.gte_lt_exclusive\032\301\001has(rules.lt) && rules.lt < rules.gte && (this.isNan() || (rules.lt <= this && this < rules.gte))? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\343\001\n\016double.gte_lte\032\320\001has(rules.lte) && rules.lte >= rules.gte && (this.isNan() || this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\355\001\n\030double.gte_lte_exclusive\032\320\001has(rules.lte) && rules.lte < rules.gte && (this.isNan() || (rules.lte < this && this < rules.gte))? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_DOUBLERULES'].fields_by_name['in']._options = None
+  _globals['_DOUBLERULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tdouble.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_DOUBLERULES'].fields_by_name['not_in']._options = None
+  _globals['_DOUBLERULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rdouble.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_DOUBLERULES'].fields_by_name['finite']._options = None
+  _globals['_DOUBLERULES'].fields_by_name['finite']._serialized_options = b'\302HM\nK\n\rdouble.finite\032:this.isNan() || this.isInf() ? \'value must be finite\' : \'\''
+  _globals['_INT32RULES'].fields_by_name['const']._options = None
+  _globals['_INT32RULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013int32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_INT32RULES'].fields_by_name['lt']._options = None
+  _globals['_INT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hy\nw\n\010int32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_INT32RULES'].fields_by_name['lte']._options = None
+  _globals['_INT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\210\001\n\205\001\n\tint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_INT32RULES'].fields_by_name['gt']._options = None
+  _globals['_INT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\204\007\nz\n\010int32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\263\001\n\013int32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\273\001\n\025int32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014int32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_INT32RULES'].fields_by_name['gte']._options = None
+  _globals['_INT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\317\007\n\210\001\n\tint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\302\001\n\014int32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\312\001\n\026int32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\322\001\n\rint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\332\001\n\027int32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_INT32RULES'].fields_by_name['in']._options = None
+  _globals['_INT32RULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010int32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_INT32RULES'].fields_by_name['not_in']._options = None
+  _globals['_INT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014int32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_INT64RULES'].fields_by_name['const']._options = None
+  _globals['_INT64RULES'].fields_by_name['const']._serialized_options = b'\302HW\nU\n\013int64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_INT64RULES'].fields_by_name['lt']._options = None
+  _globals['_INT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hy\nw\n\010int64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_INT64RULES'].fields_by_name['lte']._options = None
+  _globals['_INT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\210\001\n\205\001\n\tint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_INT64RULES'].fields_by_name['gt']._options = None
+  _globals['_INT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\204\007\nz\n\010int64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\263\001\n\013int64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\273\001\n\025int64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\303\001\n\014int64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\313\001\n\026int64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_INT64RULES'].fields_by_name['gte']._options = None
+  _globals['_INT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\317\007\n\210\001\n\tint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\302\001\n\014int64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\312\001\n\026int64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\322\001\n\rint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\332\001\n\027int64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_INT64RULES'].fields_by_name['in']._options = None
+  _globals['_INT64RULES'].fields_by_name['in']._serialized_options = b'\302Hf\nd\n\010int64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_INT64RULES'].fields_by_name['not_in']._options = None
+  _globals['_INT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014int64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_UINT32RULES'].fields_by_name['const']._options = None
+  _globals['_UINT32RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014uint32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_UINT32RULES'].fields_by_name['lt']._options = None
+  _globals['_UINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tuint32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_UINT32RULES'].fields_by_name['lte']._options = None
+  _globals['_UINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nuint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_UINT32RULES'].fields_by_name['gt']._options = None
+  _globals['_UINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tuint32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026uint32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\ruint32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027uint32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_UINT32RULES'].fields_by_name['gte']._options = None
+  _globals['_UINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nuint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\ruint32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027uint32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016uint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_UINT32RULES'].fields_by_name['in']._options = None
+  _globals['_UINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tuint32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_UINT32RULES'].fields_by_name['not_in']._options = None
+  _globals['_UINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\ruint32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_UINT64RULES'].fields_by_name['const']._options = None
+  _globals['_UINT64RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014uint64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_UINT64RULES'].fields_by_name['lt']._options = None
+  _globals['_UINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tuint64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_UINT64RULES'].fields_by_name['lte']._options = None
+  _globals['_UINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nuint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_UINT64RULES'].fields_by_name['gt']._options = None
+  _globals['_UINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tuint64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014uint64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026uint64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\ruint64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027uint64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_UINT64RULES'].fields_by_name['gte']._options = None
+  _globals['_UINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nuint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\ruint64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027uint64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016uint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030uint64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_UINT64RULES'].fields_by_name['in']._options = None
+  _globals['_UINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tuint64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_UINT64RULES'].fields_by_name['not_in']._options = None
+  _globals['_UINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\ruint64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_SINT32RULES'].fields_by_name['const']._options = None
+  _globals['_SINT32RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014sint32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_SINT32RULES'].fields_by_name['lt']._options = None
+  _globals['_SINT32RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tsint32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_SINT32RULES'].fields_by_name['lte']._options = None
+  _globals['_SINT32RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nsint32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_SINT32RULES'].fields_by_name['gt']._options = None
+  _globals['_SINT32RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tsint32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014sint32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026sint32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rsint32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027sint32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_SINT32RULES'].fields_by_name['gte']._options = None
+  _globals['_SINT32RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nsint32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\rsint32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027sint32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016sint32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_SINT32RULES'].fields_by_name['in']._options = None
+  _globals['_SINT32RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tsint32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_SINT32RULES'].fields_by_name['not_in']._options = None
+  _globals['_SINT32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rsint32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_SINT64RULES'].fields_by_name['const']._options = None
+  _globals['_SINT64RULES'].fields_by_name['const']._serialized_options = b'\302HX\nV\n\014sint64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_SINT64RULES'].fields_by_name['lt']._options = None
+  _globals['_SINT64RULES'].fields_by_name['lt']._serialized_options = b'\302Hz\nx\n\tsint64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_SINT64RULES'].fields_by_name['lte']._options = None
+  _globals['_SINT64RULES'].fields_by_name['lte']._serialized_options = b'\302H\211\001\n\206\001\n\nsint64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_SINT64RULES'].fields_by_name['gt']._options = None
+  _globals['_SINT64RULES'].fields_by_name['gt']._serialized_options = b'\302H\211\007\n{\n\tsint64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\264\001\n\014sint64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\274\001\n\026sint64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\304\001\n\rsint64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\314\001\n\027sint64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_SINT64RULES'].fields_by_name['gte']._options = None
+  _globals['_SINT64RULES'].fields_by_name['gte']._serialized_options = b'\302H\324\007\n\211\001\n\nsint64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\303\001\n\rsint64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\313\001\n\027sint64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\323\001\n\016sint64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\333\001\n\030sint64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_SINT64RULES'].fields_by_name['in']._options = None
+  _globals['_SINT64RULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tsint64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_SINT64RULES'].fields_by_name['not_in']._options = None
+  _globals['_SINT64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rsint64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_FIXED32RULES'].fields_by_name['const']._options = None
+  _globals['_FIXED32RULES'].fields_by_name['const']._serialized_options = b'\302HY\nW\n\rfixed32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_FIXED32RULES'].fields_by_name['lt']._options = None
+  _globals['_FIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302H{\ny\n\nfixed32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_FIXED32RULES'].fields_by_name['lte']._options = None
+  _globals['_FIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\212\001\n\207\001\n\013fixed32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_FIXED32RULES'].fields_by_name['gt']._options = None
+  _globals['_FIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\216\007\n|\n\nfixed32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\265\001\n\rfixed32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\027fixed32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\305\001\n\016fixed32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\315\001\n\030fixed32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_FIXED32RULES'].fields_by_name['gte']._options = None
+  _globals['_FIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\331\007\n\212\001\n\013fixed32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fixed32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031fixed32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_FIXED32RULES'].fields_by_name['in']._options = None
+  _globals['_FIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hh\nf\n\nfixed32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_FIXED32RULES'].fields_by_name['not_in']._options = None
+  _globals['_FIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302He\nc\n\016fixed32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_FIXED64RULES'].fields_by_name['const']._options = None
+  _globals['_FIXED64RULES'].fields_by_name['const']._serialized_options = b'\302HY\nW\n\rfixed64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_FIXED64RULES'].fields_by_name['lt']._options = None
+  _globals['_FIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302H{\ny\n\nfixed64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_FIXED64RULES'].fields_by_name['lte']._options = None
+  _globals['_FIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\212\001\n\207\001\n\013fixed64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_FIXED64RULES'].fields_by_name['gt']._options = None
+  _globals['_FIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\216\007\n|\n\nfixed64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\265\001\n\rfixed64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\275\001\n\027fixed64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\305\001\n\016fixed64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\315\001\n\030fixed64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_FIXED64RULES'].fields_by_name['gte']._options = None
+  _globals['_FIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\331\007\n\212\001\n\013fixed64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\304\001\n\016fixed64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\314\001\n\030fixed64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\324\001\n\017fixed64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\334\001\n\031fixed64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_FIXED64RULES'].fields_by_name['in']._options = None
+  _globals['_FIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hh\nf\n\nfixed64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_FIXED64RULES'].fields_by_name['not_in']._options = None
+  _globals['_FIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302He\nc\n\016fixed64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_SFIXED32RULES'].fields_by_name['const']._options = None
+  _globals['_SFIXED32RULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016sfixed32.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_SFIXED32RULES'].fields_by_name['lt']._options = None
+  _globals['_SFIXED32RULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013sfixed32.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_SFIXED32RULES'].fields_by_name['lte']._options = None
+  _globals['_SFIXED32RULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014sfixed32.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_SFIXED32RULES'].fields_by_name['gt']._options = None
+  _globals['_SFIXED32RULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013sfixed32.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016sfixed32.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed32.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed32.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed32.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_SFIXED32RULES'].fields_by_name['gte']._options = None
+  _globals['_SFIXED32RULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014sfixed32.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017sfixed32.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031sfixed32.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020sfixed32.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed32.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_SFIXED32RULES'].fields_by_name['in']._options = None
+  _globals['_SFIXED32RULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013sfixed32.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_SFIXED32RULES'].fields_by_name['not_in']._options = None
+  _globals['_SFIXED32RULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017sfixed32.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_SFIXED64RULES'].fields_by_name['const']._options = None
+  _globals['_SFIXED64RULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016sfixed64.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_SFIXED64RULES'].fields_by_name['lt']._options = None
+  _globals['_SFIXED64RULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013sfixed64.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_SFIXED64RULES'].fields_by_name['lte']._options = None
+  _globals['_SFIXED64RULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014sfixed64.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_SFIXED64RULES'].fields_by_name['gt']._options = None
+  _globals['_SFIXED64RULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013sfixed64.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016sfixed64.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030sfixed64.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017sfixed64.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031sfixed64.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_SFIXED64RULES'].fields_by_name['gte']._options = None
+  _globals['_SFIXED64RULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014sfixed64.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017sfixed64.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031sfixed64.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020sfixed64.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032sfixed64.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_SFIXED64RULES'].fields_by_name['in']._options = None
+  _globals['_SFIXED64RULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013sfixed64.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_SFIXED64RULES'].fields_by_name['not_in']._options = None
+  _globals['_SFIXED64RULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017sfixed64.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_BOOLRULES'].fields_by_name['const']._options = None
+  _globals['_BOOLRULES'].fields_by_name['const']._serialized_options = b'\302HV\nT\n\nbool.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['const']._options = None
+  _globals['_STRINGRULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\014string.const\032Hthis != rules.const ? \'value must equal `%s`\'.format([rules.const]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['len']._options = None
+  _globals['_STRINGRULES'].fields_by_name['len']._serialized_options = b'\302Hn\nl\n\nstring.len\032^uint(this.size()) != rules.len ? \'value length must be %s characters\'.format([rules.len]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['min_len']._options = None
+  _globals['_STRINGRULES'].fields_by_name['min_len']._serialized_options = b'\302H\203\001\n\200\001\n\016string.min_len\032nuint(this.size()) < rules.min_len ? \'value length must be at least %s characters\'.format([rules.min_len]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['max_len']._options = None
+  _globals['_STRINGRULES'].fields_by_name['max_len']._serialized_options = b'\302H\201\001\n\177\n\016string.max_len\032muint(this.size()) > rules.max_len ? \'value length must be at most %s characters\'.format([rules.max_len]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['len_bytes']._options = None
+  _globals['_STRINGRULES'].fields_by_name['len_bytes']._serialized_options = b'\302H\203\001\n\200\001\n\020string.len_bytes\032luint(bytes(this).size()) != rules.len_bytes ? \'value length must be %s bytes\'.format([rules.len_bytes]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['min_bytes']._options = None
+  _globals['_STRINGRULES'].fields_by_name['min_bytes']._serialized_options = b'\302H\213\001\n\210\001\n\020string.min_bytes\032tuint(bytes(this).size()) < rules.min_bytes ? \'value length must be at least %s bytes\'.format([rules.min_bytes]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['max_bytes']._options = None
+  _globals['_STRINGRULES'].fields_by_name['max_bytes']._serialized_options = b'\302H\212\001\n\207\001\n\020string.max_bytes\032suint(bytes(this).size()) > rules.max_bytes ? \'value length must be at most %s bytes\'.format([rules.max_bytes]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['pattern']._options = None
+  _globals['_STRINGRULES'].fields_by_name['pattern']._serialized_options = b'\302Hy\nw\n\016string.pattern\032e!this.matches(rules.pattern) ? \'value does not match regex pattern `%s`\'.format([rules.pattern]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['prefix']._options = None
+  _globals['_STRINGRULES'].fields_by_name['prefix']._serialized_options = b'\302Hq\no\n\rstring.prefix\032^!this.startsWith(rules.prefix) ? \'value does not have prefix `%s`\'.format([rules.prefix]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['suffix']._options = None
+  _globals['_STRINGRULES'].fields_by_name['suffix']._serialized_options = b'\302Ho\nm\n\rstring.suffix\032\\!this.endsWith(rules.suffix) ? \'value does not have suffix `%s`\'.format([rules.suffix]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['contains']._options = None
+  _globals['_STRINGRULES'].fields_by_name['contains']._serialized_options = b'\302H{\ny\n\017string.contains\032f!this.contains(rules.contains) ? \'value does not contain substring `%s`\'.format([rules.contains]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['not_contains']._options = None
+  _globals['_STRINGRULES'].fields_by_name['not_contains']._serialized_options = b'\302H~\n|\n\023string.not_contains\032ethis.contains(rules.not_contains) ? \'value contains substring `%s`\'.format([rules.not_contains]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['in']._options = None
+  _globals['_STRINGRULES'].fields_by_name['in']._serialized_options = b'\302Hg\ne\n\tstring.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['not_in']._options = None
+  _globals['_STRINGRULES'].fields_by_name['not_in']._serialized_options = b'\302Hd\nb\n\rstring.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_STRINGRULES'].fields_by_name['email']._options = None
+  _globals['_STRINGRULES'].fields_by_name['email']._serialized_options = b'\302HE\nC\n\014string.email\022#value must be a valid email address\032\016this.isEmail()'
+  _globals['_STRINGRULES'].fields_by_name['hostname']._options = None
+  _globals['_STRINGRULES'].fields_by_name['hostname']._serialized_options = b'\302HF\nD\n\017string.hostname\022\036value must be a valid hostname\032\021this.isHostname()'
+  _globals['_STRINGRULES'].fields_by_name['ip']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ip']._serialized_options = b'\302H<\n:\n\tstring.ip\022 value must be a valid IP address\032\013this.isIp()'
+  _globals['_STRINGRULES'].fields_by_name['ipv4']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ipv4']._serialized_options = b'\302HA\n?\n\013string.ipv4\022\"value must be a valid IPv4 address\032\014this.isIp(4)'
+  _globals['_STRINGRULES'].fields_by_name['ipv6']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ipv6']._serialized_options = b'\302HA\n?\n\013string.ipv6\022\"value must be a valid IPv6 address\032\014this.isIp(6)'
+  _globals['_STRINGRULES'].fields_by_name['uri']._options = None
+  _globals['_STRINGRULES'].fields_by_name['uri']._serialized_options = b'\302H7\n5\n\nstring.uri\022\031value must be a valid URI\032\014this.isUri()'
+  _globals['_STRINGRULES'].fields_by_name['uri_ref']._options = None
+  _globals['_STRINGRULES'].fields_by_name['uri_ref']._serialized_options = b'\302H>\n<\n\016string.uri_ref\022\031value must be a valid URI\032\017this.isUriRef()'
+  _globals['_STRINGRULES'].fields_by_name['address']._options = None
+  _globals['_STRINGRULES'].fields_by_name['address']._serialized_options = b'\302Hc\na\n\016string.address\022-value must be a valid hostname, or ip address\032 this.isHostname() || this.isIp()'
+  _globals['_STRINGRULES'].fields_by_name['uuid']._options = None
+  _globals['_STRINGRULES'].fields_by_name['uuid']._serialized_options = b'\302H\225\001\n\222\001\n\013string.uuid\032\202\001!this.matches(\'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\') ? \'value must be a valid UUID\' : \'\''
+  _globals['_STRINGRULES'].fields_by_name['ip_with_prefixlen']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ip_with_prefixlen']._serialized_options = b'\302HP\nN\n\030string.ip_with_prefixlen\022\037value must be a valid IP prefix\032\021this.isIpPrefix()'
+  _globals['_STRINGRULES'].fields_by_name['ipv4_with_prefixlen']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ipv4_with_prefixlen']._serialized_options = b'\302Hi\ng\n\032string.ipv4_with_prefixlen\0225value must be a valid IPv4 address with prefix length\032\022this.isIpPrefix(4)'
+  _globals['_STRINGRULES'].fields_by_name['ipv6_with_prefixlen']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ipv6_with_prefixlen']._serialized_options = b'\302Hi\ng\n\032string.ipv6_with_prefixlen\0225value must be a valid IPv6 address with prefix length\032\022this.isIpPrefix(6)'
+  _globals['_STRINGRULES'].fields_by_name['ip_prefix']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ip_prefix']._serialized_options = b'\302HL\nJ\n\020string.ip_prefix\022\037value must be a valid IP prefix\032\025this.isIpPrefix(true)'
+  _globals['_STRINGRULES'].fields_by_name['ipv4_prefix']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ipv4_prefix']._serialized_options = b'\302HS\nQ\n\022string.ipv4_prefix\022!value must be a valid IPv4 prefix\032\030this.isIpPrefix(4, true)'
+  _globals['_STRINGRULES'].fields_by_name['ipv6_prefix']._options = None
+  _globals['_STRINGRULES'].fields_by_name['ipv6_prefix']._serialized_options = b'\302HS\nQ\n\022string.ipv6_prefix\022!value must be a valid IPv6 prefix\032\030this.isIpPrefix(6, true)'
+  _globals['_STRINGRULES'].fields_by_name['well_known_regex']._options = None
+  _globals['_STRINGRULES'].fields_by_name['well_known_regex']._serialized_options = b'\302H\341\003\n\353\001\n#string.well_known_regex.header_name\032\303\001rules.well_known_regex == 1 && !this.matches(!has(rules.strict) || rules.strict ?\'^:?[0-9a-zA-Z!#$%&\\\'*+-.^_|~\\x60]+$\' :\'^[^\\u0000\\u000A\\u000D]+$\') ? \'value must be a valid HTTP header name\' : \'\'\n\360\001\n$string.well_known_regex.header_value\032\307\001rules.well_known_regex == 2 && !this.matches(!has(rules.strict) || rules.strict ?\'^[^\\u0000-\\u0008\\u000A-\\u001F\\u007F]*$\' :\'^[^\\u0000\\u000A\\u000D]*$\') ? \'value must be a valid HTTP header value\' : \'\''
+  _globals['_BYTESRULES'].fields_by_name['const']._options = None
+  _globals['_BYTESRULES'].fields_by_name['const']._serialized_options = b'\302HT\nR\n\013bytes.const\032Cthis != rules.const ? \'value must be %x\'.format([rules.const]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['len']._options = None
+  _globals['_BYTESRULES'].fields_by_name['len']._serialized_options = b'\302Hh\nf\n\tbytes.len\032Yuint(this.size()) != rules.len ? \'value length must be %s bytes\'.format([rules.len]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['min_len']._options = None
+  _globals['_BYTESRULES'].fields_by_name['min_len']._serialized_options = b'\302H|\nz\n\rbytes.min_len\032iuint(this.size()) < rules.min_len ? \'value length must be at least %s bytes\'.format([rules.min_len]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['max_len']._options = None
+  _globals['_BYTESRULES'].fields_by_name['max_len']._serialized_options = b'\302Ht\nr\n\rbytes.max_len\032auint(this.size()) > rules.max_len ? \'value must be at most %s bytes\'.format([rules.max_len]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['pattern']._options = None
+  _globals['_BYTESRULES'].fields_by_name['pattern']._serialized_options = b'\302H|\nz\n\rbytes.pattern\032i!string(this).matches(rules.pattern) ? \'value must match regex pattern `%s`\'.format([rules.pattern]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['prefix']._options = None
+  _globals['_BYTESRULES'].fields_by_name['prefix']._serialized_options = b'\302Hn\nl\n\014bytes.prefix\032\\!this.startsWith(rules.prefix) ? \'value does not have prefix %x\'.format([rules.prefix]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['suffix']._options = None
+  _globals['_BYTESRULES'].fields_by_name['suffix']._serialized_options = b'\302Hl\nj\n\014bytes.suffix\032Z!this.endsWith(rules.suffix) ? \'value does not have suffix %x\'.format([rules.suffix]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['contains']._options = None
+  _globals['_BYTESRULES'].fields_by_name['contains']._serialized_options = b'\302Hn\nl\n\016bytes.contains\032Z!this.contains(rules.contains) ? \'value does not contain %x\'.format([rules.contains]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['in']._options = None
+  _globals['_BYTESRULES'].fields_by_name['in']._serialized_options = b'\302H\206\001\n\203\001\n\010bytes.in\032wdyn(rules)[\'in\'].size() > 0 && !(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['not_in']._options = None
+  _globals['_BYTESRULES'].fields_by_name['not_in']._serialized_options = b'\302Hc\na\n\014bytes.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_BYTESRULES'].fields_by_name['ip']._options = None
+  _globals['_BYTESRULES'].fields_by_name['ip']._serialized_options = b'\302H]\n[\n\010bytes.ip\032Othis.size() != 4 && this.size() != 16 ? \'value must be a valid IP address\' : \'\''
+  _globals['_BYTESRULES'].fields_by_name['ipv4']._options = None
+  _globals['_BYTESRULES'].fields_by_name['ipv4']._serialized_options = b'\302HL\nJ\n\nbytes.ipv4\032<this.size() != 4 ? \'value must be a valid IPv4 address\' : \'\''
+  _globals['_BYTESRULES'].fields_by_name['ipv6']._options = None
+  _globals['_BYTESRULES'].fields_by_name['ipv6']._serialized_options = b'\302HM\nK\n\nbytes.ipv6\032=this.size() != 16 ? \'value must be a valid IPv6 address\' : \'\''
+  _globals['_ENUMRULES'].fields_by_name['const']._options = None
+  _globals['_ENUMRULES'].fields_by_name['const']._serialized_options = b'\302HV\nT\n\nenum.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_ENUMRULES'].fields_by_name['in']._options = None
+  _globals['_ENUMRULES'].fields_by_name['in']._serialized_options = b'\302He\nc\n\007enum.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_ENUMRULES'].fields_by_name['not_in']._options = None
+  _globals['_ENUMRULES'].fields_by_name['not_in']._serialized_options = b'\302Hb\n`\n\013enum.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_REPEATEDRULES'].fields_by_name['min_items']._options = None
+  _globals['_REPEATEDRULES'].fields_by_name['min_items']._serialized_options = b'\302H\206\001\n\203\001\n\022repeated.min_items\032muint(this.size()) < rules.min_items ? \'value must contain at least %d item(s)\'.format([rules.min_items]) : \'\''
+  _globals['_REPEATEDRULES'].fields_by_name['max_items']._options = None
+  _globals['_REPEATEDRULES'].fields_by_name['max_items']._serialized_options = b'\302H\212\001\n\207\001\n\022repeated.max_items\032quint(this.size()) > rules.max_items ? \'value must contain no more than %s item(s)\'.format([rules.max_items]) : \'\''
+  _globals['_REPEATEDRULES'].fields_by_name['unique']._options = None
+  _globals['_REPEATEDRULES'].fields_by_name['unique']._serialized_options = b'\302HL\nJ\n\017repeated.unique\022(repeated value must contain unique items\032\rthis.unique()'
+  _globals['_MAPRULES'].fields_by_name['min_pairs']._options = None
+  _globals['_MAPRULES'].fields_by_name['min_pairs']._serialized_options = b'\302Hy\nw\n\rmap.min_pairs\032fuint(this.size()) < rules.min_pairs ? \'map must be at least %d entries\'.format([rules.min_pairs]) : \'\''
+  _globals['_MAPRULES'].fields_by_name['max_pairs']._options = None
+  _globals['_MAPRULES'].fields_by_name['max_pairs']._serialized_options = b'\302Hx\nv\n\rmap.max_pairs\032euint(this.size()) > rules.max_pairs ? \'map must be at most %d entries\'.format([rules.max_pairs]) : \'\''
+  _globals['_DURATIONRULES'].fields_by_name['const']._options = None
+  _globals['_DURATIONRULES'].fields_by_name['const']._serialized_options = b'\302HZ\nX\n\016duration.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_DURATIONRULES'].fields_by_name['lt']._options = None
+  _globals['_DURATIONRULES'].fields_by_name['lt']._serialized_options = b'\302H|\nz\n\013duration.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_DURATIONRULES'].fields_by_name['lte']._options = None
+  _globals['_DURATIONRULES'].fields_by_name['lte']._serialized_options = b'\302H\213\001\n\210\001\n\014duration.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_DURATIONRULES'].fields_by_name['gt']._options = None
+  _globals['_DURATIONRULES'].fields_by_name['gt']._serialized_options = b'\302H\223\007\n}\n\013duration.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\266\001\n\016duration.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\276\001\n\030duration.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\306\001\n\017duration.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\316\001\n\031duration.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_DURATIONRULES'].fields_by_name['gte']._options = None
+  _globals['_DURATIONRULES'].fields_by_name['gte']._serialized_options = b'\302H\336\007\n\213\001\n\014duration.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\305\001\n\017duration.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\315\001\n\031duration.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\325\001\n\020duration.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\335\001\n\032duration.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_DURATIONRULES'].fields_by_name['in']._options = None
+  _globals['_DURATIONRULES'].fields_by_name['in']._serialized_options = b'\302Hi\ng\n\013duration.in\032X!(this in dyn(rules)[\'in\']) ? \'value must be in list %s\'.format([dyn(rules)[\'in\']]) : \'\''
+  _globals['_DURATIONRULES'].fields_by_name['not_in']._options = None
+  _globals['_DURATIONRULES'].fields_by_name['not_in']._serialized_options = b'\302Hf\nd\n\017duration.not_in\032Qthis in rules.not_in ? \'value must not be in list %s\'.format([rules.not_in]) : \'\''
+  _globals['_TIMESTAMPRULES'].fields_by_name['const']._options = None
+  _globals['_TIMESTAMPRULES'].fields_by_name['const']._serialized_options = b'\302H[\nY\n\017timestamp.const\032Fthis != rules.const ? \'value must equal %s\'.format([rules.const]) : \'\''
+  _globals['_TIMESTAMPRULES'].fields_by_name['lt']._options = None
+  _globals['_TIMESTAMPRULES'].fields_by_name['lt']._serialized_options = b'\302H}\n{\n\014timestamp.lt\032k!has(rules.gte) && !has(rules.gt) && this >= rules.lt? \'value must be less than %s\'.format([rules.lt]) : \'\''
+  _globals['_TIMESTAMPRULES'].fields_by_name['lte']._options = None
+  _globals['_TIMESTAMPRULES'].fields_by_name['lte']._serialized_options = b'\302H\214\001\n\211\001\n\rtimestamp.lte\032x!has(rules.gte) && !has(rules.gt) && this > rules.lte? \'value must be less than or equal to %s\'.format([rules.lte]) : \'\''
+  _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._options = None
+  _globals['_TIMESTAMPRULES'].fields_by_name['lt_now']._serialized_options = b'\302HE\nC\n\020timestamp.lt_now\032/this > now ? \'value must be less than now\' : \'\''
+  _globals['_TIMESTAMPRULES'].fields_by_name['gt']._options = None
+  _globals['_TIMESTAMPRULES'].fields_by_name['gt']._serialized_options = b'\302H\230\007\n~\n\014timestamp.gt\032n!has(rules.lt) && !has(rules.lte) && this <= rules.gt? \'value must be greater than %s\'.format([rules.gt]) : \'\'\n\267\001\n\017timestamp.gt_lt\032\243\001has(rules.lt) && rules.lt >= rules.gt && (this >= rules.lt || this <= rules.gt)? \'value must be greater than %s and less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\277\001\n\031timestamp.gt_lt_exclusive\032\241\001has(rules.lt) && rules.lt < rules.gt && (rules.lt <= this && this <= rules.gt)? \'value must be greater than %s or less than %s\'.format([rules.gt, rules.lt]) : \'\'\n\307\001\n\020timestamp.gt_lte\032\262\001has(rules.lte) && rules.lte >= rules.gt && (this > rules.lte || this <= rules.gt)? \'value must be greater than %s and less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\'\n\317\001\n\032timestamp.gt_lte_exclusive\032\260\001has(rules.lte) && rules.lte < rules.gt && (rules.lte < this && this <= rules.gt)? \'value must be greater than %s or less than or equal to %s\'.format([rules.gt, rules.lte]) : \'\''
+  _globals['_TIMESTAMPRULES'].fields_by_name['gte']._options = None
+  _globals['_TIMESTAMPRULES'].fields_by_name['gte']._serialized_options = b'\302H\343\007\n\214\001\n\rtimestamp.gte\032{!has(rules.lt) && !has(rules.lte) && this < rules.gte? \'value must be greater than or equal to %s\'.format([rules.gte]) : \'\'\n\306\001\n\020timestamp.gte_lt\032\261\001has(rules.lt) && rules.lt >= rules.gte && (this >= rules.lt || this < rules.gte)? \'value must be greater than or equal to %s and less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\316\001\n\032timestamp.gte_lt_exclusive\032\257\001has(rules.lt) && rules.lt < rules.gte && (rules.lt <= this && this < rules.gte)? \'value must be greater than or equal to %s or less than %s\'.format([rules.gte, rules.lt]) : \'\'\n\326\001\n\021timestamp.gte_lte\032\300\001has(rules.lte) && rules.lte >= rules.gte && (this > rules.lte || this < rules.gte)? \'value must be greater than or equal to %s and less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\'\n\336\001\n\033timestamp.gte_lte_exclusive\032\276\001has(rules.lte) && rules.lte < rules.gte && (rules.lte < this && this < rules.gte)? \'value must be greater than or equal to %s or less than or equal to %s\'.format([rules.gte, rules.lte]) : \'\''
+  _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._options = None
+  _globals['_TIMESTAMPRULES'].fields_by_name['gt_now']._serialized_options = b'\302HH\nF\n\020timestamp.gt_now\0322this < now ? \'value must be greater than now\' : \'\''
+  _globals['_TIMESTAMPRULES'].fields_by_name['within']._options = None
+  _globals['_TIMESTAMPRULES'].fields_by_name['within']._serialized_options = b'\302H\210\001\n\205\001\n\020timestamp.within\032qthis < now-rules.within || this > now+rules.within ? \'value must be within %s of now\'.format([rules.within]) : \'\''
+  _globals['_KNOWNREGEX']._serialized_start=48727
+  _globals['_KNOWNREGEX']._serialized_end=48837
+  _globals['_MESSAGECONSTRAINTS']._serialized_start=208
+  _globals['_MESSAGECONSTRAINTS']._serialized_end=318
+  _globals['_ONEOFCONSTRAINTS']._serialized_start=320
+  _globals['_ONEOFCONSTRAINTS']._serialized_end=384
+  _globals['_FIELDCONSTRAINTS']._serialized_start=387
+  _globals['_FIELDCONSTRAINTS']._serialized_end=1656
+  _globals['_FLOATRULES']._serialized_start=1659
+  _globals['_FLOATRULES']._serialized_end=4637
+  _globals['_DOUBLERULES']._serialized_start=4640
+  _globals['_DOUBLERULES']._serialized_end=7635
+  _globals['_INT32RULES']._serialized_start=7638
+  _globals['_INT32RULES']._serialized_end=10296
+  _globals['_INT64RULES']._serialized_start=10299
+  _globals['_INT64RULES']._serialized_end=12957
+  _globals['_UINT32RULES']._serialized_start=12960
+  _globals['_UINT32RULES']._serialized_end=15634
+  _globals['_UINT64RULES']._serialized_start=15637
+  _globals['_UINT64RULES']._serialized_end=18311
+  _globals['_SINT32RULES']._serialized_start=18314
+  _globals['_SINT32RULES']._serialized_end=20988
+  _globals['_SINT64RULES']._serialized_start=20991
+  _globals['_SINT64RULES']._serialized_end=23665
+  _globals['_FIXED32RULES']._serialized_start=23668
+  _globals['_FIXED32RULES']._serialized_end=26358
+  _globals['_FIXED64RULES']._serialized_start=26361
+  _globals['_FIXED64RULES']._serialized_end=29051
+  _globals['_SFIXED32RULES']._serialized_start=29054
+  _globals['_SFIXED32RULES']._serialized_end=31761
+  _globals['_SFIXED64RULES']._serialized_start=31764
+  _globals['_SFIXED64RULES']._serialized_end=34471
+  _globals['_BOOLRULES']._serialized_start=34474
+  _globals['_BOOLRULES']._serialized_end=34613
+  _globals['_STRINGRULES']._serialized_start=34616
+  _globals['_STRINGRULES']._serialized_end=39328
+  _globals['_BYTESRULES']._serialized_start=39331
+  _globals['_BYTESRULES']._serialized_end=41213
+  _globals['_ENUMRULES']._serialized_start=41216
+  _globals['_ENUMRULES']._serialized_end=41660
+  _globals['_REPEATEDRULES']._serialized_start=41663
+  _globals['_REPEATEDRULES']._serialized_end=42252
+  _globals['_MAPRULES']._serialized_start=42255
+  _globals['_MAPRULES']._serialized_end=42752
+  _globals['_ANYRULES']._serialized_start=42754
+  _globals['_ANYRULES']._serialized_end=42803
+  _globals['_DURATIONRULES']._serialized_start=42806
+  _globals['_DURATIONRULES']._serialized_end=45704
+  _globals['_TIMESTAMPRULES']._serialized_start=45707
+  _globals['_TIMESTAMPRULES']._serialized_end=48725
+# @@protoc_insertion_point(module_scope)
diff --git a/gen/python/buf/validate/validate_pb2.pyi b/gen/python/buf/validate/validate_pb2.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..d49fe1e38a3536e2cf25533e103fe0427d85824c
--- /dev/null
+++ b/gen/python/buf/validate/validate_pb2.pyi
@@ -0,0 +1,482 @@
+from buf.validate import expression_pb2 as _expression_pb2
+from buf.validate.priv import private_pb2 as _private_pb2
+from google.protobuf import descriptor_pb2 as _descriptor_pb2
+from google.protobuf import duration_pb2 as _duration_pb2
+from google.protobuf import timestamp_pb2 as _timestamp_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class KnownRegex(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+    __slots__ = ()
+    KNOWN_REGEX_UNSPECIFIED: _ClassVar[KnownRegex]
+    KNOWN_REGEX_HTTP_HEADER_NAME: _ClassVar[KnownRegex]
+    KNOWN_REGEX_HTTP_HEADER_VALUE: _ClassVar[KnownRegex]
+KNOWN_REGEX_UNSPECIFIED: KnownRegex
+KNOWN_REGEX_HTTP_HEADER_NAME: KnownRegex
+KNOWN_REGEX_HTTP_HEADER_VALUE: KnownRegex
+MESSAGE_FIELD_NUMBER: _ClassVar[int]
+message: _descriptor.FieldDescriptor
+ONEOF_FIELD_NUMBER: _ClassVar[int]
+oneof: _descriptor.FieldDescriptor
+FIELD_FIELD_NUMBER: _ClassVar[int]
+field: _descriptor.FieldDescriptor
+
+class MessageConstraints(_message.Message):
+    __slots__ = ("disabled", "cel")
+    DISABLED_FIELD_NUMBER: _ClassVar[int]
+    CEL_FIELD_NUMBER: _ClassVar[int]
+    disabled: bool
+    cel: _containers.RepeatedCompositeFieldContainer[_expression_pb2.Constraint]
+    def __init__(self, disabled: bool = ..., cel: _Optional[_Iterable[_Union[_expression_pb2.Constraint, _Mapping]]] = ...) -> None: ...
+
+class OneofConstraints(_message.Message):
+    __slots__ = ("required",)
+    REQUIRED_FIELD_NUMBER: _ClassVar[int]
+    required: bool
+    def __init__(self, required: bool = ...) -> None: ...
+
+class FieldConstraints(_message.Message):
+    __slots__ = ("cel", "skipped", "required", "ignore_empty", "float", "double", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "bool", "string", "bytes", "enum", "repeated", "map", "any", "duration", "timestamp")
+    CEL_FIELD_NUMBER: _ClassVar[int]
+    SKIPPED_FIELD_NUMBER: _ClassVar[int]
+    REQUIRED_FIELD_NUMBER: _ClassVar[int]
+    IGNORE_EMPTY_FIELD_NUMBER: _ClassVar[int]
+    FLOAT_FIELD_NUMBER: _ClassVar[int]
+    DOUBLE_FIELD_NUMBER: _ClassVar[int]
+    INT32_FIELD_NUMBER: _ClassVar[int]
+    INT64_FIELD_NUMBER: _ClassVar[int]
+    UINT32_FIELD_NUMBER: _ClassVar[int]
+    UINT64_FIELD_NUMBER: _ClassVar[int]
+    SINT32_FIELD_NUMBER: _ClassVar[int]
+    SINT64_FIELD_NUMBER: _ClassVar[int]
+    FIXED32_FIELD_NUMBER: _ClassVar[int]
+    FIXED64_FIELD_NUMBER: _ClassVar[int]
+    SFIXED32_FIELD_NUMBER: _ClassVar[int]
+    SFIXED64_FIELD_NUMBER: _ClassVar[int]
+    BOOL_FIELD_NUMBER: _ClassVar[int]
+    STRING_FIELD_NUMBER: _ClassVar[int]
+    BYTES_FIELD_NUMBER: _ClassVar[int]
+    ENUM_FIELD_NUMBER: _ClassVar[int]
+    REPEATED_FIELD_NUMBER: _ClassVar[int]
+    MAP_FIELD_NUMBER: _ClassVar[int]
+    ANY_FIELD_NUMBER: _ClassVar[int]
+    DURATION_FIELD_NUMBER: _ClassVar[int]
+    TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
+    cel: _containers.RepeatedCompositeFieldContainer[_expression_pb2.Constraint]
+    skipped: bool
+    required: bool
+    ignore_empty: bool
+    float: FloatRules
+    double: DoubleRules
+    int32: Int32Rules
+    int64: Int64Rules
+    uint32: UInt32Rules
+    uint64: UInt64Rules
+    sint32: SInt32Rules
+    sint64: SInt64Rules
+    fixed32: Fixed32Rules
+    fixed64: Fixed64Rules
+    sfixed32: SFixed32Rules
+    sfixed64: SFixed64Rules
+    bool: BoolRules
+    string: StringRules
+    bytes: BytesRules
+    enum: EnumRules
+    repeated: RepeatedRules
+    map: MapRules
+    any: AnyRules
+    duration: DurationRules
+    timestamp: TimestampRules
+    def __init__(self, cel: _Optional[_Iterable[_Union[_expression_pb2.Constraint, _Mapping]]] = ..., skipped: bool = ..., required: bool = ..., ignore_empty: bool = ..., float: _Optional[_Union[FloatRules, _Mapping]] = ..., double: _Optional[_Union[DoubleRules, _Mapping]] = ..., int32: _Optional[_Union[Int32Rules, _Mapping]] = ..., int64: _Optional[_Union[Int64Rules, _Mapping]] = ..., uint32: _Optional[_Union[UInt32Rules, _Mapping]] = ..., uint64: _Optional[_Union[UInt64Rules, _Mapping]] = ..., sint32: _Optional[_Union[SInt32Rules, _Mapping]] = ..., sint64: _Optional[_Union[SInt64Rules, _Mapping]] = ..., fixed32: _Optional[_Union[Fixed32Rules, _Mapping]] = ..., fixed64: _Optional[_Union[Fixed64Rules, _Mapping]] = ..., sfixed32: _Optional[_Union[SFixed32Rules, _Mapping]] = ..., sfixed64: _Optional[_Union[SFixed64Rules, _Mapping]] = ..., bool: _Optional[_Union[BoolRules, _Mapping]] = ..., string: _Optional[_Union[StringRules, _Mapping]] = ..., bytes: _Optional[_Union[BytesRules, _Mapping]] = ..., enum: _Optional[_Union[EnumRules, _Mapping]] = ..., repeated: _Optional[_Union[RepeatedRules, _Mapping]] = ..., map: _Optional[_Union[MapRules, _Mapping]] = ..., any: _Optional[_Union[AnyRules, _Mapping]] = ..., duration: _Optional[_Union[DurationRules, _Mapping]] = ..., timestamp: _Optional[_Union[TimestampRules, _Mapping]] = ...) -> None: ...
+
+class FloatRules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "finite")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    FINITE_FIELD_NUMBER: _ClassVar[int]
+    const: float
+    lt: float
+    lte: float
+    gt: float
+    gte: float
+    not_in: _containers.RepeatedScalarFieldContainer[float]
+    finite: bool
+    def __init__(self, const: _Optional[float] = ..., lt: _Optional[float] = ..., lte: _Optional[float] = ..., gt: _Optional[float] = ..., gte: _Optional[float] = ..., not_in: _Optional[_Iterable[float]] = ..., finite: bool = ..., **kwargs) -> None: ...
+
+class DoubleRules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in", "finite")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    FINITE_FIELD_NUMBER: _ClassVar[int]
+    const: float
+    lt: float
+    lte: float
+    gt: float
+    gte: float
+    not_in: _containers.RepeatedScalarFieldContainer[float]
+    finite: bool
+    def __init__(self, const: _Optional[float] = ..., lt: _Optional[float] = ..., lte: _Optional[float] = ..., gt: _Optional[float] = ..., gte: _Optional[float] = ..., not_in: _Optional[_Iterable[float]] = ..., finite: bool = ..., **kwargs) -> None: ...
+
+class Int32Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class Int64Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class UInt32Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class UInt64Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class SInt32Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class SInt64Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class Fixed32Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class Fixed64Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class SFixed32Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class SFixed64Rules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    lt: int
+    lte: int
+    gt: int
+    gte: int
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., lt: _Optional[int] = ..., lte: _Optional[int] = ..., gt: _Optional[int] = ..., gte: _Optional[int] = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class BoolRules(_message.Message):
+    __slots__ = ("const",)
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    const: bool
+    def __init__(self, const: bool = ...) -> None: ...
+
+class StringRules(_message.Message):
+    __slots__ = ("const", "len", "min_len", "max_len", "len_bytes", "min_bytes", "max_bytes", "pattern", "prefix", "suffix", "contains", "not_contains", "not_in", "email", "hostname", "ip", "ipv4", "ipv6", "uri", "uri_ref", "address", "uuid", "ip_with_prefixlen", "ipv4_with_prefixlen", "ipv6_with_prefixlen", "ip_prefix", "ipv4_prefix", "ipv6_prefix", "well_known_regex", "strict")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LEN_FIELD_NUMBER: _ClassVar[int]
+    MIN_LEN_FIELD_NUMBER: _ClassVar[int]
+    MAX_LEN_FIELD_NUMBER: _ClassVar[int]
+    LEN_BYTES_FIELD_NUMBER: _ClassVar[int]
+    MIN_BYTES_FIELD_NUMBER: _ClassVar[int]
+    MAX_BYTES_FIELD_NUMBER: _ClassVar[int]
+    PATTERN_FIELD_NUMBER: _ClassVar[int]
+    PREFIX_FIELD_NUMBER: _ClassVar[int]
+    SUFFIX_FIELD_NUMBER: _ClassVar[int]
+    CONTAINS_FIELD_NUMBER: _ClassVar[int]
+    NOT_CONTAINS_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    EMAIL_FIELD_NUMBER: _ClassVar[int]
+    HOSTNAME_FIELD_NUMBER: _ClassVar[int]
+    IP_FIELD_NUMBER: _ClassVar[int]
+    IPV4_FIELD_NUMBER: _ClassVar[int]
+    IPV6_FIELD_NUMBER: _ClassVar[int]
+    URI_FIELD_NUMBER: _ClassVar[int]
+    URI_REF_FIELD_NUMBER: _ClassVar[int]
+    ADDRESS_FIELD_NUMBER: _ClassVar[int]
+    UUID_FIELD_NUMBER: _ClassVar[int]
+    IP_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int]
+    IPV4_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int]
+    IPV6_WITH_PREFIXLEN_FIELD_NUMBER: _ClassVar[int]
+    IP_PREFIX_FIELD_NUMBER: _ClassVar[int]
+    IPV4_PREFIX_FIELD_NUMBER: _ClassVar[int]
+    IPV6_PREFIX_FIELD_NUMBER: _ClassVar[int]
+    WELL_KNOWN_REGEX_FIELD_NUMBER: _ClassVar[int]
+    STRICT_FIELD_NUMBER: _ClassVar[int]
+    const: str
+    len: int
+    min_len: int
+    max_len: int
+    len_bytes: int
+    min_bytes: int
+    max_bytes: int
+    pattern: str
+    prefix: str
+    suffix: str
+    contains: str
+    not_contains: str
+    not_in: _containers.RepeatedScalarFieldContainer[str]
+    email: bool
+    hostname: bool
+    ip: bool
+    ipv4: bool
+    ipv6: bool
+    uri: bool
+    uri_ref: bool
+    address: bool
+    uuid: bool
+    ip_with_prefixlen: bool
+    ipv4_with_prefixlen: bool
+    ipv6_with_prefixlen: bool
+    ip_prefix: bool
+    ipv4_prefix: bool
+    ipv6_prefix: bool
+    well_known_regex: KnownRegex
+    strict: bool
+    def __init__(self, const: _Optional[str] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., len_bytes: _Optional[int] = ..., min_bytes: _Optional[int] = ..., max_bytes: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[str] = ..., suffix: _Optional[str] = ..., contains: _Optional[str] = ..., not_contains: _Optional[str] = ..., not_in: _Optional[_Iterable[str]] = ..., email: bool = ..., hostname: bool = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., uri: bool = ..., uri_ref: bool = ..., address: bool = ..., uuid: bool = ..., ip_with_prefixlen: bool = ..., ipv4_with_prefixlen: bool = ..., ipv6_with_prefixlen: bool = ..., ip_prefix: bool = ..., ipv4_prefix: bool = ..., ipv6_prefix: bool = ..., well_known_regex: _Optional[_Union[KnownRegex, str]] = ..., strict: bool = ..., **kwargs) -> None: ...
+
+class BytesRules(_message.Message):
+    __slots__ = ("const", "len", "min_len", "max_len", "pattern", "prefix", "suffix", "contains", "not_in", "ip", "ipv4", "ipv6")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LEN_FIELD_NUMBER: _ClassVar[int]
+    MIN_LEN_FIELD_NUMBER: _ClassVar[int]
+    MAX_LEN_FIELD_NUMBER: _ClassVar[int]
+    PATTERN_FIELD_NUMBER: _ClassVar[int]
+    PREFIX_FIELD_NUMBER: _ClassVar[int]
+    SUFFIX_FIELD_NUMBER: _ClassVar[int]
+    CONTAINS_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    IP_FIELD_NUMBER: _ClassVar[int]
+    IPV4_FIELD_NUMBER: _ClassVar[int]
+    IPV6_FIELD_NUMBER: _ClassVar[int]
+    const: bytes
+    len: int
+    min_len: int
+    max_len: int
+    pattern: str
+    prefix: bytes
+    suffix: bytes
+    contains: bytes
+    not_in: _containers.RepeatedScalarFieldContainer[bytes]
+    ip: bool
+    ipv4: bool
+    ipv6: bool
+    def __init__(self, const: _Optional[bytes] = ..., len: _Optional[int] = ..., min_len: _Optional[int] = ..., max_len: _Optional[int] = ..., pattern: _Optional[str] = ..., prefix: _Optional[bytes] = ..., suffix: _Optional[bytes] = ..., contains: _Optional[bytes] = ..., not_in: _Optional[_Iterable[bytes]] = ..., ip: bool = ..., ipv4: bool = ..., ipv6: bool = ..., **kwargs) -> None: ...
+
+class EnumRules(_message.Message):
+    __slots__ = ("const", "defined_only", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    DEFINED_ONLY_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: int
+    defined_only: bool
+    not_in: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, const: _Optional[int] = ..., defined_only: bool = ..., not_in: _Optional[_Iterable[int]] = ..., **kwargs) -> None: ...
+
+class RepeatedRules(_message.Message):
+    __slots__ = ("min_items", "max_items", "unique", "items")
+    MIN_ITEMS_FIELD_NUMBER: _ClassVar[int]
+    MAX_ITEMS_FIELD_NUMBER: _ClassVar[int]
+    UNIQUE_FIELD_NUMBER: _ClassVar[int]
+    ITEMS_FIELD_NUMBER: _ClassVar[int]
+    min_items: int
+    max_items: int
+    unique: bool
+    items: FieldConstraints
+    def __init__(self, min_items: _Optional[int] = ..., max_items: _Optional[int] = ..., unique: bool = ..., items: _Optional[_Union[FieldConstraints, _Mapping]] = ...) -> None: ...
+
+class MapRules(_message.Message):
+    __slots__ = ("min_pairs", "max_pairs", "keys", "values")
+    MIN_PAIRS_FIELD_NUMBER: _ClassVar[int]
+    MAX_PAIRS_FIELD_NUMBER: _ClassVar[int]
+    KEYS_FIELD_NUMBER: _ClassVar[int]
+    VALUES_FIELD_NUMBER: _ClassVar[int]
+    min_pairs: int
+    max_pairs: int
+    keys: FieldConstraints
+    values: FieldConstraints
+    def __init__(self, min_pairs: _Optional[int] = ..., max_pairs: _Optional[int] = ..., keys: _Optional[_Union[FieldConstraints, _Mapping]] = ..., values: _Optional[_Union[FieldConstraints, _Mapping]] = ...) -> None: ...
+
+class AnyRules(_message.Message):
+    __slots__ = ("not_in",)
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    not_in: _containers.RepeatedScalarFieldContainer[str]
+    def __init__(self, not_in: _Optional[_Iterable[str]] = ..., **kwargs) -> None: ...
+
+class DurationRules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "gt", "gte", "not_in")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    IN_FIELD_NUMBER: _ClassVar[int]
+    NOT_IN_FIELD_NUMBER: _ClassVar[int]
+    const: _duration_pb2.Duration
+    lt: _duration_pb2.Duration
+    lte: _duration_pb2.Duration
+    gt: _duration_pb2.Duration
+    gte: _duration_pb2.Duration
+    not_in: _containers.RepeatedCompositeFieldContainer[_duration_pb2.Duration]
+    def __init__(self, const: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., lt: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., lte: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., gt: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., gte: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ..., not_in: _Optional[_Iterable[_Union[_duration_pb2.Duration, _Mapping]]] = ..., **kwargs) -> None: ...
+
+class TimestampRules(_message.Message):
+    __slots__ = ("const", "lt", "lte", "lt_now", "gt", "gte", "gt_now", "within")
+    CONST_FIELD_NUMBER: _ClassVar[int]
+    LT_FIELD_NUMBER: _ClassVar[int]
+    LTE_FIELD_NUMBER: _ClassVar[int]
+    LT_NOW_FIELD_NUMBER: _ClassVar[int]
+    GT_FIELD_NUMBER: _ClassVar[int]
+    GTE_FIELD_NUMBER: _ClassVar[int]
+    GT_NOW_FIELD_NUMBER: _ClassVar[int]
+    WITHIN_FIELD_NUMBER: _ClassVar[int]
+    const: _timestamp_pb2.Timestamp
+    lt: _timestamp_pb2.Timestamp
+    lte: _timestamp_pb2.Timestamp
+    lt_now: bool
+    gt: _timestamp_pb2.Timestamp
+    gte: _timestamp_pb2.Timestamp
+    gt_now: bool
+    within: _duration_pb2.Duration
+    def __init__(self, const: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lt: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lte: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., lt_now: bool = ..., gt: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., gte: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., gt_now: bool = ..., within: _Optional[_Union[_duration_pb2.Duration, _Mapping]] = ...) -> None: ...
diff --git a/gen/python/buf/validate/validate_pb2_grpc.py b/gen/python/buf/validate/validate_pb2_grpc.py
new file mode 100644
index 0000000000000000000000000000000000000000..2daafffebfc817aefe8fcb96eaec25e65b3903e8
--- /dev/null
+++ b/gen/python/buf/validate/validate_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+