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        previous_element_shadow_variable,
49        next_element_shadow_variable,
50        cascading_update_shadow_variable
51    )
52)]
53pub fn derive_planning_entity(input: TokenStream) -> TokenStream {
54    entrypoints::derive_planning_entity(input)
55}
56
57#[doc(hidden)]
58#[proc_macro_derive(
59    PlanningSolutionImpl,
60    attributes(
61        planning_entity_collection,
62        planning_list_element_collection,
63        problem_fact_collection,
64        planning_score,
65        value_range_provider,
66        shadow_variable_updates,
67        solverforge_constraints_path,
68        solverforge_config_path,
69        solverforge_solver_toml_path,
70        solverforge_search_path,
71        solverforge_conflict_repairs_path,
72        solverforge_scalar_groups_path
73    )
74)]
75pub fn derive_planning_solution(input: TokenStream) -> TokenStream {
76    entrypoints::derive_planning_solution(input)
77}
78
79#[doc(hidden)]
80#[proc_macro_derive(ProblemFactImpl, attributes(planning_id))]
81pub fn derive_problem_fact(input: TokenStream) -> TokenStream {
82    entrypoints::derive_problem_fact(input)
83}