Skip to main content

ruststream_sqlx_macros/
lib.rs

1//! Procedural macros for [`ruststream-sqlx`](https://docs.rs/ruststream-sqlx), the SQL database
2//! crate of the [RustStream](https://github.com/powersemmi/ruststream) messaging framework.
3//!
4//! A service depends on `ruststream-sqlx` rather than on this crate directly.
5
6#![forbid(unsafe_code)]
7
8mod check;
9mod checked;
10mod headers;
11mod inbox;
12mod insert;
13mod naming;
14mod outbox;
15mod parse;
16mod template;
17
18use proc_macro::TokenStream;
19use syn::{DeriveInput, parse_macro_input};
20
21/// Implemented in `ruststream-sqlx-macros` and used through `ruststream-sqlx`.
22#[proc_macro_derive(Inbox, attributes(inbox, field, sqlx))]
23pub fn derive_inbox(item: TokenStream) -> TokenStream {
24    let input = parse_macro_input!(item as DeriveInput);
25    inbox::expand(&input)
26        .unwrap_or_else(syn::Error::into_compile_error)
27        .into()
28}
29
30/// Implemented in `ruststream-sqlx-macros` and used through `ruststream-sqlx`.
31#[proc_macro_derive(InboxHeaders, attributes(inbox, field, sqlx))]
32pub fn derive_inbox_headers(item: TokenStream) -> TokenStream {
33    let input = parse_macro_input!(item as DeriveInput);
34    headers::expand(&input)
35        .unwrap_or_else(syn::Error::into_compile_error)
36        .into()
37}
38
39/// Implemented in `ruststream-sqlx-macros` and used through `ruststream-sqlx`.
40#[proc_macro_derive(Outbox, attributes(outbox, field, sqlx))]
41pub fn derive_outbox(item: TokenStream) -> TokenStream {
42    let input = parse_macro_input!(item as DeriveInput);
43    outbox::expand(&input)
44        .unwrap_or_else(syn::Error::into_compile_error)
45        .into()
46}
47
48/// Implemented in `ruststream-sqlx-macros` and used through `ruststream-sqlx`.
49#[proc_macro]
50pub fn outbox(item: TokenStream) -> TokenStream {
51    outbox::registry::expand(item.into())
52        .unwrap_or_else(syn::Error::into_compile_error)
53        .into()
54}