diff --git a/Cargo.lock b/Cargo.lock index 2603549..216aee2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -134,7 +134,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -235,7 +235,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.75", + "syn 2.0.76", "which", ] @@ -280,9 +280,9 @@ checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "cc" -version = "1.1.13" +version = "1.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" +checksum = "50d2eb3cd3d1bf4529e31c215ee6f93ec5a3d536d9f578f93d9d33ee19562932" dependencies = [ "jobserver", "libc", @@ -467,7 +467,7 @@ checksum = "1acdf1a33cf6e5f49b0c29af53ffc6ace88fc854698224e9f51ff64b23e632d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", "trybuild", ] @@ -537,7 +537,7 @@ dependencies = [ [[package]] name = "edgedb_codegen" -version = "0.0.0" +version = "0.1.0" dependencies = [ "assert2", "bigdecimal", @@ -567,7 +567,7 @@ dependencies = [ [[package]] name = "edgedb_codegen_core" -version = "0.0.0" +version = "0.1.0" dependencies = [ "check_keyword", "edgedb-errors", @@ -577,7 +577,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", "thiserror", "tokio", "typed-builder", @@ -585,12 +585,12 @@ dependencies = [ [[package]] name = "edgedb_codegen_macros" -version = "0.0.0" +version = "0.1.0" dependencies = [ "edgedb_codegen_core", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -646,9 +646,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "form_urlencoded" @@ -721,7 +721,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -1191,7 +1191,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -1235,7 +1235,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -1270,12 +1270,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "a909e6e8053fa1a5ad670f5816c7d93029ee1fa8898718490544a6b0d5d38b3e" dependencies = [ "proc-macro2", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -1298,9 +1298,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1448,7 +1448,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.75", + "syn 2.0.76", "unicode-ident", ] @@ -1606,9 +1606,9 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.208" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] @@ -1624,20 +1624,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.208" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] name = "serde_json" -version = "1.0.125" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" dependencies = [ "itoa", "memchr", @@ -1739,7 +1739,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -1777,9 +1777,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.75" +version = "2.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" +checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" dependencies = [ "proc-macro2", "quote", @@ -1838,7 +1838,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -1858,7 +1858,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -1969,7 +1969,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -2107,7 +2107,7 @@ checksum = "560b82d656506509d43abe30e0ba64c56b1953ab3d4fe7ba5902747a7a3cedd5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -2215,7 +2215,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", "wasm-bindgen-shared", ] @@ -2237,7 +2237,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2509,7 +2509,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] [[package]] @@ -2529,5 +2529,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.75", + "syn 2.0.76", ] diff --git a/Cargo.toml b/Cargo.toml index e3f6c81..3bc4584 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["crates/*"] resolver = "2" [workspace.package] -version = "0.0.0" +version = "0.1.0" authors = ["Ifiok Jr. "] edition = "2021" homepage = "https://edgedb.com" @@ -11,6 +11,47 @@ license = "Unlicense" repository = "https://github.com/ifiokjr/edgedb_codegen" rust-version = "1.71.0" +[workspace.dependencies] +assert2 = "0.3" +bigdecimal = "0.4" +bytes = "1" +check_keyword = "0.3" +chrono = "0.4" +document-features = "0.2" +edgedb-derive = "0.5" +edgedb-errors = "0.4" +edgedb-protocol = "0.6" +edgedb-tokio = "0.5.1" +heck = "0.5" +insta = "1" +log = "0.4" +num-bigint = "0.4" +num-traits = "0.2" +proc-macro2 = "1" +quote = "1" +rstest = "0.22" +rustversion = "1" +serde = "1" +serde_bytes = "0.11" +syn = "2" +test-log = "0.2" +thiserror = "1" +tokio = "1" +trybuild = "1" +typed-builder = "0.20" +uuid = "1" + +# crates +edgedb_codegen = { path = "./crates/edgedb_codegen", version = "0.1.0" } +edgedb_codegen_core = { path = "./crates/edgedb_codegen_core", version = "0.1.0" } +edgedb_codegen_macros = { path = "./crates/edgedb_codegen_macros", version = "0.1.0" } + +[workspace.metadata.bin] +cargo-insta = { version = "1.39.0" } +cargo-llvm-cov = { version = "0.6.10" } +cargo-mutants = { version = "24.7.0" } +cargo-nextest = { version = "0.9.72" } + [workspace.lints.rust] # Group lints rust_2021_compatibility = { level = "warn", priority = -1 } @@ -53,44 +94,3 @@ tabs-in-doc-comments = "allow" too_many_lines = "allow" wildcard_dependencies = "deny" wildcard_imports = "allow" - -[workspace.dependencies] -assert2 = "0.3" -bigdecimal = "0.4" -bytes = "1" -check_keyword = "0.3" -chrono = "0.4" -document-features = "0.2" -edgedb-derive = "0.5" -edgedb-errors = "0.4" -edgedb-protocol = "0.6" -edgedb-tokio = "0.5.1" -heck = "0.5" -insta = "1" -log = "0.4" -num-bigint = "0.4" -num-traits = "0.2" -proc-macro2 = "1" -quote = "1" -rstest = "0.22" -rustversion = "1" -serde = "1" -serde_bytes = "0.11" -syn = "2" -test-log = "0.2" -thiserror = "1" -tokio = "1" -trybuild = "1" -typed-builder = "0.20" -uuid = "1" - -# crates -edgedb_codegen = { path = "./crates/edgedb_codegen", version = "0.0.0" } -edgedb_codegen_core = { path = "./crates/edgedb_codegen_core", version = "0.0.0" } -edgedb_codegen_macros = { path = "./crates/edgedb_codegen_macros", version = "0.0.0" } - -[workspace.metadata.bin] -cargo-insta = { version = "1.39.0" } -cargo-llvm-cov = { version = "0.6.10" } -cargo-mutants = { version = "24.7.0" } -cargo-nextest = { version = "0.9.72" } diff --git a/crates/edgedb_codegen/Cargo.toml b/crates/edgedb_codegen/Cargo.toml index 4977e90..7986ae6 100644 --- a/crates/edgedb_codegen/Cargo.toml +++ b/crates/edgedb_codegen/Cargo.toml @@ -1,8 +1,5 @@ [package] name = "edgedb_codegen" -readme = "readme.md" -categories = ["database"] -keywords = ["edgedb", "database", "typesafe", "checked", "macros"] version = { workspace = true } authors = { workspace = true } edition = { workspace = true } @@ -10,6 +7,9 @@ homepage = { workspace = true } license = { workspace = true } repository = { workspace = true } rust-version = { workspace = true } +readme = "readme.md" +categories = ["database"] +keywords = ["edgedb", "database", "typesafe", "checked", "macros"] description = "Generate fully typed rust code from your EdgeDB schema and inline queries." [dependencies] @@ -40,13 +40,13 @@ test-log = { workspace = true, features = ["log", "trace"] } tokio = { workspace = true, features = ["time", "test-util", "fs"] } trybuild = { workspace = true } -[lints] -workspace = true - [features] #! ### Default -#! By default all types are included. + +#! By default all additional types are included. + +## The default feature is `with_all`. default = ["with_all"] #! ### Types @@ -70,6 +70,8 @@ with_bigdecimal = [ ## Use the `chrono` crate for all dates. with_chrono = ["edgedb_codegen_macros/with_chrono", "dep:chrono", "edgedb-protocol/with-chrono"] + +## Include all additional types. This is included by default. Use `default-features = false` to disable. with_all = [ "edgedb_codegen_macros/with_all", "with_bigint", @@ -78,6 +80,8 @@ with_all = [ "edgedb-protocol/all-types", ] +#! ### Behavior + ## Enable serde for the generated code. serde = [ "edgedb_codegen_macros/serde", @@ -88,7 +92,10 @@ serde = [ "chrono/serde", ] -## This turns on the `query` and `transaction` methods and anything that relies on `edgedb-tokio`. +## Turns on the `query` and `transaction` methods and anything that relies on `edgedb-tokio`. ## The reason to seperate this feature is to enable usage of this macro in browser environments ## where `edgedb-tokio` is not available. query = ["edgedb_codegen_macros/query", "dep:edgedb-tokio"] + +[lints] +workspace = true diff --git a/crates/edgedb_codegen/readme.md b/crates/edgedb_codegen/readme.md index c390194..2eaa8b4 100644 --- a/crates/edgedb_codegen/readme.md +++ b/crates/edgedb_codegen/readme.md @@ -1,5 +1,7 @@ # `edgedb_codegen` +
+ > Generate fully typed rust code from your EdgeDB schema and inline queries. [![Crate][crate-image]][crate-link] [![Docs][docs-image]][docs-link] [![Status][ci-status-image]][ci-status-link] [![Unlicense][unlicense-image]][unlicense-link] @@ -50,7 +52,58 @@ async fn main() -> Result<(), Error> { } ``` -This macro will generate the following code: +The macro above generates the following code: + +```rust +pub mod simple { + use ::edgedb_codegen::exports as e; + #[doc = r" Execute the desired query."] + #[cfg(feature = "query")] + pub async fn query( + client: &e::edgedb_tokio::Client, + props: &Input, + ) -> core::result::Result { + client.query_required_single(QUERY, props).await + } + #[doc = r" Compose the query as part of a larger transaction."] + #[cfg(feature = "query")] + pub async fn transaction( + conn: &mut e::edgedb_tokio::Transaction, + props: &Input, + ) -> core::result::Result { + conn.query_required_single(QUERY, props).await + } + #[derive(Clone, Debug, e :: typed_builder :: TypedBuilder)] + #[cfg_attr(feature = "serde", derive(e::serde::Serialize, e::serde::Deserialize))] + #[cfg_attr(feature = "query", derive(e::edgedb_derive::Queryable))] + pub struct Input { + #[builder(setter(into))] + pub custom: String, + } + impl e::edgedb_protocol::query_arg::QueryArgs for Input { + fn encode( + &self, + encoder: &mut e::edgedb_protocol::query_arg::Encoder, + ) -> core::result::Result<(), e::edgedb_errors::Error> { + let map = e::edgedb_protocol::named_args! { "custom" => self . custom . clone () , }; + map.encode(encoder) + } + } + #[derive(Clone, Debug, e :: typed_builder :: TypedBuilder)] + #[cfg_attr(feature = "serde", derive(e::serde::Serialize, e::serde::Deserialize))] + #[cfg_attr(feature = "query", derive(e::edgedb_derive::Queryable))] + pub struct Output { + #[builder(setter(into))] + pub hello: String, + #[builder(setter(into))] + pub custom: String, + } + #[doc = r" The original query string provided to the macro. Can be reused in your codebase."] + pub const QUERY: &str = "select {hello := \"world\", custom := $custom }"; +} +``` + +### Query Files (Optional) ### Query Files diff --git a/crates/edgedb_codegen_core/Cargo.toml b/crates/edgedb_codegen_core/Cargo.toml index e3739cd..c463b9a 100644 --- a/crates/edgedb_codegen_core/Cargo.toml +++ b/crates/edgedb_codegen_core/Cargo.toml @@ -1,12 +1,16 @@ [package] name = "edgedb_codegen_core" -version.workspace = true -authors.workspace = true -edition.workspace = true -homepage.workspace = true -license.workspace = true -repository.workspace = true -rust-version.workspace = true +version = { workspace = true } +authors = { workspace = true } +edition = { workspace = true } +homepage = { workspace = true } +license = { workspace = true } +repository = { workspace = true } +rust-version = { workspace = true } +readme = "readme.md" +categories = ["database"] +keywords = ["edgedb", "database", "typesafe", "checked", "macros"] +description = "Utilities for codegen in the `edgedb_codegen` crate." [dependencies] check_keyword = { workspace = true } @@ -22,11 +26,11 @@ thiserror = { workspace = true } tokio = { workspace = true, features = ["macros", "rt-multi-thread", "process"] } typed-builder = { workspace = true } -[lints] -workspace = true - [features] with_bigint = [] with_bigdecimal = [] with_chrono = [] with_all = ["with_bigint", "with_bigdecimal", "with_chrono"] + +[lints] +workspace = true diff --git a/crates/edgedb_codegen_core/readme.md b/crates/edgedb_codegen_core/readme.md index f4b996e..85f5a7f 100644 --- a/crates/edgedb_codegen_core/readme.md +++ b/crates/edgedb_codegen_core/readme.md @@ -1,3 +1,5 @@ # edgedb_codegen_core -This crate contains the core logic for the `edgedb_codegen` crate. +
+ +> This crate contains the core logic for the `edgedb_codegen` crate. diff --git a/crates/edgedb_codegen_macros/Cargo.toml b/crates/edgedb_codegen_macros/Cargo.toml index de02dee..99b8dd6 100644 --- a/crates/edgedb_codegen_macros/Cargo.toml +++ b/crates/edgedb_codegen_macros/Cargo.toml @@ -1,12 +1,16 @@ [package] name = "edgedb_codegen_macros" -version.workspace = true -authors.workspace = true -edition.workspace = true -homepage.workspace = true -license.workspace = true -repository.workspace = true -rust-version.workspace = true +version = { workspace = true } +authors = { workspace = true } +edition = { workspace = true } +homepage = { workspace = true } +license = { workspace = true } +repository = { workspace = true } +rust-version = { workspace = true } +readme = "readme.md" +categories = ["database"] +keywords = ["edgedb", "database", "typesafe", "checked", "macros"] +description = "The proc-macro crate for the `edgedb_codegen` crate." [lib] proc-macro = true @@ -17,9 +21,6 @@ proc-macro2 = { workspace = true } quote = { workspace = true } syn = { workspace = true } -[lints] -workspace = true - [features] with_bigint = ["edgedb_codegen_core/with_bigint"] with_bigdecimal = ["edgedb_codegen_core/with_bigdecimal"] @@ -27,3 +28,6 @@ with_chrono = ["edgedb_codegen_core/with_chrono"] with_all = ["edgedb_codegen_core/with_all"] serde = [] query = [] + +[lints] +workspace = true diff --git a/crates/edgedb_codegen_macros/readme.md b/crates/edgedb_codegen_macros/readme.md index 5f41b4b..2670ddc 100644 --- a/crates/edgedb_codegen_macros/readme.md +++ b/crates/edgedb_codegen_macros/readme.md @@ -1,3 +1,5 @@ # `edgedb_codegen_macros` -This crate contains the raw macros for the `edgedb_codegen` crate. +
+ +> This crate contains the raw macros for the `edgedb_codegen` crate.