1use proc_macro::TokenStream;
5use qtbridge_gen_common::type_qualified_mapping::CallOrigin;
6
7mod qt_derive;
8mod qt_gen_impl;
9mod qt_resource;
10
11#[proc_macro_attribute]
12pub fn qobject(args: TokenStream, input: TokenStream) -> TokenStream {
13 let mut builder = qt_gen_impl::QObjectModuleBuilder::new(CallOrigin::External);
14 let output = match builder.build_token_stream(input.into(), args.into()) {
15 Ok(tokens) => tokens,
16 Err(err) => err.to_compile_error(),
17 };
18 output.into()
19}
20
21#[doc(hidden)]
22#[proc_macro_attribute]
23pub fn qobject_internal(args: TokenStream, input: TokenStream) -> TokenStream {
24 let mut builder = qt_gen_impl::QObjectModuleBuilder::new(CallOrigin::Internal);
25 let output = match builder.build_token_stream(input.into(), args.into()) {
26 Ok(tokens) => tokens,
27 Err(err) => err.to_compile_error(),
28 };
29 output.into()
30}
31
32#[proc_macro_attribute]
33pub fn qobject_impl(args: TokenStream, input: TokenStream) -> TokenStream {
34 let output = match qt_gen_impl::qobject_impl(input.into(), args.into(), &CallOrigin::External) {
35 Ok(o) => o.to_token_stream(),
36 Err(err) => err.to_compile_error(),
37 };
38 output.into()
39}
40
41#[doc(hidden)]
42#[proc_macro_attribute]
43pub fn qobject_impl_internal(args: TokenStream, input: TokenStream) -> TokenStream {
44 let output = match qt_gen_impl::qobject_impl(input.into(), args.into(), &CallOrigin::Internal) {
45 Ok(o) => o.to_token_stream(),
46 Err(err) => err.to_compile_error(),
47 };
48 output.into()
49}
50
51#[proc_macro_attribute]
52pub fn qsignal(_: TokenStream, _: TokenStream) -> TokenStream {
53 panic!("#[qsignal] proc macro called outside #[qobject] or #[qobject_impl].")
55}
56
57#[proc_macro_attribute]
58pub fn qslot(_: TokenStream, _: TokenStream) -> TokenStream {
59 panic!("#[qslot] proc macro called outside #[qobject] or #[qobject_impl].")
61}
62
63#[proc_macro]
64pub fn qproperty(_: TokenStream) -> TokenStream {
65 panic!("qproperty! macro called outside #[qobject] or #[qobject_impl].");
67}
68
69#[proc_macro_derive(QModelItem)]
98pub fn derive_qmodelitem(input: TokenStream) -> TokenStream {
99 match qt_derive::try_derive_qmodelitem(input) {
100 Ok(ts) => ts,
101 Err(e) => e.to_compile_error().into(),
102 }
103}
104
105#[proc_macro]
130pub fn include_bytes_qml(input: TokenStream) -> TokenStream {
131 qt_resource::include_bytes_qml(input)
132}