soroban_macros/
lib.rs

1/*
2    Copyright (c) 2023-2024 Frederic Kyung-jin Rezeau (오경진 吳景振)
3
4    This file is part of soroban-kit.
5
6    Licensed under the MIT License, this software is provided "AS IS",
7    no liability assumed. For details, see the LICENSE file in the
8    root directory.
9
10    Author: Fred Kyung-jin Rezeau <fred@litemint.com>
11*/
12
13extern crate proc_macro;
14
15#[allow(unused_imports)]
16use proc_macro::TokenStream;
17
18/// Oracle macros implementation.
19#[cfg(feature = "oracle")]
20mod oracle;
21
22/// Commitment scheme macros implementation.
23#[cfg(feature = "commitment-scheme")]
24mod commit;
25
26/// State machine procedural macros implementation.
27#[cfg(feature = "state-machine")]
28mod fsm;
29
30/// CircuitBreaker procedural macros implementation.
31#[cfg(feature = "circuit-breaker")]
32mod circuit_breaker;
33
34/// Storage procedural macros implementation.
35#[cfg(feature = "storage")]
36mod storage;
37
38#[cfg(feature = "commitment-scheme")]
39#[proc_macro_attribute]
40pub fn commit(attr: TokenStream, input: TokenStream) -> TokenStream {
41    commit::commit(attr, input)
42}
43
44#[cfg(feature = "commitment-scheme")]
45#[proc_macro_attribute]
46pub fn reveal(attr: TokenStream, input: TokenStream) -> TokenStream {
47    commit::reveal(attr, input)
48}
49
50#[cfg(feature = "state-machine")]
51#[proc_macro_attribute]
52pub fn state_machine(attr: TokenStream, input: TokenStream) -> TokenStream {
53    fsm::state_machine(attr, input)
54}
55
56#[cfg(feature = "state-machine")]
57#[proc_macro_derive(TransitionHandler)]
58pub fn transition_handler_derive(input: TokenStream) -> TokenStream {
59    fsm::transition_handler_derive(input)
60}
61
62#[cfg(feature = "storage")]
63#[proc_macro_attribute]
64pub fn storage(attr: TokenStream, input: TokenStream) -> TokenStream {
65    storage::storage(attr, input)
66}
67
68#[cfg(feature = "storage")]
69#[proc_macro_attribute]
70pub fn key_constraint(attr: TokenStream, input: TokenStream) -> TokenStream {
71    storage::key_constraint(attr, input)
72}
73
74#[cfg(feature = "circuit-breaker")]
75#[proc_macro_attribute]
76pub fn when_opened(attr: TokenStream, input: TokenStream) -> TokenStream {
77    circuit_breaker::when(attr, input, true)
78}
79
80#[cfg(feature = "circuit-breaker")]
81#[proc_macro_attribute]
82pub fn when_closed(attr: TokenStream, input: TokenStream) -> TokenStream {
83    circuit_breaker::when(attr, input, false)
84}
85
86#[cfg(feature = "circuit-breaker")]
87#[proc_macro_derive(CircuitBreaker)]
88pub fn circuit_breaker_derive(input: TokenStream) -> TokenStream {
89    circuit_breaker::derive(input)
90}
91
92#[cfg(feature = "oracle")]
93#[proc_macro_attribute]
94pub fn oracle_subscriber(attr: TokenStream, input: TokenStream) -> TokenStream {
95    oracle::oracle_subscriber_attribute(attr, input)
96}
97
98#[cfg(feature = "oracle")]
99#[proc_macro_attribute]
100pub fn oracle_broker(attr: TokenStream, input: TokenStream) -> TokenStream {
101    oracle::oracle_broker_attribute(attr, input)
102}