Skip to main content

harmos_macros/
lib.rs

1/* ***
2 *
3 * Harmos
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * ***
8 */
9
10/* === Modules === */
11
12mod artifact;
13mod catalog;
14mod identity;
15mod message;
16mod operation;
17mod path;
18mod presentation;
19
20/* === Re-Exports === */
21
22/* === Imports === */
23
24// Standard Library Imports
25
26// Third Party Imports
27use proc_macro::TokenStream;
28// Local Imports
29use identity::Sort;
30
31/* === Constants === */
32
33/* === Macros === */
34
35/* === Type Aliases === */
36
37/* === Structs === */
38
39/* === Enums === */
40
41/* === Traits === */
42
43/* === Implementations === */
44
45/* === Public Functions === */
46
47#[proc_macro_attribute]
48pub fn catalog(attribute: TokenStream, item: TokenStream) -> TokenStream {
49    catalog::typed::declare(attribute.into(), item.into()).into()
50}
51
52#[proc_macro_attribute]
53pub fn sidecar_catalog(attribute: TokenStream, item: TokenStream) -> TokenStream {
54    catalog::typed::declare_runtime(attribute.into(), item.into()).into()
55}
56
57#[proc_macro_attribute]
58pub fn guest_catalog(attribute: TokenStream, item: TokenStream) -> TokenStream {
59    catalog::typed::declare_runtime(attribute.into(), item.into()).into()
60}
61
62#[proc_macro_attribute]
63pub fn domain_catalog(attribute: TokenStream, item: TokenStream) -> TokenStream {
64    catalog::typed::declare_domain(attribute.into(), item.into()).into()
65}
66
67#[proc_macro_attribute]
68pub fn runtime_catalog(attribute: TokenStream, item: TokenStream) -> TokenStream {
69    catalog::typed::declare_runtime(attribute.into(), item.into()).into()
70}
71
72#[proc_macro_attribute]
73pub fn operation(attribute: TokenStream, item: TokenStream) -> TokenStream {
74    operation::declare(attribute.into(), item.into()).into()
75}
76
77#[proc_macro_attribute]
78pub fn sidecar_operation(attribute: TokenStream, item: TokenStream) -> TokenStream {
79    operation::declare_runtime(attribute.into(), item.into()).into()
80}
81
82#[proc_macro_attribute]
83pub fn guest_operation(attribute: TokenStream, item: TokenStream) -> TokenStream {
84    operation::declare_runtime(attribute.into(), item.into()).into()
85}
86
87#[proc_macro_attribute]
88pub fn domain_operation(attribute: TokenStream, item: TokenStream) -> TokenStream {
89    operation::declare_domain(attribute.into(), item.into()).into()
90}
91
92#[proc_macro_attribute]
93pub fn runtime_operation(attribute: TokenStream, item: TokenStream) -> TokenStream {
94    operation::declare_runtime(attribute.into(), item.into()).into()
95}
96
97#[proc_macro_attribute]
98pub fn lanes(attribute: TokenStream, item: TokenStream) -> TokenStream {
99    catalog::lanes::close(attribute.into(), item.into()).into()
100}
101
102#[proc_macro_attribute]
103pub fn transaction(attribute: TokenStream, item: TokenStream) -> TokenStream {
104    identity::stamp(attribute.into(), item.into(), Sort::Transaction).into()
105}
106
107#[proc_macro_attribute]
108pub fn record(attribute: TokenStream, item: TokenStream) -> TokenStream {
109    identity::stamp(attribute.into(), item.into(), Sort::Record).into()
110}
111
112#[proc_macro_attribute]
113pub fn stream(attribute: TokenStream, item: TokenStream) -> TokenStream {
114    identity::stream::stamp(attribute.into(), item.into()).into()
115}
116
117#[proc_macro_attribute]
118pub fn transactions(attribute: TokenStream, item: TokenStream) -> TokenStream {
119    catalog::close(attribute.into(), item.into(), Sort::Transaction).into()
120}
121
122#[proc_macro_attribute]
123pub fn records(attribute: TokenStream, item: TokenStream) -> TokenStream {
124    catalog::close(attribute.into(), item.into(), Sort::Record).into()
125}
126
127#[proc_macro_attribute]
128pub fn streams(attribute: TokenStream, item: TokenStream) -> TokenStream {
129    catalog::streams::close(attribute.into(), item.into()).into()
130}
131
132#[proc_macro_attribute]
133pub fn plugin(attribute: TokenStream, item: TokenStream) -> TokenStream {
134    artifact::plugin::declare(attribute.into(), item.into()).into()
135}
136
137#[proc_macro_attribute]
138pub fn observer(attribute: TokenStream, item: TokenStream) -> TokenStream {
139    artifact::observer::declare(attribute.into(), item.into()).into()
140}
141
142#[proc_macro_attribute]
143pub fn listener(attribute: TokenStream, item: TokenStream) -> TokenStream {
144    artifact::listener::declare(attribute.into(), item.into()).into()
145}
146
147#[proc_macro_attribute]
148pub fn message(attribute: TokenStream, item: TokenStream) -> TokenStream {
149    message::declare(attribute.into(), item.into()).into()
150}
151
152/* === Private Functions === */
153
154/* === Tests === */