Skip to main content

solverforge_macros/
lib.rs

1// Macros for SolverForge domain models.
2
3use proc_macro::TokenStream;
4
5mod attr_parse;
6mod entrypoints;
7mod list_registry;
8mod planning_entity;
9mod planning_solution;
10mod problem_fact;
11mod standard_registry;
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_derive(
29    PlanningEntityImpl,
30    attributes(
31        planning_id,
32        planning_variable,
33        planning_list_variable,
34        planning_pin,
35        inverse_relation_shadow_variable,
36        previous_element_shadow_variable,
37        next_element_shadow_variable,
38        cascading_update_shadow_variable
39    )
40)]
41pub fn derive_planning_entity(input: TokenStream) -> TokenStream {
42    entrypoints::derive_planning_entity(input)
43}
44
45#[proc_macro_derive(
46    PlanningSolutionImpl,
47    attributes(
48        planning_entity_collection,
49        planning_list_element_collection,
50        problem_fact_collection,
51        planning_score,
52        value_range_provider,
53        shadow_variable_updates,
54        solverforge_constraints_path,
55        solverforge_config_path,
56        solverforge_solver_toml_path
57    )
58)]
59pub fn derive_planning_solution(input: TokenStream) -> TokenStream {
60    entrypoints::derive_planning_solution(input)
61}
62
63#[proc_macro_derive(ProblemFactImpl, attributes(planning_id))]
64pub fn derive_problem_fact(input: TokenStream) -> TokenStream {
65    entrypoints::derive_problem_fact(input)
66}