Skip to main content

turbo_tasks_macros/
lib.rs

1#![allow(internal_features)]
2#![feature(proc_macro_diagnostic)]
3#![feature(allow_internal_unstable)]
4
5mod assert_fields;
6mod derive;
7mod func;
8mod function_macro;
9mod global_name;
10mod primitive_macro;
11mod value_impl_macro;
12mod value_macro;
13mod value_trait_macro;
14
15mod expand;
16mod ident;
17mod primitive_input;
18mod self_filter;
19mod turbofmt_macro;
20mod value_trait_arguments;
21
22use proc_macro::TokenStream;
23use proc_macro_error::proc_macro_error;
24
25#[proc_macro_derive(TraceRawVcs, attributes(turbo_tasks))]
26pub fn derive_trace_raw_vcs_attr(input: TokenStream) -> TokenStream {
27    derive::derive_trace_raw_vcs(input)
28}
29
30#[proc_macro_derive(NonLocalValue, attributes(turbo_tasks))]
31pub fn derive_non_local_value_attr(input: TokenStream) -> TokenStream {
32    derive::derive_non_local_value(input)
33}
34
35#[proc_macro_derive(OperationValue, attributes(turbo_tasks))]
36pub fn derive_operation_value_attr(input: TokenStream) -> TokenStream {
37    derive::derive_operation_value(input)
38}
39
40#[proc_macro_derive(ValueDebug, attributes(turbo_tasks))]
41pub fn derive_value_debug_attr(input: TokenStream) -> TokenStream {
42    derive::derive_value_debug(input)
43}
44
45#[proc_macro_derive(ValueDebugFormat, attributes(turbo_tasks))]
46pub fn derive_value_debug_format_attr(input: TokenStream) -> TokenStream {
47    derive::derive_value_debug_format(input)
48}
49
50#[proc_macro_derive(DeterministicHash, attributes(turbo_tasks))]
51pub fn derive_deterministic_hash(input: TokenStream) -> TokenStream {
52    derive::derive_deterministic_hash(input)
53}
54
55#[proc_macro_derive(TaskInput, attributes(turbo_tasks))]
56pub fn derive_task_input(input: TokenStream) -> TokenStream {
57    derive::derive_task_input(input)
58}
59
60/// Derive macro for `ValueToString`. Also generates `ValueToStringify for &T`.
61#[doc = include_str!("../../turbo-tasks/FORMATTING.md")]
62#[proc_macro_derive(ValueToString, attributes(value_to_string))]
63pub fn derive_value_to_string(input: TokenStream) -> TokenStream {
64    derive::value_to_string_macro::derive_value_to_string(input)
65}
66
67/// <!--
68/// Documentation for this macro is available on the re-export:
69/// <https://turbopack-rust-docs.vercel.sh/rustdoc/turbo_tasks/attr.task_storage.html>
70/// -->
71#[proc_macro_attribute]
72pub fn task_storage(_args: TokenStream, input: TokenStream) -> TokenStream {
73    derive::task_storage(input)
74}
75
76/// <!--
77/// Documentation for this macro is available on the re-export:
78/// <https://turbopack-rust-docs.vercel.sh/rustdoc/turbo_tasks/attr.value.html>
79/// -->
80#[allow_internal_unstable(min_specialization, into_future, trivial_bounds)]
81#[proc_macro_error]
82#[proc_macro_attribute]
83pub fn value(args: TokenStream, input: TokenStream) -> TokenStream {
84    value_macro::value(args, input)
85}
86
87/// <!--
88/// Documentation for this macro is available on the re-export:
89/// <https://turbopack-rust-docs.vercel.sh/rustdoc/turbo_tasks/attr.value_trait.html>
90/// -->
91#[allow_internal_unstable(min_specialization, into_future, trivial_bounds)]
92#[proc_macro_error]
93#[proc_macro_attribute]
94pub fn value_trait(args: TokenStream, input: TokenStream) -> TokenStream {
95    value_trait_macro::value_trait(args, input)
96}
97
98#[allow_internal_unstable(min_specialization, into_future, trivial_bounds)]
99#[proc_macro_error]
100#[proc_macro_attribute]
101pub fn function(args: TokenStream, input: TokenStream) -> TokenStream {
102    function_macro::function(args, input)
103}
104
105#[allow_internal_unstable(min_specialization, into_future, trivial_bounds)]
106#[proc_macro_error]
107#[proc_macro_attribute]
108pub fn test_tt(_args: TokenStream, input: TokenStream) -> TokenStream {
109    derive::derive_value_debug(input)
110}
111
112#[allow_internal_unstable(min_specialization, into_future, trivial_bounds)]
113#[proc_macro_error]
114#[proc_macro_attribute]
115pub fn value_impl(args: TokenStream, input: TokenStream) -> TokenStream {
116    value_impl_macro::value_impl(args, input)
117}
118
119#[allow_internal_unstable(min_specialization, into_future, trivial_bounds)]
120#[proc_macro_error]
121#[proc_macro]
122pub fn primitive(input: TokenStream) -> TokenStream {
123    primitive_macro::primitive(input)
124}
125
126/// Async format macro. Returns `impl Future<Output = Result<RcStr>>`.
127///
128/// ```ignore
129/// let s: RcStr = turbofmt!("asset {} in path {}", asset.ident(), base_path).await?;
130/// ```
131#[doc = include_str!("../../turbo-tasks/FORMATTING.md")]
132#[proc_macro]
133pub fn turbofmt(input: TokenStream) -> TokenStream {
134    turbofmt_macro::turbofmt(input)
135}
136
137/// Async bail macro. Resolves arguments then calls `anyhow::bail!()`.
138///
139/// ```ignore
140/// turbobail!("asset {} is not in path {}", asset.ident(), base_path);
141/// ```
142#[doc = include_str!("../../turbo-tasks/FORMATTING.md")]
143#[proc_macro]
144pub fn turbobail(input: TokenStream) -> TokenStream {
145    turbofmt_macro::turbobail(input)
146}