use super::{GapNotice, OrphanReport, PageLink};
use provenance_core::QuestionStatus;
use serde::Serialize;
pub const HOMEPAGE_DOMAIN_ROW_CAP: usize = 20;
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct SearchEntry {
pub link: PageLink,
pub statement: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct SearchIndexPage {
pub scope: String,
pub title: String,
pub coverage: String,
pub example: Option<String>,
pub entries: Vec<SearchEntry>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct DecisionIndexPage {
pub scope: String,
pub title: String,
pub entries: Vec<SearchEntry>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct OpenQuestionNotice {
pub question: String,
pub status: QuestionStatus,
pub requirement: Option<PageLink>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct UnfinishedPage {
pub scope: String,
pub title: String,
pub gaps: Vec<GapNotice>,
pub orphans: OrphanReport,
pub open_questions: Vec<OpenQuestionNotice>,
}
impl UnfinishedPage {
pub const fn item_count(&self) -> usize {
self.gaps.len() + self.orphans.sources.len() + self.open_questions.len()
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub enum DomainState {
Defined {
id: String,
name: String,
description: Option<String>,
},
Missing {
id: String,
},
Unassigned,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct DomainGroup {
pub state: DomainState,
pub requirements: Vec<PageLink>,
pub rules: Vec<PageLink>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct DomainIndexPage {
pub scope: String,
pub title: String,
pub authored_group_count: usize,
pub groups: Vec<DomainGroup>,
pub all_requirements: Vec<SearchEntry>,
pub all_rules: Vec<SearchEntry>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct HomepageDomain {
pub id: String,
pub name: String,
pub description: Option<String>,
pub requirements: usize,
pub rules: usize,
}