libsubconverter/parser/
parse_settings.rs

1use std::collections::HashMap;
2
3use crate::models::RegexMatchConfigs;
4use crate::utils::http::{parse_proxy, ProxyConfig};
5use crate::Settings;
6use case_insensitive_string::CaseInsensitiveString;
7
8/// Rust equivalent of the parse_settings struct in C++
9/// Used for controlling the behavior of parsing functions
10#[derive(Debug, Clone)]
11pub struct ParseSettings {
12    /// Proxy to use for downloading subscriptions
13    pub proxy: ProxyConfig,
14
15    /// Array of remarks to exclude
16    pub exclude_remarks: Option<Vec<String>>,
17
18    /// Array of remarks to include
19    pub include_remarks: Option<Vec<String>>,
20
21    /// Rules for stream matching
22    pub stream_rules: Option<RegexMatchConfigs>,
23
24    /// Rules for time matching
25    pub time_rules: Option<RegexMatchConfigs>,
26
27    /// Subscription information
28    pub sub_info: Option<String>,
29
30    /// Whether operations requiring authorization are allowed
31    pub authorized: bool,
32
33    /// HTTP request headers
34    pub request_header: Option<HashMap<CaseInsensitiveString, String>>,
35
36    /// JavaScript runtime - optional depending on feature flags
37    #[cfg(feature = "js_runtime")]
38    pub js_runtime: Option<()>, // Placeholder for actual JS runtime type
39
40    /// JavaScript context - optional depending on feature flags
41    #[cfg(feature = "js_runtime")]
42    pub js_context: Option<()>, // Placeholder for actual JS context type
43}
44
45impl Default for ParseSettings {
46    fn default() -> Self {
47        // Get global settings
48        let settings = Settings::current();
49
50        ParseSettings {
51            proxy: parse_proxy(&settings.proxy_subscription),
52            exclude_remarks: if settings.exclude_remarks.is_empty() {
53                None
54            } else {
55                Some(settings.exclude_remarks.clone())
56            },
57            include_remarks: if settings.include_remarks.is_empty() {
58                None
59            } else {
60                Some(settings.include_remarks.clone())
61            },
62            stream_rules: None, // TODO: Get from global settings
63            time_rules: None,   // TODO: Get from global settings
64            sub_info: None,
65            authorized: !settings.api_access_token.is_empty(),
66            request_header: None,
67            #[cfg(feature = "js_runtime")]
68            js_runtime: None,
69            #[cfg(feature = "js_runtime")]
70            js_context: None,
71        }
72    }
73}
74
75/// Create a new ParseSettings instance with defaults from global settings
76pub fn create_parse_settings() -> ParseSettings {
77    ParseSettings::default()
78}
79
80/// Create a new ParseSettings instance with authorization
81pub fn create_authorized_settings() -> ParseSettings {
82    let mut settings = ParseSettings::default();
83    settings.authorized = true;
84    settings
85}