1 unstable release
0.0.1 | Dec 3, 2023 |
---|
#38 in #convex
22KB
370 lines
Convex TypeGen
The ConvexDB Type Generator is a tool for generating the convex schema.ts into rust types. I created this project because for backend work, I love rust more than typescript, and I wanted to be able to use the convex schema in rust.
So I hope anyone using this library find it helpful. Im always open to adding more features but for now, the main goal is
to have type-checking in query
and mutations
on the backend. Due to complexity's, I don't have argument parsing yet for
typescript functions, but I hope to add them in the future.
Install
cargo install convex-typegen
Edit your Cargo.toml file
After installing, you need to set the library as a build-dependency in your Cargo.toml
file.
[build-dependencies]
convex-typegen = "0.0.1"
Change to the latest version if needed
Create a build script
Create a `build.rs`` file in your project root with the following contents:
use convex_typegen::generate_convex_types;
fn main()
{
println!("cargo:rerun-if-changed=convex/schema.ts");
let config = convex_typegen::Configuration {
convex_schema_path: String::from("./convex/schema.ts"),
code_gen_path: String::from("./src/schema.rs"),
};
match generate_convex_types(Some(&config)) {
Ok(_) => {}
Err(e) => {
panic!("Error: {:?}", e);
}
}
println!("Build.rs completed successfully!");
}
This build.rs
file will generate the schema.rs
file in the src
directory. You can change the path to whatever you want.
Edit your main.rs file
After your schema file is generated, you need to let your main.rs
file know about it. Add the following line to your main.rs file:
mod schema;
Now your all set! Your convex query
and mutations
will be type checked in rust!
Example Query
client.query(schema::Users::FindAll.to_string(), maplit::btreemap! {}).await;
Todo
- [] support function argument parsing/type checking (maybe)
Dependencies
~6–15MB
~186K SLoC