solana_binary_encoder/lib.rs
1use {
2 crate::{
3 compression::{compress_best},
4 },
5 // convert::generated,
6 // block_processor::BlockProcessor,
7 transaction_status::{
8 EncodedTransactionWithStatusMeta,
9 EncodedConfirmedBlock,
10 VersionedConfirmedBlock,
11 UiConfirmedBlock,
12 ConfirmedBlock,
13 UiTransactionEncoding,
14 BlockEncodingOptions,
15 TransactionDetails,
16
17 EncodedConfirmedTransactionWithStatusMeta,
18 TransactionWithStatusMeta
19 },
20
21 // config::Config,
22 log::{debug, info},
23};
24
25// pub mod block_processor;
26// pub mod account_decoder;
27// pub mod account_keys;
28// pub mod bincode_utils;
29// pub mod cell_decoder;
30// pub mod ledger_storage;
31// pub mod cli_output;
32// pub mod clock;
33pub mod compression;
34// pub mod consumer;
35pub mod convert;
36// pub mod custom_error;
37// pub mod deserialize_utils;
38pub mod extract_memos;
39// pub mod output;
40pub mod hash;
41// pub mod instruction;
42// pub mod loaded_addresses;
43// pub mod loaded_message;
44// pub mod message;
45// pub mod message_header;
46// pub mod message_v0;
47// pub mod native_token;
48pub mod option_serializer;
49// pub mod packet;
50pub mod parse_accounts;
51pub mod parse_instruction;
52// pub mod program_utils;
53// pub mod pubkey;
54pub mod parse_token;
55// pub mod reward_type;
56// pub mod short_vec;
57// pub mod serde_varint;
58pub mod sanitize;
59// pub mod signature;
60// pub mod stake_instruction;
61// pub mod stake_state;
62// pub mod system_instruction;
63// pub mod sysvar;
64// pub mod transaction;
65// pub mod transaction_context;
66pub mod transaction_status;
67// pub mod transaction_error;
68// pub mod versioned_message;
69// pub mod versioned_transaction;
70// pub mod vote_instruction;
71// pub mod vote_state;
72
73pub async fn encode_block<T>(
74 // &mut self,
75 // table: &str,
76 data: T,
77) -> Result<Vec<u8>, Box<dyn std::error::Error>>
78 where
79 T: prost::Message,
80{
81 // let mut bytes_written = 0;
82 // let mut new_row_data = vec![];
83 // for (row_key, data) in cells {
84 let mut buf = Vec::with_capacity(data.encoded_len());
85 data.encode(&mut buf).unwrap();
86 let data = compress_best(&buf)?;
87 // bytes_written += data.len();
88 // new_row_data.push((row_key, vec![("encoder.proto".to_string(), data)]));
89 // }
90
91 // self.put_row_data(table, "x", &new_row_data).await?;
92 // Ok(bytes_written)
93 Ok(data)
94}
95
96pub fn convert_block(
97 encoded_block: EncodedConfirmedBlock,
98 encoding: UiTransactionEncoding,
99 options: BlockEncodingOptions,
100) -> Result<VersionedConfirmedBlock, Box<dyn std::error::Error>> {
101 // Step 1: Convert EncodedConfirmedBlock to UiConfirmedBlock
102 let ui_block: UiConfirmedBlock = encoded_block.into();
103
104 // Step 2: Decode UiConfirmedBlock to ConfirmedBlock
105 let confirmed_block = ConfirmedBlock::decode_with_options(ui_block, encoding, options)?;
106
107 // Step 3: Try to convert ConfirmedBlock to VersionedConfirmedBlock
108 let versioned_block = VersionedConfirmedBlock::try_from(confirmed_block)?;
109
110 Ok(versioned_block)
111}
112
113pub async fn encode_transaction<T>(
114 data: T,
115) -> Result<Vec<u8>, Box<dyn std::error::Error>>
116 where
117 T: prost::Message,
118{
119 let mut buf = Vec::with_capacity(data.encoded_len());
120 data.encode(&mut buf).unwrap();
121 let data = compress_best(&buf)?;
122
123 Ok(data)
124}
125
126pub fn convert_transaction(
127 encoded_tx: EncodedTransactionWithStatusMeta,
128 encoding: UiTransactionEncoding,
129 // options: BlockEncodingOptions,
130) -> Result<TransactionWithStatusMeta, Box<dyn std::error::Error>> {
131
132 let confirmed_tx = TransactionWithStatusMeta::decode(encoded_tx, encoding)?;
133
134 // Try to convert ConfirmedBlock to VersionedConfirmedBlock
135 // let versioned_block = VersionedConfirmedBlock::try_from(confirmed_tx)?;
136
137 Ok(confirmed_tx)
138}