#[allow(clippy::wildcard_imports)]
use super::*;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BlockedMember {
pub issue: IssueKey,
pub display: String,
pub reason: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EpicProgress {
pub done: usize,
pub total: usize,
pub progress: Progress,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct WeightedProgress {
pub own_weight: Option<i64>,
pub weighted_children: usize,
pub unweighted_children: usize,
pub done_weight: i64,
pub total_weight: i64,
pub percent: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EpicRollup {
pub epic_id: EpicId,
pub name: String,
pub progress: EpicProgress,
pub child_count: usize,
pub weighted_progress: WeightedProgress,
pub blocked: usize,
pub blocked_members: Vec<BlockedMember>,
pub missing_references: Vec<EpicReferenceResolution>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EpicEventKind {
EpicReferenced,
EpicDereferenced,
}
impl EpicEventKind {
#[must_use]
pub fn as_str(self) -> &'static str {
match self {
EpicEventKind::EpicReferenced => "epic_referenced",
EpicEventKind::EpicDereferenced => "epic_dereferenced",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EpicEvent {
pub kind: EpicEventKind,
pub epic_id: String,
pub detail: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EpicChange {
pub issue: IssueKey,
pub epic_ids: Vec<String>,
pub event: Option<EpicEvent>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BulkEpicOutcome {
pub selector: u32,
pub outcome: Result<EpicChange, EpicError>,
}
pub fn rollup<N: EpicNode>(
config: &Config,
issues: &[N],
reference: &str,
targets: &ReferenceTargets,
graph: &RelationshipGraph<'_>,
) -> Result<EpicRollup, EpicError> {
EpicIndex::build(config, issues).rollup(config, reference, targets, graph)
}