0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Go】gRPCのprotoc-gen-validateでenumの必須&値チェックを行いたい

Posted at

概要

以前に【Go】protoc-gen-validateを含めたprotoファイルでコード出力時にprotoc-gen-go: invalid Go import pathが発生の記事で紹介した通り、protoc-gen-validateはprotoファイルでバリデートの定義を設定できるライブラリです。
gRPCではenumも型として使用できるのですが、今回はenumのバリデートを行う際のメモです。

前提

  • 使用したprotoc-gen-validateのバージョンはv1.0.2になります。

課題

protoc-gen-validateのドキュメントのEnumsに、設定できるバリデーションが記載されています。
これに従ってdefined_onlyの設定を行えば良いかとなると、今度はgRPCのEnumを必須チェックしたいの記事にある通り、null値の場合は自動で「0」値が設定されるので必須かどうかのチェックが上手く行えません。なお、proto3の仕様だとEnumerationsのドキュメントにある通り、値が「0」始まりからでないとenumが設定できません。

対応案

対応として以下の方針が案として挙げられます。

  • 「0」の値はUNKNOWNとして、異常値として扱う。
  • 「0」の値はnot_inの設定でバリデーションで弾く。
  • 「0」 以外の値は、defined_onlyでチェック。

設定サンプル

上記方針で、リクエストのenum部分の設定について、以下の通り設定のサンプルを記載します。

enum AuthMethod {
    UNKNOWN = 0;
    GOOGLE = 1;
    EMAIL = 2;
  }

message SampleRequest {
    AuthMethod authMethod = 1 [(validate.rules).enum = {defined_only: true, not_in: [0]}];
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?