neo_solidity/
codegen_helpers.rs1pub fn encode_small_int(n: i64) -> Vec<u8> {
7 match n {
8 -1 => vec![0x0F], 0..=16 => vec![0x10 + n as u8], _ => encode_varint(n),
11 }
12}
13
14fn encode_varint(n: i64) -> Vec<u8> {
15 let bytes = n.to_le_bytes();
16 let len = minimal_bytes(n);
17 let opcode = match len {
18 1 => 0x00, 2 => 0x01, 4 => 0x02, _ => 0x03, };
23 let mut result = vec![opcode];
24 result.extend_from_slice(&bytes[..len]);
25 result
26}
27
28fn minimal_bytes(n: i64) -> usize {
29 if (-128..=127).contains(&n) {
30 1
31 } else if (-32768..=32767).contains(&n) {
32 2
33 } else if (-2147483648..=2147483647).contains(&n) {
34 4
35 } else {
36 8
37 }
38}