use super::*;
use crate::filters::FeroxFilters;
use crate::{config::Configuration, statistics::Stats, traits::FeroxSerialize, utils::fmt_err};
use anyhow::{Context, Result};
use serde::Serialize;
use std::collections::HashSet;
use std::sync::Arc;
#[derive(Serialize, Debug)]
pub struct FeroxState {
scans: Arc<FeroxScans>,
config: Arc<Configuration>,
responses: &'static FeroxResponses,
statistics: Arc<Stats>,
collected_extensions: HashSet<String>,
filters: Arc<FeroxFilters>,
}
impl FeroxState {
pub fn new(
scans: Arc<FeroxScans>,
config: Arc<Configuration>,
responses: &'static FeroxResponses,
statistics: Arc<Stats>,
filters: Arc<FeroxFilters>,
) -> Self {
let collected_extensions = match scans.collected_extensions.read() {
Ok(extensions) => extensions.clone(),
Err(_) => HashSet::new(),
};
Self {
scans,
config,
responses,
statistics,
collected_extensions,
filters,
}
}
}
impl FeroxSerialize for FeroxState {
fn as_str(&self) -> String {
format!("{self:?}")
}
fn as_json(&self) -> Result<String> {
serde_json::to_string(&self)
.with_context(|| fmt_err("Could not convert scan's running state to JSON"))
}
}