tauri_plugin_sentry/
lib.rs1use tauri::{
2 generate_handler,
3 plugin::{Builder, TauriPlugin},
4 Manager, Runtime,
5};
6
7#[cfg(all(not(target_os = "ios"), feature = "minidump"))]
8pub use sentry_rust_minidump as minidump;
9
10#[derive(Debug, Clone)]
11pub struct JavaScriptOptions {
12 pub inject: bool,
13 pub debug: bool,
14}
15
16impl JavaScriptOptions {
17 pub fn no_injection() -> Self {
18 Self {
19 inject: false,
20 ..Default::default()
21 }
22 }
23}
24
25impl Default for JavaScriptOptions {
26 fn default() -> Self {
27 Self {
28 inject: true,
29 #[cfg(not(debug_assertions))]
30 debug: false,
31 #[cfg(debug_assertions)]
32 debug: true,
33 }
34 }
35}
36
37#[derive(Debug, Clone, Default)]
38pub struct Options {
39 pub javascript: JavaScriptOptions,
40}
41
42mod commands;
43
44pub fn init_with_options<R: Runtime>(
45 sentry_client: &sentry::Client,
46 options: Options,
47) -> TauriPlugin<R> {
48 let sentry_client = sentry_client.clone();
49
50 let mut plugin_builder = Builder::<R>::new("sentry")
51 .invoke_handler(generate_handler![commands::breadcrumb, commands::envelope])
52 .setup(move |app, _| {
53 app.manage(sentry_client);
54 Ok(())
55 });
56
57 if options.javascript.inject {
58 plugin_builder = plugin_builder.js_init_script(
59 include_str!("../dist/inject.min.js")
60 .replace("__DEBUG__", &format!("{}", options.javascript.debug)),
61 );
62 }
63
64 plugin_builder.build()
65}
66
67pub fn init<R: Runtime>(sentry_client: &sentry::Client) -> TauriPlugin<R> {
68 init_with_options(sentry_client, Default::default())
69}
70
71pub fn init_with_no_injection<R: Runtime>(sentry_client: &sentry::Client) -> TauriPlugin<R> {
72 init_with_options(
73 sentry_client,
74 Options {
75 javascript: JavaScriptOptions::no_injection(),
76 },
77 )
78}