solverforge_macros/
lib.rs1use proc_macro::TokenStream;
4
5mod attr_parse;
6mod entrypoints;
7mod planning_entity;
8mod planning_model;
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]
28pub fn planning_model(input: TokenStream) -> TokenStream {
29 entrypoints::planning_model_macro(input)
30}
31
32#[proc_macro_derive(
33 PlanningEntityImpl,
34 attributes(
35 planning_id,
36 planning_variable,
37 planning_list_variable,
38 planning_pin,
39 inverse_relation_shadow_variable,
40 previous_element_shadow_variable,
41 next_element_shadow_variable,
42 cascading_update_shadow_variable
43 )
44)]
45pub fn derive_planning_entity(input: TokenStream) -> TokenStream {
46 entrypoints::derive_planning_entity(input)
47}
48
49#[proc_macro_derive(
50 PlanningSolutionImpl,
51 attributes(
52 planning_entity_collection,
53 planning_list_element_collection,
54 problem_fact_collection,
55 planning_score,
56 value_range_provider,
57 shadow_variable_updates,
58 solverforge_constraints_path,
59 solverforge_config_path,
60 solverforge_solver_toml_path,
61 solverforge_conflict_repair_providers_path,
62 solverforge_scalar_groups_path
63 )
64)]
65pub fn derive_planning_solution(input: TokenStream) -> TokenStream {
66 entrypoints::derive_planning_solution(input)
67}
68
69#[proc_macro_derive(ProblemFactImpl, attributes(planning_id))]
70pub fn derive_problem_fact(input: TokenStream) -> TokenStream {
71 entrypoints::derive_problem_fact(input)
72}