Line data Source code
1 : // Package errors は go-playground/validator/v10 の ValidationErrors を
2 : // API レスポンスの details 形式(フィールドごとのタグ/パラメータ/値)へ変換する
3 : // ユーティリティを提供します。
4 : package errors
5 :
6 : import (
7 : "errors"
8 :
9 : v10 "github.com/go-playground/validator/v10"
10 : )
11 :
12 : // ToDetails は、バリデーションエラーを API レスポンスの details 形式に変換します。
13 : // 各フィールドに対応するタグ名(tag)、パラメータ(param)、入力値(value)を含むマップを返します。
14 : // ValidationErrors でない場合は、エラーメッセージを単一要素のマップ {"error": "..."} として返します。
15 1 : func ToDetails(err error) map[string]any {
16 1 : var verr v10.ValidationErrors
17 1 : if !errors.As(err, &verr) {
18 0 : return map[string]any{"error": err.Error()}
19 0 : }
20 1 : out := make(map[string]any, len(verr))
21 2 : for _, fe := range verr {
22 1 : // fe.Field() は構造体のフィールド名(JSON名にしたければタグから引く実装を足す)
23 1 : out[fe.Field()] = map[string]any{
24 1 : "tag": fe.Tag(), // e.g. "required", "max", "jp_postal"
25 1 : "param": fe.Param(), // e.g. "160"
26 1 : "value": fe.Value(),
27 1 : }
28 1 : }
29 1 : return out
30 : }
|