assemble_core/task/
task_ordering.rs1use crate::__export::TaskId;
2use crate::prelude::ProjectResult;
3use crate::project::buildable::{Buildable, IntoBuildable};
4
5use crate::Project;
6use std::collections::HashSet;
7use std::fmt::{Debug, Formatter};
8use std::sync::Arc;
9
10#[derive(Clone)]
21pub struct TaskOrdering {
22 buildable: Arc<dyn Buildable>,
23 ordering_kind: TaskOrderingKind,
24}
25
26impl Debug for TaskOrdering {
27 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
28 write!(f, "{:?}({:?})", self.ordering_kind, self.buildable)
29 }
30}
31
32impl Buildable for TaskOrdering {
33 fn get_dependencies(&self, project: &Project) -> ProjectResult<HashSet<TaskId>> {
34 self.buildable.get_dependencies(project)
35 }
36}
37
38impl TaskOrdering {
39 pub fn depends_on<B: IntoBuildable>(buildable: B) -> Self
41 where
42 B::Buildable: 'static,
43 {
44 Self {
45 buildable: Arc::new(buildable.into_buildable()),
46 ordering_kind: TaskOrderingKind::DependsOn,
47 }
48 }
49
50 pub fn buildable(&self) -> &Arc<dyn Buildable> {
51 &self.buildable
52 }
53 pub fn ordering_kind(&self) -> &TaskOrderingKind {
54 &self.ordering_kind
55 }
56}
57
58#[derive(Debug, Eq, PartialEq, Copy, Clone)]
60pub enum TaskOrderingKind {
61 DependsOn,
62 FinalizedBy,
63 RunsBefore,
64 RunsAfter,
65}