hdp_primitives/task/
mod.rs1use crate::solidity_types::traits::DatalakeComputeCodecs;
3use alloy::primitives::B256;
4use cairo_lang_starknet_classes::casm_contract_class::CasmContractClass;
5use datalake::DatalakeCompute;
6use module::Module;
7
8pub mod datalake;
9pub mod module;
10
11#[derive(Clone, Debug)]
14pub enum TaskEnvelope {
15 DatalakeCompute(DatalakeCompute),
16 Module(ExtendedModule),
17}
18
19#[derive(Clone, Debug)]
20pub struct ExtendedModule {
21 pub task: Module,
22 pub module_class: CasmContractClass,
23}
24
25impl TaskEnvelope {
26 pub fn commit(&self) -> B256 {
27 match self {
28 TaskEnvelope::DatalakeCompute(task) => task.commit(),
29 TaskEnvelope::Module(module) => module.task.commit(),
30 }
31 }
32
33 pub fn divide_tasks(tasks: Vec<TaskEnvelope>) -> (Vec<DatalakeCompute>, Vec<ExtendedModule>) {
34 let (datalake_envelopes, module_envelopes): (Vec<_>, Vec<_>) = tasks
36 .into_iter()
37 .partition(|task| matches!(task, TaskEnvelope::DatalakeCompute(_)));
38
39 let datalake_tasks = datalake_envelopes
40 .into_iter()
41 .filter_map(|task| {
42 if let TaskEnvelope::DatalakeCompute(datalake_task) = task {
43 Some(datalake_task)
44 } else {
45 None
46 }
47 })
48 .collect();
49
50 let module_tasks = module_envelopes
51 .into_iter()
52 .filter_map(|task| {
53 if let TaskEnvelope::Module(module_task) = task {
54 Some(module_task)
55 } else {
56 None
57 }
58 })
59 .collect();
60
61 (datalake_tasks, module_tasks)
62 }
63
64 pub fn variants() -> Vec<String> {
65 vec!["DATALAKE_COMPUTE", "MODULE"]
66 .into_iter()
67 .map(String::from)
68 .collect()
69 }
70}