1#![warn(missing_docs)]
10#![doc(
11    html_logo_url = "https://raw.githubusercontent.com/getsentry/relay/master/artwork/relay-icon.png",
12    html_favicon_url = "https://raw.githubusercontent.com/getsentry/relay/master/artwork/relay-icon.png"
13)]
14
15use std::net::IpAddr;
16
17use relay_protocol::Getter;
18
19pub mod browser_extensions;
20pub mod client_ips;
21pub mod csp;
22pub mod error_messages;
23pub mod generic;
24pub mod legacy_browsers;
25pub mod localhost;
26pub mod transaction_name;
27pub mod web_crawlers;
28
29mod common;
30mod config;
31mod interface;
32mod releases;
33
34#[cfg(test)]
35mod testutils;
36
37pub use crate::common::*;
38pub use crate::config::*;
39pub use crate::csp::matches_any_origin;
40pub use crate::generic::are_generic_filters_supported;
41pub use interface::{Filterable, UserAgent};
42
43pub fn should_filter<F: Filterable + Getter>(
52    item: &F,
53    client_ip: Option<IpAddr>,
54    config: &ProjectFiltersConfig,
55    global_config: Option<&GenericFiltersConfig>,
56) -> Result<(), FilterStatKey> {
57    generic::should_filter(item, &config.generic, global_config)?;
61
62    csp::should_filter(item, &config.csp)?;
65    client_ips::should_filter(client_ip, &config.client_ips)?;
66    releases::should_filter(item, &config.releases)?;
67    error_messages::should_filter(item, &config.error_messages)?;
68    localhost::should_filter(item, &config.localhost)?;
69    browser_extensions::should_filter(item, &config.browser_extensions)?;
70    legacy_browsers::should_filter(item, &config.legacy_browsers)?;
71    web_crawlers::should_filter(item, &config.web_crawlers)?;
72    transaction_name::should_filter(item, &config.ignore_transactions)?;
73
74    Ok(())
75}