1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
mod client;
mod server;
const CRASH_REPORTER_ARG: &str = "--start-crash-reporter-server";
fn get_release_fallback() -> Option<String> {
std::env::current_exe().ok().and_then(|current_exe| {
current_exe
.file_name()
.map(|file_name| file_name.to_string_lossy().to_string())
})
}
pub(crate) fn socket_from_release(release: &str) -> String {
release
.chars()
.map(|c| if c.is_ascii_alphanumeric() { c } else { '-' })
.collect()
}
pub fn init<Release, SentryInitFn, RunAppFn>(
release: Option<Release>,
init_sentry: SentryInitFn,
run_app: RunAppFn,
) where
Release: Into<String>,
SentryInitFn: FnOnce(bool) -> sentry::ClientInitGuard,
RunAppFn: FnOnce(),
{
let is_crash_reporter = std::env::args().any(|a| a == CRASH_REPORTER_ARG);
let _sentry_guard = init_sentry(is_crash_reporter);
let release: Option<String> = release.map(|r| r.into()).or_else(get_release_fallback);
if is_crash_reporter {
if let Some(release) = release {
server::start(&release);
}
} else {
if let Some(release) = release {
let handler = client::start(&release);
if let Err(e) = handler {
sentry::capture_error(&e);
}
}
run_app()
}
}