1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use hdp_primitives::task::TaskEnvelope;

use super::{config::CompilerConfig, Compilable, CompilationResult, CompileError};

impl Compilable for Vec<TaskEnvelope> {
    async fn compile(
        &self,
        compile_config: &CompilerConfig,
    ) -> Result<CompilationResult, CompileError> {
        let (datalakes, modules) = TaskEnvelope::divide_tasks(self.to_vec());
        let mut compiled_result = if !datalakes.is_empty() {
            datalakes.compile(compile_config).await?
        } else {
            CompilationResult::default()
        };

        let module_compile_result = if !modules.is_empty() {
            modules.compile(compile_config).await?
        } else {
            CompilationResult::default()
        };
        compiled_result.extend(module_compile_result);
        if compiled_result == CompilationResult::default() {
            Err(CompileError::CompilationFailed)
        } else {
            Ok(compiled_result)
        }
    }
}