はじめに
趣味のプログラミングでrustをつかったwebサーバーを作成しています🦀
その際、utoipaを使ってopenapiのスキーマ出力 ⇒ openapi-generatorによるTSクライアント出力をしていたのですが、
deployするときにTSクライアントのbaseUrlを変えたかったので、openapiのserversスキーマ指定する方法をとることにしました
utoipa::openapi::Server
を使用するとよいです
サンプル
// ドキュメントのオブジェクト生成
let mut doc = ApiDoc::openapi();
// 環境変数から","区切りのURL取得
std::env::var("SERVERS").ok().map(|servers| {
doc.servers = Some(
servers
.split(',')
+ .map(|x| utoipa::openapi::Server::new(x))
.collect()
);
});
utoipa::openapi::Server::new()
を使用して生成しないとコンパイルエラーになります
new()を使用しないといけないのに気付かず詰まった
#[non_exhaustive]
が設定されているので
cannot create non-exhaustive struct using struct expression
というエラーが、、
cargo check
の実行結果によると
For more information about this error, try 'rustc --explain E0639'.
ということなので、実行してみると、new()使ってみなよとあったので無事解決した運びでした
rustcのexplainは親切でわかりやすいですね!
ちなみに…マクロを使ったserversの指定ができるのかよくわからないんですよね、、
あえて目をつむります🙈