Skip to main content

tauri_plugin_sentry/
lib.rs

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