golem_rust_macro/
lib.rs

1// Copyright 2024-2025 Golem Cloud
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use proc_macro::TokenStream;
16
17use crate::transaction::golem_operation_impl;
18
19mod transaction;
20mod value;
21
22#[proc_macro_derive(IntoValue, attributes(flatten_value, unit_case))]
23pub fn derive_into_value(input: TokenStream) -> TokenStream {
24    value::derive_into_value(input)
25}
26
27#[proc_macro_derive(FromValueAndType, attributes(flatten_value, unit_case))]
28pub fn derive_from_value_and_type(input: TokenStream) -> TokenStream {
29    value::derive_from_value_and_type(input)
30}
31
32/// Defines a function as an `Operation` that can be used in transactions
33#[proc_macro_attribute]
34pub fn golem_operation(attr: TokenStream, item: TokenStream) -> TokenStream {
35    golem_operation_impl(attr, item)
36}