🐛
enum型のフィールドにdefaultを使うとopenapi-generatorのバグでDartクライアントを生成できない
環境
npm -v "@openapitools/openapi-generator-cli"
> 10.2.4
fvm flutter --version
Flutter 3.13.8 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 6c4930c4ac (3 months ago) • 2023-10-18 10:57:55 -0500
Engine • revision 767d8c75e8
Tools • Dart 3.1.4 • DevTools 2.25.0
概要
FastAPIからOASを生成
原因となったモデルのコード
class UserGameHistoryBase(TimestampMixin, SQLModel):
status: UserGameStatusEnum = Field(
UserGameStatusEnum.WAITING,
description="ユーザーのゲームの状態",
)
生成したOAS
status:
allOf:
- $ref: '#/components/schemas/UserGameStatusEnum'
description: "\u30E6\u30FC\u30B6\u30FC\u306E\u30B2\u30FC\u30E0\u306E\u72B6\
\u614B"
default: 1 # <- ここがダメ
OASからDart Clientを生成したところビルドエラー
npx @openapitools/openapi-generator-cli generate \
-i docs/openapi/openapi.yaml \
-g dart-dio \
-o frontend/api \
--global-property models,modelDocs=false,modelTests=false,apis,apiDocs=false,apiTests=false,supportingFiles
fvm flutter clean && fvm flutter pub get && \
fvm flutter pub run build_runner build --delete-conflicting-outputs
Expected an identifier
簡素なエラーメッセージで原因を特定するのに時間がかかりました。
This builder requires Dart inputs without syntax errors.
However, package:openapi/src/model/xxx.dart (or an existing part) contains the following errors.
xxx.dart:45:24: Expected an identifier.
Try fixing the errors and re-running the build.
[INFO] Running build completed, took 4.3s
[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 39ms
[SEVERE] Failed after 4.4s
make: *** [gen-oas-client] Error 1
openapi-generatorのバグのようです。
修正後
class UserGameHistoryBase(TimestampMixin, SQLModel):
status: UserGameStatusEnum = Field(
...,
description="ユーザーのゲームの状態",
)
生成したOAS
status:
allOf:
- $ref: '#/components/schemas/UserGameStatusEnum'
description: "\u30E6\u30FC\u30B6\u30FC\u306E\u30B2\u30FC\u30E0\u306E\u72B6\
\u614B"
$ref
を使ったenum型フィールドに default
を指定するとバグになるようです。
Discussion