Experimental MoonBit bindings for Temporal Core through sdk-core-c-bridge.
cargo build --manifest-path vendor/temporal-sdk-core/Cargo.toml \
-p temporalio-sdk-core-c-bridge --releasevendor/temporal-sdk-core/target/moon check --target native
moon test --target nativenode scripts/vendor_temporal_core.mjs --checknode scripts/vendor_temporal_core.mjskey1
value1
key2
value2let runtime = match Runtime::new() {
Ok(runtime) => runtime
Err(err) => abort(err.message)
}let options = ConnectionOptions::new(
"http://127.0.0.1:7233",
client_name="temporal.mbt-example",
client_version="0.1.0",
identity="example-worker",
)
let connection = match Connection::connect_blocking(runtime, options) {
Ok(connection) => connection
Err(err) => abort(err.message)
}connection.update_api_key("new-api-key")
connection.update_metadata(b"authorization\nBearer token")let call = RpcCallOptions::new(
Workflow,
"GetSystemInfo",
request=b"",
timeout_millis=5000U,
)
match connection.rpc_call_blocking(call) {
Ok(response_bytes) => {
// Decode temporal.api.workflowservice.v1.GetSystemInfoResponse here.
ignore(response_bytes)
}
Err(failure) => {
abort(failure.message)
}
}let token = CancellationToken::new()
let call = RpcCallOptions::new(
Workflow,
"GetSystemInfo",
cancellation_token=token,
)
token.cancel()
ignore(connection.rpc_call_blocking(call))let worker_options = WorkerOptions::new(
"default",
"moonbit-task-queue",
build_id="temporal.mbt-example",
)
let worker = match Worker::new(connection, worker_options) {
Ok(worker) => worker
Err(err) => abort(err.message)
}match worker.poll_workflow_activation_blocking() {
Ok(Some(activation)) => {
// Decode the activation protobuf and eventually complete it.
ignore(activation)
}
Ok(None) => ()
Err(err) => abort(err.message)
}let completion : Bytes = b"...encoded completion..."
match worker.complete_workflow_activation_blocking(completion) {
Ok(()) => ()
Err(err) => abort(err.message)
}worker.initiate_shutdown()
ignore(worker.finalize_shutdown_blocking())let options = DevServerOptions::default()
let (server, target) = match EphemeralServer::start_dev_server_blocking(runtime, options) {
Ok(pair) => pair
Err(err) => abort(err.message)
}
let connection = Connection::connect_blocking(
runtime,
ConnectionOptions::new(target),
)
ignore(connection)
ignore(server.shutdown_blocking())test "deterministic random" {
let random = Random::new(123UL)
let value = random.int32_range(1, 10)
assert_true(value >= 1 && value < 10)
let bytes = random.fill_bytes(8)
assert_eq(bytes.length(), 8)
}node scripts/vendor_temporal_core.mjs
node scripts/vendor_temporal_core.mjs --check
moon test --target nativepub type CancellationTokenpub type Connectionfn Connection::connect(runtime : Runtime, options : ConnectionOptions, callback : (Result[Connection, TemporalError]) -> Unit) -> Unitfn Connection::connect_blocking(runtime : Runtime, options : ConnectionOptions) -> Result[Connection, TemporalError]fn Connection::rpc_call(self : Connection, options : RpcCallOptions, callback : (Result[Bytes, RpcFailure]) -> Unit) -> Unitfn Connection::rpc_call_blocking(self : Connection, options : RpcCallOptions) -> Result[Bytes, RpcFailure]fn ConnectionOptions::new(target_url : String, client_name? : String, client_version? : String, identity? : String, api_key? : String, metadata? : Bytes, binary_metadata? : Bytes) -> ConnectionOptionspub(all) struct DevServerOptions {
test_server : TestServerOptions
namespace_name : String
ip : String
database_filename : String
ui : Bool
ui_port : Int
log_format : String
log_level : String
}pub type EphemeralServerfn EphemeralServer::shutdown(self : EphemeralServer, callback : (Result[Unit, TemporalError]) -> Unit) -> Unitfn EphemeralServer::start_dev_server(runtime : Runtime, options : DevServerOptions, callback : (Result[(EphemeralServer, String), TemporalError]) -> Unit) -> Unitfn EphemeralServer::start_dev_server_blocking(runtime : Runtime, options? : DevServerOptions) -> Result[(EphemeralServer, String), TemporalError]fn EphemeralServer::start_test_server(runtime : Runtime, options : TestServerOptions, callback : (Result[(EphemeralServer, String), TemporalError]) -> Unit) -> Unitfn EphemeralServer::start_test_server_blocking(runtime : Runtime, options? : TestServerOptions) -> Result[(EphemeralServer, String), TemporalError]pub type Randompub(all) struct RpcCallOptions {
service : RpcService
rpc : String
request : Bytes
retry : Bool
metadata : Bytes
binary_metadata : Bytes
timeout_millis : UInt
cancellation_token : CancellationToken?
}fn RpcCallOptions::new(service : RpcService, rpc : String, request? : Bytes, retry? : Bool, metadata? : Bytes, binary_metadata? : Bytes, timeout_millis? : UInt, cancellation_token? : CancellationToken) -> RpcCallOptionspub type Runtimepub(all) struct TestServerOptions {
existing_path : String
sdk_name : String
sdk_version : String
download_version : String
download_dest_dir : String
port : Int
extra_args : String
download_ttl_seconds : UInt64
}pub type Workerfn Worker::complete_activity_task(self : Worker, completion : Bytes, callback : (Result[Unit, TemporalError]) -> Unit) -> Unitfn Worker::complete_activity_task_blocking(self : Worker, completion : Bytes) -> Result[Unit, TemporalError]fn Worker::complete_nexus_task(self : Worker, completion : Bytes, callback : (Result[Unit, TemporalError]) -> Unit) -> Unitfn Worker::complete_nexus_task_blocking(self : Worker, completion : Bytes) -> Result[Unit, TemporalError]fn Worker::complete_workflow_activation(self : Worker, completion : Bytes, callback : (Result[Unit, TemporalError]) -> Unit) -> Unitfn Worker::complete_workflow_activation_blocking(self : Worker, completion : Bytes) -> Result[Unit, TemporalError]fn Worker::finalize_shutdown(self : Worker, callback : (Result[Unit, TemporalError]) -> Unit) -> Unitfn Worker::poll_activity_task(self : Worker, callback : (Result[Bytes?, TemporalError]) -> Unit) -> Unitfn Worker::poll_nexus_task(self : Worker, callback : (Result[Bytes?, TemporalError]) -> Unit) -> Unitfn Worker::poll_workflow_activation(self : Worker, callback : (Result[Bytes?, TemporalError]) -> Unit) -> Unitfn Worker::record_activity_heartbeat(self : Worker, heartbeat : Bytes) -> Result[Unit, TemporalError]pub(all) struct WorkerOptions {
namespace_name : String
task_queue : String
build_id : String
identity_override : String
max_cached_workflows : UInt
workflow_slots : Int
activity_slots : Int
local_activity_slots : Int
nexus_slots : Int
task_types : WorkerTaskTypes
sticky_queue_schedule_to_start_timeout_millis : UInt64
max_heartbeat_throttle_interval_millis : UInt64
default_heartbeat_throttle_interval_millis : UInt64
max_activities_per_second : Double
max_task_queue_activities_per_second : Double
graceful_shutdown_period_millis : UInt64
workflow_task_poller_behavior : PollerBehavior
nonsticky_to_sticky_poll_ratio : Double
activity_task_poller_behavior : PollerBehavior
nexus_task_poller_behavior : PollerBehavior
nondeterminism_as_workflow_fail : Bool
}fn WorkerOptions::new(namespace_name : String, task_queue : String, build_id? : String, identity_override? : String, max_cached_workflows? : UInt, workflow_slots? : Int, activity_slots? : Int, local_activity_slots? : Int, nexus_slots? : Int, task_types? : WorkerTaskTypes, sticky_queue_schedule_to_start_timeout_millis? : UInt64, max_heartbeat_throttle_interval_millis? : UInt64, default_heartbeat_throttle_interval_millis? : UInt64, max_activities_per_second? : Double, max_task_queue_activities_per_second? : Double, graceful_shutdown_period_millis? : UInt64, workflow_task_poller_behavior? : PollerBehavior, nonsticky_to_sticky_poll_ratio? : Double, activity_task_poller_behavior? : PollerBehavior, nexus_task_poller_behavior? : PollerBehavior, nondeterminism_as_workflow_fail? : Bool) -> WorkerOptionsInstall
Download zipExperimental MoonBit bindings for Temporal Core through sdk-core-c-bridge.