🐕

enum値の変換のためにシンプルな双方向マップライブラリを作成した

2024/03/23に公開

経緯

enumをOAS(もしくはproto)とドメイン層で同じものを二つ定義したときに、変換処理を双方向に書く必要があり面倒でした。

例えばOASでは性別がintのenumで定義されていて、それをドメイン層で定義した性別のenumに変換するような時です。

APIを作成するときに、リクエストパラメーターをドメインのenumに変換し、逆にレスポンスを返すときに、ドメインのenumをOASのenumに変換する関数(またはmap)を定義する必要がありました。

作成物

https://github.com/ryohma0510/bimap

このように一度対応表を作成すれば、順変換と逆変換ができるようになり、地味に便利です

var genderMap = lo.Must(bimap.NewFromMap(map[GenderInt]GenderStr{
  GenderIntMale: GenderStrMale,
  GenderIntFemale: GenderStrFemale,
}))

// 順変換
strGender, err := genderMap.Get(genderInt)

// 逆変換
genderStr, err := genderMap.InverseGet(valueFromDB)

Discussion