3 releases

new 0.10.2 Jan 7, 2025
0.10.1 Jan 6, 2025
0.10.0 Jan 6, 2025

#252 in Database interfaces

Download history 296/week @ 2025-01-02

296 downloads per month

MIT/Apache

165KB
4.5K SLoC

cool hat

Clorinde

Clorinde generates type-checked Rust interfaces from PostgreSQL queries, with an emphasis on compile-time safety and high performance. It is a fork of Cornucopia that enhances the original with an improved architecture and expanded capabilities.

Key Features

Building on Cornucopia's foundation:

  • SQL-first approach with powerful query validation
  • Sync and async driver support with optional connection pooling
  • Non-allocating row mapping
  • Available as both a library and CLI tool
  • Native rust-postgres performance
  • Complete support for custom PostgreSQL types (composites, domains, and enums)
  • One-dimensional array handling for all supported types
  • Granular type nullity control

Clorinde adds:

  • Crate-based code generation architecture
  • Full wasm compatibility
  • Custom Rust type mapping

Installation

Install with:

cargo install clorinde

Quick Example

Write your PostgreSQL queries with annotations and named parameters:

-- queries/authors.sql

--! authors
SELECT first_name, last_name, country FROM Authors;

--! insert_author
INSERT INTO Authors(first_name, last_name, country)
VALUES (:first_name, :last_name, :country)

Generate the crate with clorinde, then you can import it into your project after adding it to your Cargo.toml:

clorinde = { path = "./clorinde" }
use clorinde::queries{authors, insert_author};

insert_author.bind(&client, "Agatha", "Christie", "England");

let all_authors = authors().bind(&client).all();

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.

MSRV

This crate uses Rust 2021 edition, which requires at least version 1.62.1.

Similar Libraries

  • Cornucopia - The original project Clorinde is forked from
  • sqlc (Go) - Generate type-safe code from SQL
  • Kanel (TypeScript) - Generate TypeScript types from Postgres
  • jOOQ (Java) - Generate typesafe SQL from your database schema

License

Licensed under either of

Contribution

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.

Dependencies

~16–28MB
~454K SLoC