tauri_plugin_sentry/
lib.rs1use 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}