jade_testing/
builder.rs

1//! Work package builder implementation
2
3use crate::Jam;
4use anyhow::Result;
5use service::{
6    ServiceId,
7    service::{WorkItem, WorkPackage},
8};
9
10impl Jam {
11    /// Add a work item
12    ///
13    /// TODO: validate the work item
14    pub fn add_item(&mut self, item: WorkItem) {
15        self.items.push(item);
16    }
17
18    /// Build a work package
19    pub fn build(&mut self) -> Result<WorkPackage> {
20        let package = WorkPackage {
21            authorization: self.auth.token.clone(),
22            auth_code_host: self.auth.host,
23            auth_code_hash: self.auth.code_hash,
24            config: self.auth.config.clone(),
25            context: self.chain.refine_context(),
26            items: self.items.drain(..).collect(),
27        };
28
29        Ok(package)
30    }
31
32    /// pack a work item
33    pub fn pack(&mut self, service: ServiceId, payload: Vec<u8>) -> Result<()> {
34        let item = WorkItem {
35            service,
36            code_hash: self.chain.service(service)?,
37            payload,
38            refine_gas_limit: 1_000_000,
39            accumulate_gas_limit: 1_000_000,
40            import_segments: Default::default(),
41            extrinsic: Default::default(),
42            export_count: Default::default(),
43        };
44
45        self.add_item(item);
46        Ok(())
47    }
48
49    /// Send a work package
50    pub fn send(&mut self, service: ServiceId, payload: Vec<u8>) -> Result<WorkPackage> {
51        self.pack(service, payload)?;
52        self.build()
53    }
54}