usage/sdk/typescript/
mod.rs1use std::path::PathBuf;
2
3use crate::sdk::{SdkFile, SdkOptions, SdkOutput};
4use crate::Spec;
5
6mod runtime;
7mod types;
8mod wrappers;
9
10pub fn generate(spec: &Spec, opts: &SdkOptions) -> SdkOutput {
11 let package_name = opts
12 .package_name
13 .clone()
14 .unwrap_or_else(|| spec.bin.clone());
15
16 SdkOutput {
17 files: vec![
18 SdkFile {
19 path: PathBuf::from("types.ts"),
20 content: types::render(spec, &package_name, &opts.source_file),
21 },
22 SdkFile {
23 path: PathBuf::from("client.ts"),
24 content: wrappers::render(spec, &package_name, &opts.source_file),
25 },
26 SdkFile {
27 path: PathBuf::from("runtime.ts"),
28 content: runtime::RUNTIME_TS.to_string(),
29 },
30 SdkFile {
31 path: PathBuf::from("index.ts"),
32 content: render_index(&package_name),
33 },
34 ],
35 }
36}
37
38fn render_index(package_name: &str) -> String {
39 let class_name = heck::AsPascalCase(package_name).to_string();
40 format!("export {{ {class_name} }} from \"./client\";\nexport {{ CliResult, CliError }} from \"./runtime\";\nexport * from \"./types\";\n")
41}