import ExternalLink from 'sentry/components/links/externalLink'; import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step'; import type { Docs, DocsParams, OnboardingConfig, } from 'sentry/components/onboarding/gettingStartedDoc/types'; import { getCrashReportBackendInstallStep, getCrashReportModalConfigDescription, getCrashReportModalIntroduction, } from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding'; import {t, tct} from 'sentry/locale'; import {getPackageVersion} from 'sentry/utils/gettingStartedDocs/getPackageVersion'; type Params = DocsParams; const getInstallSnippet = (params: Params) => ` [dependencies] sentry = "${getPackageVersion(params, 'sentry.rust', '0.32.1')}"`; const getInstallSnippetMetrics = (params: Params) => ` sentry = { version = "${getPackageVersion( params, 'sentry.rust', '0.32.1' )}", features = ["UNSTABLE_metrics"] }`; const getConfigureSnippet = (params: Params) => ` let _guard = sentry::init(("${params.dsn.public}", sentry::ClientOptions { release: sentry::release_name!(), ..Default::default() }));`; const getVerifySnippet = (params: Params) => ` fn main() { let _guard = sentry::init(("${params.dsn.public}", sentry::ClientOptions { release: sentry::release_name!(), ..Default::default() })); // Sentry will capture this panic!("Everything is on fire!"); }`; const getVerifySnippetMetrics = () => ` use sentry::metrics::Metric; // Add 1 to a counter named 'hits' Metric::count("hits").send();`; const onboarding: OnboardingConfig = { install: params => [ { type: StepType.INSTALL, description: tct( 'To add Sentry to your Rust project you just need to add a new dependency to your [code:Cargo.toml]:', {code: } ), configurations: [ { language: 'toml', partialLoading: params.sourcePackageRegistries.isLoading, code: getInstallSnippet(params), }, ], }, ], configure: params => [ { type: StepType.CONFIGURE, description: tct( '[code:Sentry.init()] will return you a guard that when freed, will prevent process exit until all events have been sent (within a timeout):', {code: } ), configurations: [ { language: 'rust', code: getConfigureSnippet(params), }, ], }, ], verify: params => [ { type: StepType.VERIFY, description: t( 'The quickest way to verify Sentry in your Rust application is to cause a panic:' ), configurations: [ { language: 'rust', code: getVerifySnippet(params), }, ], }, ], }; const customMetricsOnboarding: OnboardingConfig = { install: params => [ { type: StepType.INSTALL, description: tct( 'You need at least version 0.32.1 of the [code:sentry] or [code:sentry-core] crates installed. Enable the [code:UNSTABLE_metrics] feature:', { code: , } ), configurations: [ { language: 'toml', partialLoading: params.sourcePackageRegistries.isLoading, code: getInstallSnippetMetrics(params), }, ], }, ], configure: () => [], verify: () => [ { type: StepType.VERIFY, description: tct( "Then you'll be able to add metrics as [code:counters], [code:sets], [code:distributions], and [code:gauges]. These are available under the [code:Sentry.metrics] namespace. Try out this example:", { code: , } ), configurations: [ { code: [ { label: 'Rust', value: 'rust', language: 'rust', code: getVerifySnippetMetrics(), }, ], }, { description: t( 'It can take up to 3 minutes for the data to appear in the Sentry UI.' ), }, { description: tct( 'Learn more about metrics and how to configure them, by reading the [docsLink:docs].', { docsLink: ( ), } ), }, ], }, ], }; const crashReportOnboarding: OnboardingConfig = { introduction: () => getCrashReportModalIntroduction(), install: (params: Params) => getCrashReportBackendInstallStep(params), configure: () => [ { type: StepType.CONFIGURE, description: getCrashReportModalConfigDescription({ link: 'https://docs.sentry.io/platforms/rust/user-feedback/configuration/#crash-report-modal', }), }, ], verify: () => [], nextSteps: () => [], }; const docs: Docs = { onboarding, customMetricsOnboarding, crashReportOnboarding, }; export default docs;