xarxa_sdk_rs/lib.rs
1pub mod pipeline;
2// pub mod ctrl;
3pub mod bindings;
4
5pub mod prelude {
6 pub use crate::bindings::orchestrator::export;
7 pub use crate::bindings::orchestrator::exports;
8
9 pub use crate::bindings::orchestrator::xarxa::api::{
10 host_controller::send_result,
11 logger::logging,
12 };
13
14 pub use crate::bindings::orchestrator::exports::xarxa::api::workflow_ctrl::Guest;
15 pub use crate::bindings::orchestrator::xarxa::api::engine_types::{
16 WorkflowRun, WorkflowError, RunId, Value, Kvpair, Code,
17 };
18
19 pub use crate::pipeline::{
20 PipelineState, Pipeline, PipelinePlan, Step, StepResult, WorkflowContext,
21 WorkflowHistory, StepExecutionRecord, StepStatus, SerializableContext,
22 };
23}
24
25// #[macro_export]
26// macro_rules! register_workflow {
27// ($ty:ident) => {
28// $crate::bindings::orchestrator::exports::xarxa::api::workflow_ctrl::__export_xarxa_api_workflow_ctrl_0_1_1_cabi!(
29// $ty with_types_in $crate::bindings::orchestrator::exports::xarxa::api::workflow_ctrl
30// );
31// };
32// }
33
34
35// // Create a public macro that generates the necessary export functions
36// #[macro_export]
37// macro_rules! exc{
38// ($ty:ident) => {
39// const _: () = {
40// #[unsafe(export_name = "xarxa:api/workflow-ctrl@0.1.1#start-workflow")]
41// unsafe extern "C" fn export_start_workflow(arg0: *mut u8,arg1: usize,arg2: *mut u8,arg3: usize,) -> *mut u8 {
42// unsafe {
43// $crate::bindings::orchestrator::exports::xarxa::api::workflow_ctrl::_export_start_workflow_cabi::<$ty>(arg0, arg1, arg2, arg3)
44// }
45// }
46
47// #[unsafe(export_name = "cabi_post_xarxa:api/workflow-ctrl@0.1.1#start-workflow")]
48// unsafe extern "C" fn _post_return_start_workflow(arg0: *mut u8,) {
49// unsafe {
50// $crate::bindings::orchestrator::exports::xarxa::api::workflow_ctrl::__post_return_start_workflow::<$ty>(arg0)
51// }
52// }
53
54// #[unsafe(export_name = "xarxa:api/workflow-ctrl@0.1.1#continue-workflow")]
55// unsafe extern "C" fn export_continue_workflow(arg0: i64,arg1: *mut u8,arg2: usize,) -> *mut u8 {
56// unsafe {
57// $crate::bindings::orchestrator::exports::xarxa::api::workflow_ctrl::_export_continue_workflow_cabi::<$ty>(arg0, arg1, arg2)
58// }
59// }
60
61// #[unsafe(export_name = "cabi_post_xarxa:api/workflow-ctrl@0.1.1#continue-workflow")]
62// unsafe extern "C" fn _post_return_continue_workflow(arg0: *mut u8,) {
63// unsafe {
64// $crate::bindings::orchestrator::exports::xarxa::api::workflow_ctrl::__post_return_continue_workflow::<$ty>(arg0)
65// }
66// }
67// };
68// };
69// }
70
71// use proc_macro::TokenStream;
72// use quote::quote;
73// use syn::{parse_macro_input, Ident};
74
75// pub use bindings::orchestrator::exports::xarxa::api::workflow_ctrl::Guest;
76
77pub fn add(left: u64, right: u64) -> u64 {
78 left + right
79}
80
81// #[proc_macro]
82// pub fn register(input: TokenStream) -> TokenStream {
83// let fn_name = parse_macro_input!(input as Ident);
84
85// let expanded = quote! {
86// struct XarxaWorkflow;
87
88// impl durable_workflow::workflow::Guest for XarxaWorkflow {
89// fn workflow_init(_input: ::std::vec::Vec<u8>) -> ::std::vec::Vec<u8> {
90// let plan = #fn_name();
91// let state = xarxa_sdk::PipelineState::from(plan);
92// bincode::serialize(&state).unwrap()
93// }
94
95// fn workflow_tick(state_bytes: ::std::vec::Vec<u8>) -> ::std::vec::Vec<u8> {
96// let mut st: xarxa_sdk::PipelineState = bincode::deserialize(&state_bytes).unwrap();
97// st.tick();
98// bincode::serialize(&st).unwrap()
99// }
100
101// fn workflow_finished(state_bytes: ::std::vec::Vec<u8>) -> bool {
102// let st: xarxa_sdk::PipelineState = bincode::deserialize(&state_bytes).unwrap();
103// st.is_finished()
104// }
105// }
106
107// durable_workflow::workflow::export!(XarxaWorkflow);
108// };
109
110// TokenStream::from(expanded)
111// }
112
113
114#[cfg(test)]
115mod tests {
116 use super::*;
117
118 #[test]
119 fn it_works() {
120 let result = add(2, 2);
121 assert_eq!(result, 4);
122 }
123}