salsa_macro_rules/
return_mode.rs

1/// Generate the expression for the return type, depending on the return mode defined in [`salsa-macros::options::Options::returns`]
2///
3/// Used when generating field getters.
4#[macro_export]
5macro_rules! return_mode_expression {
6    (
7        (copy, $maybe_backdate:ident, $maybe_default:ident),
8        $field_ty:ty,
9        $field_ref_expr:expr,
10    ) => {
11        *$field_ref_expr
12    };
13
14    (
15        (clone, $maybe_backdate:ident, $maybe_default:ident),
16        $field_ty:ty,
17        $field_ref_expr:expr,
18    ) => {
19        ::core::clone::Clone::clone($field_ref_expr)
20    };
21
22    (
23        (ref, $maybe_backdate:ident, $maybe_default:ident),
24        $field_ty:ty,
25        $field_ref_expr:expr,
26    ) => {
27        $field_ref_expr
28    };
29
30    (
31        (deref, $maybe_backdate:ident, $maybe_default:ident),
32        $field_ty:ty,
33        $field_ref_expr:expr,
34    ) => {
35        ::core::ops::Deref::deref($field_ref_expr)
36    };
37
38    (
39        (as_ref, $maybe_backdate:ident, $maybe_default:ident),
40        $field_ty:ty,
41        $field_ref_expr:expr,
42    ) => {
43        ::salsa::SalsaAsRef::as_ref($field_ref_expr)
44    };
45
46    (
47        (as_deref, $maybe_backdate:ident, $maybe_default:ident),
48        $field_ty:ty,
49        $field_ref_expr:expr,
50    ) => {
51        ::salsa::SalsaAsDeref::as_deref($field_ref_expr)
52    };
53}
54
55#[macro_export]
56macro_rules! return_mode_ty {
57    (
58        (copy, $maybe_backdate:ident, $maybe_default:ident),
59        $db_lt:lifetime,
60        $field_ty:ty
61    ) => {
62        $field_ty
63    };
64
65    (
66        (clone, $maybe_backdate:ident, $maybe_default:ident),
67        $db_lt:lifetime,
68        $field_ty:ty
69    ) => {
70        $field_ty
71    };
72
73    (
74        (ref, $maybe_backdate:ident, $maybe_default:ident),
75        $db_lt:lifetime,
76        $field_ty:ty
77    ) => {
78        & $db_lt $field_ty
79    };
80
81    (
82        (deref, $maybe_backdate:ident, $maybe_default:ident),
83        $db_lt:lifetime,
84        $field_ty:ty
85    ) => {
86        & $db_lt <$field_ty as ::core::ops::Deref>::Target
87    };
88
89    (
90        (as_ref, $maybe_backdate:ident, $maybe_default:ident),
91        $db_lt:lifetime,
92        $field_ty:ty
93    ) => {
94        <$field_ty as ::salsa::SalsaAsRef>::AsRef<$db_lt>
95    };
96
97    (
98        (as_deref, $maybe_backdate:ident, $maybe_default:ident),
99        $db_lt:lifetime,
100        $field_ty:ty
101    ) => {
102        <$field_ty as ::salsa::SalsaAsDeref>::AsDeref<$db_lt>
103    };
104}