use fieldwork::Fieldwork;
use rustdoc_types::ItemKind;
use strum::VariantArray;
use crate::{filter::Filter, tools::GetItem, verbosity::Verbosity};
#[derive(Debug, Clone, Fieldwork)]
#[fieldwork(get)]
pub(crate) struct FormatContext {
include_source: bool,
#[field = "is_recursive"]
recursive: bool,
#[field(copy)]
verbosity: Verbosity,
filters: Vec<Filter>,
}
impl Default for FormatContext {
fn default() -> Self {
Self {
include_source: false,
recursive: false,
verbosity: Verbosity::Brief,
filters: Filter::VARIANTS.into(),
}
}
}
impl FormatContext {
pub(crate) fn from_get_item(item: &GetItem) -> Self {
Self {
include_source: item.include_source(),
recursive: item.recursive(),
verbosity: item.verbosity(),
filters: item.filters().to_vec(),
}
}
pub(crate) fn filter_match_kind(&self, kind: ItemKind) -> bool {
self.filters.iter().any(|filter| filter.matches_kind(kind))
}
}