convex-typegen

Crates.ioconvex-typegen
lib.rsconvex-typegen
version0.0.1
sourcesrc
created_at2023-12-03 20:23:26.033764
updated_at2023-12-03 20:23:26.033764
descriptionA tool for generating Rust types from ConvexDB schema files
homepage
repositoryhttps://github.com/ThatGuyJamal/convex-typegen
max_upload_size
id1057065
size130,720
CodingWithJamal (ThatGuyJamal)

documentation

README

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)
Commit count: 56

cargo fmt