1use crate::Jam;
4use anyhow::Result;
5use service::{
6 ServiceId,
7 service::{WorkItem, WorkPackage},
8};
9
10impl Jam {
11 pub fn add_item(&mut self, item: WorkItem) {
15 self.items.push(item);
16 }
17
18 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 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 pub fn send(&mut self, service: ServiceId, payload: Vec<u8>) -> Result<WorkPackage> {
51 self.pack(service, payload)?;
52 self.build()
53 }
54}