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 constraints;
8mod entrypoints;
9mod planning_entity;
10mod planning_model;
11mod planning_solution;
12mod problem_fact;
13
14#[proc_macro_attribute]
15pub fn planning_entity(attr: TokenStream, item: TokenStream) -> TokenStream {
16    entrypoints::planning_entity_attr(attr, item)
17}
18
19#[proc_macro_attribute]
20pub fn planning_solution(attr: TokenStream, item: TokenStream) -> TokenStream {
21    entrypoints::planning_solution_attr(attr, item)
22}
23
24#[proc_macro_attribute]
25pub fn problem_fact(attr: TokenStream, item: TokenStream) -> TokenStream {
26    entrypoints::problem_fact_attr(attr, item)
27}
28
29#[proc_macro_attribute]
30pub fn solverforge_constraints(attr: TokenStream, item: TokenStream) -> TokenStream {
31    entrypoints::solverforge_constraints_attr(attr, item)
32}
33
34#[proc_macro]
35pub fn planning_model(input: TokenStream) -> TokenStream {
36    entrypoints::planning_model_macro(input)
37}
38
39#[doc(hidden)]
40#[proc_macro_derive(
41    PlanningEntityImpl,
42    attributes(
43        planning_id,
44        planning_variable,
45        planning_list_variable,
46        planning_pin,
47        inverse_relation_shadow_variable,
48        index_shadow_variable,
49        previous_element_shadow_variable,
50        next_element_shadow_variable,
51        cascading_update_shadow_variable
52    )
53)]
54pub fn derive_planning_entity(input: TokenStream) -> TokenStream {
55    entrypoints::derive_planning_entity(input)
56}
57
58#[doc(hidden)]
59#[proc_macro_derive(
60    PlanningSolutionImpl,
61    attributes(
62        planning_entity_collection,
63        planning_list_element_collection,
64        problem_fact_collection,
65        planning_score,
66        value_range_provider,
67        shadow_variable_updates,
68        solverforge_constraints_path,
69        solverforge_config_path,
70        solverforge_solver_toml_path,
71        solverforge_search_path,
72        solverforge_conflict_repairs_path,
73        solverforge_scalar_groups_path
74    )
75)]
76pub fn derive_planning_solution(input: TokenStream) -> TokenStream {
77    entrypoints::derive_planning_solution(input)
78}
79
80#[doc(hidden)]
81#[proc_macro_derive(ProblemFactImpl, attributes(planning_id))]
82pub fn derive_problem_fact(input: TokenStream) -> TokenStream {
83    entrypoints::derive_problem_fact(input)
84}