use crate::traits::{Config, Matcher, Storage, UrlFilter, UrlRewriter};
use std::collections::HashMap;
use std::sync::Arc;
use serde::Deserialize;
use serde_json::Value;
pub struct PatternAndType {
pub pattern: String,
pub pattern_type: PatternType,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PatternType {
Resource,
Pagination,
Content,
ScrapedContent,
ActualUri,
Others,
}
#[derive(Debug, Clone)]
pub struct PatternMatchResult {
pub pattern: String,
pub pattern_type: PatternType,
pub resource_string: Option<String>,
pub additoinal_params: Option<HashMap<String, String>>,
}
pub struct Registerable {
pub configurator: Option<Arc<dyn Config + Send + Sync>>,
pub matcher: Arc<dyn Matcher + Send + Sync>,
pub storage: Option<Arc<dyn Storage + Send + Sync>>,
pub url_filter: Option<Arc<dyn UrlFilter + Send + Sync>>,
pub url_rewriter: Option<Arc<dyn UrlRewriter + Send + Sync>>,
}
#[derive(Debug, Clone)]
pub struct HtmlImage {
pub src: String,
pub inner_html: String,
}
#[derive(Debug, Clone)]
pub struct HtmlPlainTextAndImages {
pub text: String,
pub images: Vec<HtmlImage>,
}
#[derive(Debug, Deserialize)]
pub struct AppConfigJson5 {
pub core: CoreConfig,
#[serde(default)]
pub plugins: HashMap<String, Value>,
}
#[derive(Debug, Deserialize)]
pub struct CoreConfig {
#[serde(default)]
pub proxy: Option<ProxyConfig>,
pub storage: StorageConfig,
pub max_concurrency: u32,
}
#[derive(Debug, Deserialize)]
pub struct ProxyConfig {
pub username: Option<String>,
pub password: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct StorageConfig {
#[serde(default)]
pub root_folder: String,
}
#[derive(Clone, Debug, Default)]
pub struct PluginContext {
params: HashMap<String, String>,
}
impl PluginContext {
pub fn new(params: HashMap<String, String>) -> Self {
Self { params }
}
pub fn get(&self, key: &str) -> Option<&String> {
self.params.get(key)
}
pub fn insert(&mut self, key: String, value: String) {
self.params.insert(key, value);
}
}