casper_client/cli/
fields_container.rs

1use 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}