1use termesh_core::{Problem, TaskSpec};
2use termesh_filesystem::FileSystemService;
3use termesh_workspace::WorkspaceRoot;
4
5#[derive(Debug, Default, PartialEq, Eq)]
6pub struct DecodedTaskOutput {
7 pub display: Vec<u8>,
8 pub problems: Vec<Problem>,
9}
10
11pub trait TaskOutputDecoder: Send {
12 fn push(&mut self, bytes: &[u8]) -> DecodedTaskOutput;
13 fn finish(&mut self) -> DecodedTaskOutput;
14}
15
16pub trait TaskService: Send + Sync {
17 fn catalog(&self, root: &WorkspaceRoot, fs: &dyn FileSystemService) -> Vec<TaskSpec>;
18 fn decoder(&self, task: &TaskSpec) -> Option<Box<dyn TaskOutputDecoder>>;
19}