casper_client/cli/
fields_container.rs1use alloc::collections::BTreeMap;
2use casper_types::{
3 bytesrepr::{Bytes, ToBytes},
4 TransactionArgs, TransactionEntryPoint, TransactionScheduling, TransactionTarget,
5};
6
7pub(crate) const ARGS_MAP_KEY: u16 = 0;
8pub(crate) const TARGET_MAP_KEY: u16 = 1;
9pub(crate) const ENTRY_POINT_MAP_KEY: u16 = 2;
10pub(crate) const SCHEDULING_MAP_KEY: u16 = 3;
11
12#[derive(Clone, Eq, PartialEq, Debug)]
13pub(crate) enum FieldsContainerError {
14 CouldNotSerializeField { field_index: u16 },
15}
16
17pub(crate) struct FieldsContainer {
18 pub(super) args: TransactionArgs,
19 pub(super) target: TransactionTarget,
20 pub(super) entry_point: TransactionEntryPoint,
21 pub(super) scheduling: TransactionScheduling,
22}
23
24impl FieldsContainer {
25 pub(crate) fn new(
26 args: TransactionArgs,
27 target: TransactionTarget,
28 entry_point: TransactionEntryPoint,
29 scheduling: TransactionScheduling,
30 ) -> Self {
31 FieldsContainer {
32 args,
33 target,
34 entry_point,
35 scheduling,
36 }
37 }
38
39 pub(crate) fn to_map(&self) -> Result<BTreeMap<u16, Bytes>, FieldsContainerError> {
40 let mut map: BTreeMap<u16, Bytes> = BTreeMap::new();
41 map.insert(
42 ARGS_MAP_KEY,
43 self.args.to_bytes().map(Into::into).map_err(|_| {
44 FieldsContainerError::CouldNotSerializeField {
45 field_index: ARGS_MAP_KEY,
46 }
47 })?,
48 );
49 map.insert(
50 TARGET_MAP_KEY,
51 self.target.to_bytes().map(Into::into).map_err(|_| {
52 FieldsContainerError::CouldNotSerializeField {
53 field_index: TARGET_MAP_KEY,
54 }
55 })?,
56 );
57 map.insert(
58 ENTRY_POINT_MAP_KEY,
59 self.entry_point.to_bytes().map(Into::into).map_err(|_| {
60 FieldsContainerError::CouldNotSerializeField {
61 field_index: ENTRY_POINT_MAP_KEY,
62 }
63 })?,
64 );
65 map.insert(
66 SCHEDULING_MAP_KEY,
67 self.scheduling.to_bytes().map(Into::into).map_err(|_| {
68 FieldsContainerError::CouldNotSerializeField {
69 field_index: SCHEDULING_MAP_KEY,
70 }
71 })?,
72 );
73 Ok(map)
74 }
75}