1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum WorkGraphRestRoute {
3 Items,
4 Item,
5 Ready,
6 Snapshot,
7 Events,
8 GoalStatus,
9 AttentionList,
10}
11
12#[derive(Debug, Clone, Copy, PartialEq, Eq)]
13pub struct WorkGraphRestOperationDescriptor {
14 pub method: &'static str,
15 pub summary: &'static str,
16 pub request_schema: Option<&'static str>,
17 pub response_schema: &'static str,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq)]
21pub struct WorkGraphRestPathDescriptor {
22 pub route: WorkGraphRestRoute,
23 pub path: &'static str,
24 pub operations: &'static [WorkGraphRestOperationDescriptor],
25}
26
27const WORKGRAPH_ITEMS_OPERATIONS: &[WorkGraphRestOperationDescriptor] =
28 &[WorkGraphRestOperationDescriptor {
29 method: "get",
30 summary: "List WorkGraph items",
31 request_schema: None,
32 response_schema: "WorkGraphItemsResponse",
33 }];
34
35const WORKGRAPH_ITEM_OPERATIONS: &[WorkGraphRestOperationDescriptor] =
36 &[WorkGraphRestOperationDescriptor {
37 method: "get",
38 summary: "Get WorkGraph item",
39 request_schema: None,
40 response_schema: "WorkItem",
41 }];
42
43const WORKGRAPH_READY_OPERATIONS: &[WorkGraphRestOperationDescriptor] =
44 &[WorkGraphRestOperationDescriptor {
45 method: "get",
46 summary: "List ready WorkGraph items",
47 request_schema: None,
48 response_schema: "WorkGraphItemsResponse",
49 }];
50
51const WORKGRAPH_SNAPSHOT_OPERATIONS: &[WorkGraphRestOperationDescriptor] =
52 &[WorkGraphRestOperationDescriptor {
53 method: "get",
54 summary: "Read WorkGraph snapshot",
55 request_schema: None,
56 response_schema: "WorkGraphSnapshot",
57 }];
58
59const WORKGRAPH_EVENTS_OPERATIONS: &[WorkGraphRestOperationDescriptor] =
60 &[WorkGraphRestOperationDescriptor {
61 method: "get",
62 summary: "List WorkGraph events",
63 request_schema: None,
64 response_schema: "WorkGraphEventsResponse",
65 }];
66
67const WORKGRAPH_GOAL_STATUS_OPERATIONS: &[WorkGraphRestOperationDescriptor] =
68 &[WorkGraphRestOperationDescriptor {
69 method: "post",
70 summary: "Read WorkGraph goal item and attention status",
71 request_schema: Some("GoalStatusRequest"),
72 response_schema: "GoalStatusResult",
73 }];
74
75const WORKGRAPH_ATTENTION_LIST_OPERATIONS: &[WorkGraphRestOperationDescriptor] =
76 &[WorkGraphRestOperationDescriptor {
77 method: "post",
78 summary: "List WorkGraph attention bindings",
79 request_schema: Some("AttentionListRequest"),
80 response_schema: "AttentionListResult",
81 }];
82
83pub const WORKGRAPH_REST_PATHS: &[WorkGraphRestPathDescriptor] = &[
84 WorkGraphRestPathDescriptor {
85 route: WorkGraphRestRoute::Items,
86 path: "/workgraph/items",
87 operations: WORKGRAPH_ITEMS_OPERATIONS,
88 },
89 WorkGraphRestPathDescriptor {
90 route: WorkGraphRestRoute::Item,
91 path: "/workgraph/items/{id}",
92 operations: WORKGRAPH_ITEM_OPERATIONS,
93 },
94 WorkGraphRestPathDescriptor {
95 route: WorkGraphRestRoute::Ready,
96 path: "/workgraph/ready",
97 operations: WORKGRAPH_READY_OPERATIONS,
98 },
99 WorkGraphRestPathDescriptor {
100 route: WorkGraphRestRoute::Snapshot,
101 path: "/workgraph/snapshot",
102 operations: WORKGRAPH_SNAPSHOT_OPERATIONS,
103 },
104 WorkGraphRestPathDescriptor {
105 route: WorkGraphRestRoute::Events,
106 path: "/workgraph/events",
107 operations: WORKGRAPH_EVENTS_OPERATIONS,
108 },
109 WorkGraphRestPathDescriptor {
110 route: WorkGraphRestRoute::GoalStatus,
111 path: "/workgraph/goal/status",
112 operations: WORKGRAPH_GOAL_STATUS_OPERATIONS,
113 },
114 WorkGraphRestPathDescriptor {
115 route: WorkGraphRestRoute::AttentionList,
116 path: "/workgraph/attention/list",
117 operations: WORKGRAPH_ATTENTION_LIST_OPERATIONS,
118 },
119];
120
121pub fn workgraph_rest_path_catalog() -> &'static [WorkGraphRestPathDescriptor] {
122 WORKGRAPH_REST_PATHS
123}
124
125pub fn workgraph_rest_response_schema(path: &str, method: &str) -> Option<&'static str> {
126 WORKGRAPH_REST_PATHS
127 .iter()
128 .find(|entry| entry.path == path)
129 .and_then(|entry| {
130 entry
131 .operations
132 .iter()
133 .find(|operation| operation.method == method)
134 })
135 .map(|operation| operation.response_schema)
136}
137
138pub fn workgraph_rest_request_response_schema(
139 path: &str,
140 method: &str,
141) -> Option<(Option<&'static str>, &'static str)> {
142 WORKGRAPH_REST_PATHS
143 .iter()
144 .find(|entry| entry.path == path)
145 .and_then(|entry| {
146 entry
147 .operations
148 .iter()
149 .find(|operation| operation.method == method)
150 })
151 .map(|operation| (operation.request_schema, operation.response_schema))
152}