1use prost::Message;
2
3const HSM_REQUEST_SIGNER_STATE_FIELD_NUMBER: u32 = 4;
4const HSM_RESPONSE_SIGNER_STATE_FIELD_NUMBER: u32 = 5;
5
6fn protobuf_varint_len(mut value: usize) -> usize {
7 let mut len = 1;
8 while value >= 0x80 {
9 value >>= 7;
10 len += 1;
11 }
12 len
13}
14
15fn signer_state_wire_bytes(entries: &[crate::pb::SignerStateEntry], field_number: u32) -> usize {
16 let field_key = ((field_number << 3) | 2) as usize; let field_key_len = protobuf_varint_len(field_key);
18 entries
19 .iter()
20 .map(|entry| {
21 let entry_len = entry.encoded_len();
22 field_key_len + protobuf_varint_len(entry_len) + entry_len
23 })
24 .sum()
25}
26
27pub fn signer_state_request_wire_bytes(entries: &[crate::pb::SignerStateEntry]) -> usize {
28 signer_state_wire_bytes(entries, HSM_REQUEST_SIGNER_STATE_FIELD_NUMBER)
29}
30
31pub fn signer_state_response_wire_bytes(entries: &[crate::pb::SignerStateEntry]) -> usize {
32 signer_state_wire_bytes(entries, HSM_RESPONSE_SIGNER_STATE_FIELD_NUMBER)
33}
34
35pub fn savings_percent(full_wire_bytes: usize, diff_wire_bytes: usize) -> usize {
36 if full_wire_bytes == 0 {
37 return 0;
38 }
39 full_wire_bytes
40 .saturating_sub(diff_wire_bytes)
41 .saturating_mul(100)
42 / full_wire_bytes
43}