Generate type-checked Rust from your SQL
[!NOTE] Cornucopia 1.0 merged the Clorinde fork back into the original project, adopting its rewritten codegen, expanded capabilities, and accumulated fixes. Huge thanks to @beanpuppy and the Clorinde contributors for their work. If you are upgrading from Cornucopia
0.9.x, see the migration guide.
Cornucopia generates type-checked Rust interfaces from PostgreSQL queries, with an emphasis on compile-time safety and high performance. It works by preparing your queries against an actual database and then running an extensive validation suite on them. Rust code is then generated into a separate crate, which can be imported and used in your project.
The basic premise is thus to:
You can learn more about Cornucopia by reading the book, or you can get a quickstart by looking at the examples.
rust-postgres code.Install with:
cargo install cornucopia
Write your PostgreSQL queries with annotations and named parameters:
-- queries/authors.sql
--! insert_author
INSERT INTO authors
(first_name, last_name, country)
VALUES
(:first_name, :last_name, :country);
--! authors
SELECT first_name, last_name, country FROM authors;
Generate the crate with cornucopia, then you can import it into your project after adding it to your Cargo.toml:
cornucopia = { path = "./cornucopia" }
And use the generated crate in your code:
use cornucopia::queries::authors::{authors, insert_author};
insert_author()
.bind(&mut client, &"Agatha", &"Christie", &"England")
.unwrap();
let all_authors = authors().bind(&mut client).all().unwrap();
for author in all_authors {
println!(
"[{}] {}, {}",
author.country,
author.last_name.to_uppercase(),
author.first_name,
);
}
For more examples go to the examples directory, or head over to the book to learn more.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
$ claude mcp add cornucopia \
-- python -m otcore.mcp_server <graph>