Skip to main content

rustolio_utils_macros/
lib.rs

1//
2// SPDX-License-Identifier: MPL-2.0
3//
4// Copyright (c) 2026 Tobias Binnewies. All rights reserved.
5//
6// This Source Code Form is subject to the terms of the Mozilla Public
7// License, v. 2.0. If a copy of the MPL was not distributed with this
8// file, You can obtain one at http://mozilla.org/MPL/2.0/.
9//
10
11use proc_macro::TokenStream;
12use syn::{DeriveInput, ItemFn, parse_macro_input};
13
14mod encode;
15mod service;
16
17/// Service
18#[proc_macro_derive(Service, attributes(impls))]
19pub fn service_derive(item: TokenStream) -> TokenStream {
20    service::service_derive(item)
21}
22
23#[proc_macro_attribute]
24pub fn service_impl(attr: TokenStream, item: TokenStream) -> TokenStream {
25    service::service_impl(attr, item)
26}
27
28#[proc_macro]
29pub fn service(item: TokenStream) -> TokenStream {
30    service::service(item)
31}
32
33#[proc_macro_derive(Encode, attributes(encode))]
34pub fn derive_encode(input: TokenStream) -> TokenStream {
35    let input = parse_macro_input!(input as DeriveInput);
36    match encode::derive_encode(input) {
37        Ok(v) => v,
38        Err(e) => e.into_compile_error().into(),
39    }
40}
41
42#[proc_macro_derive(Decode, attributes(encode))]
43pub fn derive_decode(input: TokenStream) -> TokenStream {
44    let input = parse_macro_input!(input as DeriveInput);
45    match encode::derive_decode(input) {
46        Ok(v) => v,
47        Err(e) => e.into_compile_error().into(),
48    }
49}
50
51#[proc_macro_attribute]
52pub fn async_impl(_attr: TokenStream, input: TokenStream) -> TokenStream {
53    let input = parse_macro_input!(input as ItemFn);
54    match encode::async_impl(input) {
55        Ok(v) => v,
56        Err(e) => e.into_compile_error().into(),
57    }
58}