1use async_dispatcher::{set_dispatcher, Dispatcher, Runnable};
2use gpui::{AppContext, PlatformDispatcher};
3use settings::Settings as _;
4use std::{sync::Arc, time::Duration};
5
6mod jupyter_settings;
7mod kernels;
8mod outputs;
9mod runtime_panel;
10mod session;
11mod stdio;
12
13pub use jupyter_settings::JupyterSettings;
14pub use kernels::{Kernel, KernelSpecification};
15pub use runtime_panel::{ClearOutputs, Interrupt, Run, Shutdown};
16pub use runtime_panel::{RuntimePanel, SessionSupport};
17pub use runtimelib::ExecutionState;
18pub use session::Session;
19
20fn zed_dispatcher(cx: &mut AppContext) -> impl Dispatcher {
21 struct ZedDispatcher {
22 dispatcher: Arc<dyn PlatformDispatcher>,
23 }
24
25 // PlatformDispatcher is _super_ close to the same interface we put in
26 // async-dispatcher, except for the task label in dispatch. Later we should
27 // just make that consistent so we have this dispatcher ready to go for
28 // other crates in Zed.
29 impl Dispatcher for ZedDispatcher {
30 fn dispatch(&self, runnable: Runnable) {
31 self.dispatcher.dispatch(runnable, None)
32 }
33
34 fn dispatch_after(&self, duration: Duration, runnable: Runnable) {
35 self.dispatcher.dispatch_after(duration, runnable);
36 }
37 }
38
39 ZedDispatcher {
40 dispatcher: cx.background_executor().dispatcher.clone(),
41 }
42}
43
44pub fn init(cx: &mut AppContext) {
45 set_dispatcher(zed_dispatcher(cx));
46 JupyterSettings::register(cx);
47 runtime_panel::init(cx)
48}