Skip to main content

sokuto_cli/commands/
export_openapi.rs

1//! # OpenAPI 仕様書エクスポートコマンド
2//!
3//! TypeSafe AI Jev 互換 HTTP API の OpenAPI 3.1 仕様書を
4//! 静的 JSON 文字列として生成し、ファイルまたは標準出力へ出力する。
5
6use std::fs;
7use std::path::PathBuf;
8
9use sokuto_server::openapi::export_openapi_json;
10
11/// OpenAPI 3.1 仕様書エクスポートコマンドを実行する。
12///
13/// # 引数
14/// - `output`: 出力先ファイルパス。None の場合は標準出力に出力する。
15pub fn run_export_openapi(
16    output: Option<PathBuf>,
17) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
18    let json_str = export_openapi_json();
19
20    if let Some(path) = output {
21        if let Some(parent) = path.parent() {
22            fs::create_dir_all(parent)?;
23        }
24        fs::write(&path, &json_str)?;
25        eprintln!("OpenAPI 3.1 仕様書を正常に出力しました: {}", path.display());
26    } else {
27        println!("{json_str}");
28    }
29
30    Ok(())
31}