spikard_cli/codegen/openrpc/
mod.rs1pub mod generators;
10pub mod spec_parser;
11
12pub use generators::{
13 ElixirOpenRpcGenerator, OpenRpcGenerator, PhpOpenRpcGenerator, PythonOpenRpcGenerator, RubyOpenRpcGenerator,
14 RustOpenRpcGenerator, TypeScriptOpenRpcGenerator,
15};
16pub use spec_parser::parse_openrpc_schema;
17
18use anyhow::Result;
19use spec_parser::OpenRpcSpec;
20
21pub fn generate_python_handler_app(spec: &OpenRpcSpec) -> Result<String> {
23 let generator = PythonOpenRpcGenerator;
24 generator.generate_handler_app(spec)
25}
26
27pub fn generate_typescript_handler_app(spec: &OpenRpcSpec) -> Result<String> {
29 let generator = TypeScriptOpenRpcGenerator;
30 generator.generate_handler_app(spec)
31}
32
33pub fn generate_ruby_handler_app(spec: &OpenRpcSpec) -> Result<String> {
35 let generator = RubyOpenRpcGenerator;
36 generator.generate_handler_app(spec)
37}
38
39pub fn generate_rust_handler_app(spec: &OpenRpcSpec) -> Result<String> {
41 let generator = RustOpenRpcGenerator;
42 generator.generate_handler_app(spec)
43}
44
45pub fn generate_php_handler_app(spec: &OpenRpcSpec) -> Result<String> {
47 let generator = PhpOpenRpcGenerator;
48 generator.generate_handler_app(spec)
49}
50
51pub fn generate_elixir_handler_app(spec: &OpenRpcSpec) -> Result<String> {
53 let generator = ElixirOpenRpcGenerator;
54 generator.generate_handler_app(spec)
55}
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60
61 #[test]
62 fn test_openrpc_module_exports() {
63 let _: fn(&OpenRpcSpec) -> Result<String> = generate_python_handler_app;
64 let _: fn(&OpenRpcSpec) -> Result<String> = generate_typescript_handler_app;
65 let _: fn(&OpenRpcSpec) -> Result<String> = generate_rust_handler_app;
66 let _: fn(&OpenRpcSpec) -> Result<String> = generate_ruby_handler_app;
67 let _: fn(&OpenRpcSpec) -> Result<String> = generate_php_handler_app;
68 let _: fn(&OpenRpcSpec) -> Result<String> = generate_elixir_handler_app;
69 }
70
71 #[test]
72 fn test_openrpc_module_can_parse_and_generate() {
73 let schema_path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
74 .join("../../testing_data/schemas/user-api.openrpc.json");
75 let spec = parse_openrpc_schema(&schema_path).expect("OpenRPC schema should parse");
76
77 let ts = generate_typescript_handler_app(&spec).expect("TypeScript scaffold should generate");
78 assert!(ts.contains("handleJsonRpcCall"));
79 }
80}