solverforge_macros/
lib.rs1use proc_macro::TokenStream;
4
5mod attr_parse;
6mod entrypoints;
7mod list_registry;
8mod planning_entity;
9mod planning_solution;
10mod problem_fact;
11
12#[proc_macro_attribute]
13pub fn planning_entity(attr: TokenStream, item: TokenStream) -> TokenStream {
14 entrypoints::planning_entity_attr(attr, item)
15}
16
17#[proc_macro_attribute]
18pub fn planning_solution(attr: TokenStream, item: TokenStream) -> TokenStream {
19 entrypoints::planning_solution_attr(attr, item)
20}
21
22#[proc_macro_attribute]
23pub fn problem_fact(attr: TokenStream, item: TokenStream) -> TokenStream {
24 entrypoints::problem_fact_attr(attr, item)
25}
26
27#[proc_macro_derive(
28 PlanningEntityImpl,
29 attributes(
30 planning_id,
31 planning_variable,
32 planning_list_variable,
33 planning_pin,
34 inverse_relation_shadow_variable,
35 previous_element_shadow_variable,
36 next_element_shadow_variable,
37 cascading_update_shadow_variable
38 )
39)]
40pub fn derive_planning_entity(input: TokenStream) -> TokenStream {
41 entrypoints::derive_planning_entity(input)
42}
43
44#[proc_macro_derive(
45 PlanningSolutionImpl,
46 attributes(
47 planning_entity_collection,
48 planning_list_element_collection,
49 problem_fact_collection,
50 planning_score,
51 value_range_provider,
52 shadow_variable_updates,
53 solverforge_constraints_path,
54 solverforge_config_path,
55 solverforge_solver_toml_path
56 )
57)]
58pub fn derive_planning_solution(input: TokenStream) -> TokenStream {
59 entrypoints::derive_planning_solution(input)
60}
61
62#[proc_macro_derive(ProblemFactImpl, attributes(planning_id))]
63pub fn derive_problem_fact(input: TokenStream) -> TokenStream {
64 entrypoints::derive_problem_fact(input)
65}