1#![deny(unsafe_code)]
28
29extern crate self as tuffite;
30
31#[allow(
34 clippy::struct_excessive_bools,
35 clippy::cmp_owned,
36 clippy::let_unit_value,
37 clippy::type_complexity
38)]
39pub mod shell_api {
40 include!("shell_api_generated.rs");
41}
42
43#[cfg(feature = "build")]
44pub mod build;
45#[cfg(feature = "cli")]
46pub mod cli;
47
48pub use tuffite_macros::{browser, command, main, utility};
49pub use tuffite_runtime::{
50 ApplicationError, ApplicationResult, Browser, BrowserContext, Bytes, ChromiumExecutor, Command,
51 CommandDescriptor, CommandError, CommandResult, DEFAULT_UTILITY_SESSION_CREDITS, EventEmitter,
52 ExecutorError, HandleKind, JavaScriptExtensionError, JavaScriptExtensionHost,
53 JavaScriptExtensionPackage, JavaScriptExtensionSessionHandle, MAX_UTILITY_SESSION_CREDITS,
54 MAX_UTILITY_SESSION_EVENT_BYTES, RawHandle, Runtime, RuntimeError, RuntimeState, ShellApiError,
55 ShellApiHost, ShellApiRequest, TaskContext, TaskHandle, TaskPriority, Timestamp, Utility,
56 UtilityContext, UtilityFuture, UtilityRequest, UtilityServiceRegistration, UtilitySession,
57 UtilitySessionClosed, UtilitySessionCommand, UtilitySessionEmitter, UtilitySessionEvent,
58 UtilitySessionFlowControl, UtilitySessionFlowError, UtilitySessionFuture, UtilitySessionHandle,
59 UtilitySessionHost, UtilitySessionHostError, UtilitySessionOptions, UtilitySessionRequest,
60 V8Context,
61};
62#[cfg(feature = "async")]
63pub use tuffite_runtime::{ChromiumTask, ChromiumTaskError};
64pub use tuffite_runtime::{app, browser, utility};
65
66#[doc(hidden)]
71pub mod __private {
72 pub use tuffite_abi::Application;
73 pub use tuffite_runtime::browser::BrowserDefinition;
74 pub use tuffite_runtime::utility::{UtilityDefinition, validate_utility_names};
75 pub use tuffite_runtime::{CommandHandler, CommandRegistry};
76 pub use tuffite_runtime::{codec, serde};
77}
78
79#[macro_export]
82macro_rules! generate_handler {
83 () => {
84 compile_error!("tuffite::generate_handler! requires at least one command handler")
85 };
86 ($first:path $(, $handler:path)* $(,)?) => {{
87 type __TuffiteBrowser =
88 <$first as $crate::__private::CommandHandler>::Browser;
89
90 fn __tuffite_dispatch(
91 browser: &mut __TuffiteBrowser,
92 command: $crate::Command<'_>,
93 ) -> $crate::CommandResult {
94 if command.id()
95 == <$first as $crate::__private::CommandHandler>::COMMAND.id()
96 {
97 return <$first as $crate::__private::CommandHandler>::dispatch(
98 browser,
99 command,
100 );
101 }
102 $(
103 if command.id()
104 == <$handler as $crate::__private::CommandHandler>::COMMAND.id()
105 {
106 return <$handler as $crate::__private::CommandHandler>::dispatch(
107 browser,
108 command,
109 );
110 }
111 )*
112 Err($crate::CommandError::UnknownCommand)
113 }
114
115 $crate::__private::CommandRegistry::<__TuffiteBrowser>::new(
116 __tuffite_dispatch,
117 &[
118 <$first as $crate::__private::CommandHandler>::COMMAND,
119 $(<$handler as $crate::__private::CommandHandler>::COMMAND,)*
120 ],
121 )
122 }};
123}
124
125#[cfg(feature = "remoting")]
127pub mod remoting;