1pub mod channels;
2pub mod error;
3pub mod iii;
4pub mod logger;
5pub mod protocol;
6pub mod stream;
7#[cfg(feature = "otel")]
8pub mod telemetry;
9pub mod triggers;
10pub mod types;
11
12pub use channels::{
13 ChannelDirection, ChannelItem, ChannelReader, ChannelWriter, StreamChannelRef,
14 extract_channel_refs, is_channel_ref,
15};
16pub use error::IIIError;
17pub use iii::{
18 FunctionInfo, FunctionRef, FunctionsAvailableGuard, III, IIIAsyncFn, IIIConnectionState, IIIFn,
19 IntoFunctionHandler, IntoFunctionRegistration, RegisterFunction, TriggerInfo, WorkerInfo,
20 WorkerMetadata, iii_async_fn, iii_fn,
21};
22pub use logger::Logger;
23pub use protocol::{
24 EnqueueResult, ErrorBody, FunctionMessage, HttpAuthConfig, HttpInvocationConfig, HttpMethod,
25 Message, RegisterFunctionMessage, RegisterServiceMessage, RegisterTriggerInput,
26 RegisterTriggerMessage, RegisterTriggerTypeMessage, TriggerAction, TriggerRequest,
27};
28pub use stream::{Streams, UpdateBuilder};
29pub use triggers::{Trigger, TriggerConfig, TriggerHandler};
30pub use types::{
31 ApiRequest, ApiResponse, Channel, FieldPath, StreamUpdateInput, UpdateOp, UpdateResult,
32};
33
34pub use serde_json::Value;
35
36#[derive(Debug, Clone, Default)]
45pub struct InitOptions {
46 pub metadata: Option<WorkerMetadata>,
48 #[cfg(feature = "otel")]
50 pub otel: Option<crate::telemetry::types::OtelConfig>,
51}
52
53pub fn register_worker(address: &str, options: InitOptions) -> III {
70 let InitOptions {
71 metadata,
72 #[cfg(feature = "otel")]
73 otel,
74 } = options;
75
76 let iii = if let Some(metadata) = metadata {
77 III::with_metadata(address, metadata)
78 } else {
79 III::new(address)
80 };
81
82 #[cfg(feature = "otel")]
83 if let Some(cfg) = otel {
84 iii.set_otel_config(cfg);
85 }
86
87 if let Err(err) = tokio::runtime::Handle::try_current() {
88 panic!(
89 "iii_sdk::register_worker requires an active Tokio runtime: {}",
90 err
91 );
92 }
93
94 iii.connect();
95
96 iii
97}
98
99#[cfg(feature = "otel")]
101pub use telemetry::{
102 context::{
103 current_span_id, current_trace_id, extract_baggage, extract_context, extract_traceparent,
104 get_all_baggage, get_baggage_entry, inject_baggage, inject_traceparent,
105 remove_baggage_entry, set_baggage_entry,
106 },
107 flush_otel, get_meter, get_tracer,
108 http_instrumentation::execute_traced_request,
109 init_otel, is_initialized, shutdown_otel,
110 types::OtelConfig,
111 types::ReconnectionConfig,
112 with_span,
113};
114
115#[cfg(feature = "otel")]
117pub use opentelemetry::trace::SpanKind;
118#[cfg(feature = "otel")]
119pub use opentelemetry::trace::Status as SpanStatus;