I've extended the functionality of (OMG DDS)IDL and written a code generator. It can generate C/C++/Rust/Rust HTTP/Rust JsonRPC/OpenAPI/OpenRPC code from IDL.
Of course, the Rust HTTP/Rust JsonRPC/OpenAPI/OpenRPC generation is currently more mature.
I previously used utoipa to generate OpenAPI from code, but I quickly grew tired of the endless boilerplate code. So I made this!!!
Simply put, you use IDL to describe an HTTP service, and I'll generate an interface, a Service. If you implement an interface for a given interface, I can generate routes for you. It works like this...
```rust
use xidlc_examples::hello_world::HelloWorld;
use xidlc_examples::hello_world::HelloWorldSayHelloRequest;
use xidlc_examples::hello_world::HelloWorldServer;
let addr = "127.0.0.1:3000";
println!("axum hello_world server listening on {addr}");
xidl_rust_axum::Server::builder()
.with_service(HelloWorldServer::new(HelloWorldImpl))
.serve(addr)
.await?;
Ok(())
Besides that, I've used HTTP/OpenAPI in my project, and I think it currently meets my overall needs.
Furthermore, xidlc provides simple interfaces for extension. I find xidlc's design truly fascinating.
I've added some snapshot tests to avoid regression issues.
I used Google Translate to translate this post, so I'm not sure if it conforms to English grammar. I sincerely hope to receive any feedback, thank you.
I've extended the functionality of (OMG DDS)IDL and written a code generator. It can generate C/C++/Rust/Rust HTTP/Rust JsonRPC/OpenAPI/OpenRPC code from IDL.
Of course, the Rust HTTP/Rust JsonRPC/OpenAPI/OpenRPC generation is currently more mature.
I previously used utoipa to generate OpenAPI from code, but I quickly grew tired of the endless boilerplate code. So I made this!!!
Simply put, you use IDL to describe an HTTP service, and I'll generate an interface, a Service. If you implement an interface for a given interface, I can generate routes for you. It works like this...
```rust
use xidlc_examples::hello_world::HelloWorld;
use xidlc_examples::hello_world::HelloWorldSayHelloRequest;
use xidlc_examples::hello_world::HelloWorldServer;
struct HelloWorldImpl;
#[async_trait::async_trait]
impl HelloWorld for HelloWorldImpl {
xidl_rust_axum::Request<HelloWorldSayHelloRequest>, }#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
} ```Currently, support for streaming (HTTP/JsonRPC) is still quite basic. It's defined at https://github.com/xidl/xidl/tree/master/docs/rfc
Besides that, I've used HTTP/OpenAPI in my project, and I think it currently meets my overall needs.
Furthermore, xidlc provides simple interfaces for extension. I find xidlc's design truly fascinating.
I've added some snapshot tests to avoid regression issues.
I used Google Translate to translate this post, so I'm not sure if it conforms to English grammar. I sincerely hope to receive any feedback, thank you.