solverforge_macros/
lib.rs1use 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}