1#![feature(anonymous_lifetime_in_impl_trait)]
50#![feature(associated_type_defaults)]
51#![feature(box_patterns)]
52#![feature(btree_cursors)]
53#![feature(error_reporter)]
54#![feature(exact_size_is_empty)]
55#![feature(impl_trait_in_assoc_type)]
56#![feature(never_type)]
57#![feature(panic_update_hook)]
58#![feature(type_alias_impl_trait)]
59#![feature(trait_alias)]
60#![deny(missing_docs)]
61
62pub mod accum;
63pub mod actor;
64pub mod actor_local;
65pub mod addr;
66pub mod channel;
67pub mod client;
68pub mod config;
69pub mod context;
70pub mod endpoint;
71pub mod gateway;
73pub mod id;
74mod init;
75pub mod introspect;
76pub mod mailbox;
77pub mod message;
78pub mod metrics;
79pub mod ordering;
80pub mod panic_handler;
81mod parse;
82pub mod port;
83pub mod proc;
84pub mod ref_;
85pub mod remote;
86pub mod runtime_identity;
87pub(crate) mod sequenced;
88mod signal_handler;
89mod stdio_redirect;
90pub mod subject;
91pub mod supervision;
92pub mod sync;
93pub mod testing;
95pub mod time;
96pub mod value_mesh;
97
98#[cfg(fbcode_build)]
99pub mod meta;
100
101#[doc(hidden)]
104pub mod internal_macro_support {
105 pub use anyhow;
106 pub use async_trait;
107 pub use inventory;
108 pub use opentelemetry;
109 pub use paste::paste;
110 pub use serde_json;
111 pub use tracing;
112 pub use typeuri;
113}
114
115pub use actor::Actor;
116pub use actor::ActorGuard;
117pub use actor::ActorHandle;
118pub use actor::AnyActorGuard;
119pub use actor::AnyActorHandle;
120pub use actor::Handler;
121pub use actor::HandlerInfo;
122pub use actor::RemoteHandles;
123pub use actor::RemoteSpawn;
124pub use actor_local::ActorLocal;
125pub use addr::ActorAddr;
126pub use addr::Addr;
127pub use addr::AddrParseError;
128pub use addr::Location;
129pub use addr::PortAddr;
130pub use addr::ProcAddr;
131pub use client::Client;
132pub use endpoint::Endpoint;
133pub use endpoint::EndpointLocation;
134pub use endpoint::RemoteEndpoint;
135pub use gateway::Gateway;
136#[doc(inline)]
137pub use hyperactor_macros::HandleClient;
138#[doc(inline)]
139pub use hyperactor_macros::Handler;
140#[doc(inline)]
141pub use hyperactor_macros::RefClient;
142#[doc(inline)]
143pub use hyperactor_macros::behavior;
144#[doc(inline)]
145pub use hyperactor_macros::export;
146#[doc(inline)]
147pub use hyperactor_macros::handle;
148#[doc(inline)]
149pub use hyperactor_macros::instrument;
150#[doc(inline)]
151pub use hyperactor_macros::instrument_infallible;
152pub use hyperactor_macros::observe_async;
153pub use hyperactor_macros::observe_result;
154#[doc(inline)]
155pub use hyperactor_macros::spawnable;
156#[doc(inline)]
157pub use hyperactor_macros::uid;
158pub use hyperactor_telemetry::declare_static_counter;
159pub use hyperactor_telemetry::declare_static_gauge;
160pub use hyperactor_telemetry::declare_static_histogram;
161pub use hyperactor_telemetry::declare_static_timer;
162pub use hyperactor_telemetry::key_value;
163pub use hyperactor_telemetry::kv_pairs;
164pub use id::ActorId;
165pub use id::Id;
166pub use id::Label;
167pub use id::PortId;
168pub use id::ProcId;
169pub use id::Uid;
170#[doc(inline)]
171pub use init::initialize;
172#[doc(inline)]
173pub use init::initialize_with_current_runtime;
174#[doc(inline)]
175pub use init::initialize_with_log_prefix;
176pub use mailbox::Data;
177pub use mailbox::Mailbox;
178pub use mailbox::Message;
179pub use mailbox::OncePortHandle;
180pub use mailbox::PortHandle;
181pub use mailbox::RemoteMessage;
182pub use port::ControlPort;
183pub use port::Port;
184pub use proc::Context;
185pub use proc::Instance;
186pub use proc::InstanceCell;
187pub use proc::Proc;
188pub use proc::StatusMessage;
189pub use proc::WeakProc;
190pub use ref_::ActorRef;
191pub use ref_::OncePortRef;
192#[doc(hidden)]
193pub use ref_::OncePortRefRepr;
194pub use ref_::PortRef;
195#[doc(hidden)]
196pub use ref_::PortRefRepr;
197pub use remote::Accepts;
198pub type Index = usize;
200#[doc(inline)]
201pub use signal_handler::SignalCleanupGuard;
202#[doc(inline)]
203pub use signal_handler::SignalDisposition;
204#[doc(inline)]
205pub use signal_handler::query_signal_disposition;
206#[doc(inline)]
207pub use signal_handler::register_signal_cleanup;
208#[doc(inline)]
209pub use signal_handler::register_signal_cleanup_scoped;
210#[doc(inline)]
211pub use signal_handler::sigpipe_disposition;
212#[doc(inline)]
213pub use signal_handler::unregister_signal_cleanup;
214
215pub fn serve(
217 addr: channel::ChannelAddr,
218) -> Result<gateway::GatewayServeHandle, channel::ChannelError> {
219 Gateway::current().serve(addr)
220}
221
222pub fn spawn<A: Actor>(actor: A) -> ActorHandle<A> {
224 Proc::current().spawn(actor)
225}
226
227pub fn spawn_with_label<A: Actor>(label: &str, actor: A) -> ActorHandle<A> {
229 Proc::current().spawn_with_label(label, actor)
230}
231
232pub fn spawn_with_uid<A: Actor>(uid: Uid, actor: A) -> anyhow::Result<ActorHandle<A>> {
234 Proc::current().spawn_with_uid(uid, actor)
235}
236
237pub fn client(label: &str) -> Client {
239 Proc::current().client(label)
240}
241
242mod private {
243 pub trait Sealed {}
246
247 impl<A: crate::Actor> Sealed for crate::proc::Instance<A> {}
249 impl<A: crate::Actor> Sealed for &crate::proc::Instance<A> {}
250 impl<A: crate::Actor> Sealed for crate::proc::Context<'_, A> {}
251 impl<A: crate::Actor> Sealed for &crate::proc::Context<'_, A> {}
252 impl Sealed for crate::client::Client {}
253 impl Sealed for &crate::client::Client {}
254 impl Sealed for crate::mailbox::Mailbox {}
255 impl Sealed for &crate::mailbox::Mailbox {}
256 impl<A: crate::Actor> Sealed for &crate::actor::ActorHandle<A> {}
257 impl<M: crate::Message> Sealed for &crate::mailbox::PortHandle<M> {}
258 impl<M: crate::Message> Sealed for crate::mailbox::OncePortHandle<M> {}
259 impl<A: crate::actor::Referable> Sealed for &crate::ref_::ActorRef<A> {}
260 impl<M: crate::RemoteMessage> Sealed for &crate::ref_::PortRef<M> {}
261 impl<M: crate::RemoteMessage> Sealed for crate::ref_::OncePortRef<M> {}
262}