use std::collections::{BTreeMap, HashMap};
use crate::components::summary::summary::Summary;
use crate::components::super_table::SuperTable;
use crate::extra_column::ExtraColumn;
use crate::output::output_type::OutputType;
use crate::scoring::ci_gate::CiGateResult;
use crate::scoring::quality_score::QualityScores;
pub trait Output: Send + Sync {
fn add_banner(&mut self);
fn add_used_options(&mut self);
fn set_extra_columns_from_analysis(&mut self, extra_columns: Vec<ExtraColumn>);
fn add_table_header(&mut self);
#[allow(clippy::too_many_arguments)]
fn add_table_row(
&mut self,
response_headers: &HashMap<String, String>,
url: &str,
status: i32,
elapsed_time: f64,
size: i64,
content_type: i32,
extra_parsed_content: &HashMap<String, String>,
progress_status: &str,
cache_type_flags: i32,
cache_lifetime: Option<i32>,
);
fn add_super_table(&mut self, table: &SuperTable);
fn add_total_stats(&mut self, stats: &BasicStats);
fn add_notice(&mut self, text: &str);
fn add_error(&mut self, text: &str);
fn add_quality_scores(&mut self, _scores: &QualityScores) {}
fn add_ci_gate_result(&mut self, _result: &CiGateResult) {}
fn add_summary(&mut self, summary: &mut Summary);
fn get_type(&self) -> OutputType;
fn end(&mut self);
fn get_output_text(&self) -> Option<String> {
None
}
fn get_json_content(&self) -> Option<String> {
None
}
fn set_export_file_paths(
&mut self,
_offline_paths: Option<&HashMap<String, String>>,
_markdown_paths: Option<&HashMap<String, String>>,
) {
}
}
#[derive(Debug, Clone, Default)]
pub struct BasicStats {
pub total_urls: usize,
pub total_size: i64,
pub total_size_formatted: String,
pub total_execution_time: f64,
pub total_requests_times: f64,
pub total_requests_times_avg: f64,
pub total_requests_times_min: f64,
pub total_requests_times_max: f64,
pub total_requests_times_p90: f64,
pub count_by_status: BTreeMap<i32, usize>,
pub count_by_content_type: BTreeMap<i32, usize>,
}
#[derive(Debug, Clone, Default, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CrawlerInfo {
pub name: String,
pub version: String,
pub executed_at: String,
pub command: String,
pub hostname: String,
pub final_user_agent: String,
#[serde(skip)]
pub url: String,
#[serde(skip)]
pub device: String,
#[serde(skip)]
pub workers: usize,
}