Skip to main content

solverforge_macros/
lib.rs

1// Macros for SolverForge domain models.
2
3use proc_macro::TokenStream;
4
5mod attr_parse;
6mod attr_validation;
7mod entrypoints;
8mod planning_entity;
9mod planning_model;
10mod planning_solution;
11mod problem_fact;
12
13#[proc_macro_attribute]
14pub fn planning_entity(attr: TokenStream, item: TokenStream) -> TokenStream {
15    entrypoints::planning_entity_attr(attr, item)
16}
17
18#[proc_macro_attribute]
19pub fn planning_solution(attr: TokenStream, item: TokenStream) -> TokenStream {
20    entrypoints::planning_solution_attr(attr, item)
21}
22
23#[proc_macro_attribute]
24pub fn problem_fact(attr: TokenStream, item: TokenStream) -> TokenStream {
25    entrypoints::problem_fact_attr(attr, item)
26}
27
28#[proc_macro]
29pub fn planning_model(input: TokenStream) -> TokenStream {
30    entrypoints::planning_model_macro(input)
31}
32
33#[doc(hidden)]
34#[proc_macro_derive(
35    PlanningEntityImpl,
36    attributes(
37        planning_id,
38        planning_variable,
39        planning_list_variable,
40        planning_pin,
41        inverse_relation_shadow_variable,
42        previous_element_shadow_variable,
43        next_element_shadow_variable,
44        cascading_update_shadow_variable
45    )
46)]
47pub fn derive_planning_entity(input: TokenStream) -> TokenStream {
48    entrypoints::derive_planning_entity(input)
49}
50
51#[doc(hidden)]
52#[proc_macro_derive(
53    PlanningSolutionImpl,
54    attributes(
55        planning_entity_collection,
56        planning_list_element_collection,
57        problem_fact_collection,
58        planning_score,
59        value_range_provider,
60        shadow_variable_updates,
61        solverforge_constraints_path,
62        solverforge_config_path,
63        solverforge_solver_toml_path,
64        solverforge_conflict_repairs_path,
65        solverforge_scalar_groups_path,
66        solverforge_coverage_groups_path
67    )
68)]
69pub fn derive_planning_solution(input: TokenStream) -> TokenStream {
70    entrypoints::derive_planning_solution(input)
71}
72
73#[doc(hidden)]
74#[proc_macro_derive(ProblemFactImpl, attributes(planning_id))]
75pub fn derive_problem_fact(input: TokenStream) -> TokenStream {
76    entrypoints::derive_problem_fact(input)
77}