Slide 17
Slide 17 text
● コード生成での分岐が多くテンプレートを使いづらいので1行1行出力
17
定義ファイルから prizm のコードを自動生成する
// ここらへんでメッセージを受ける interface の定義をしている
// interface に定義されるメッセージハンドラの定義部分
for i := 0; i < methods.Len(); i++ {
m := methods.Get(i)
methodName := gengo.GetMethodName(m, false)
requestTypeName := /* 生成処理 */
responseTypeName := /* 生成処理 */
// オプションなどによる分岐が非常に多いのでテンプレートベースのアプローチが困難
if prizmgenproto.IsNoneResponseRPC(m) {
g.e.EmitLine("On%s(ctx context.Context, request *%s, player
prizm.Player)",
methodName, requestTypeName)
} else {
g.e.EmitLine("On%s(ctx context.Context, request *%s, player prizm.Player)
(*%s, error)",
methodName, requestTypeName, responseTypeName)
}
}