use crate::models::Proxy;
use crate::parser::settings::ParseSettings;
use crate::parser::subparser::add_nodes;
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct ParseOptions {
pub include_remarks: Vec<String>,
pub exclude_remarks: Vec<String>,
pub authorized: bool,
}
impl Default for ParseOptions {
fn default() -> Self {
Self {
include_remarks: Vec::new(),
exclude_remarks: Vec::new(),
authorized: false,
}
}
}
impl Clone for ParseOptions {
fn clone(&self) -> Self {
Self {
include_remarks: self.include_remarks.clone(),
exclude_remarks: self.exclude_remarks.clone(),
authorized: self.authorized,
}
}
}
pub fn parse_subscription(url: &str, options: ParseOptions) -> Result<Vec<Proxy>, String> {
let mut parse_settings = ParseSettings::default();
if !options.include_remarks.is_empty() {
parse_settings.include_remarks = Some(options.include_remarks.clone());
}
if !options.exclude_remarks.is_empty() {
parse_settings.exclude_remarks = Some(options.exclude_remarks.clone());
}
parse_settings.authorized = options.authorized;
let mut nodes = Vec::new();
add_nodes(url.to_string(), &mut nodes, 0, &mut parse_settings)?;
Ok(nodes)
}