1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use anchor_lang::{error::AnchorError, solana_program::pubkey::Pubkey};

pub fn vec_to_u128(vec: &Vec<u8>) -> u128 {
    assert_eq!(vec.len(), 16, "Vector length must be 16 bytes");
    let mut array = [0u8; 16];
    array.copy_from_slice(&vec);
    u128::from_be_bytes(array)
}

pub fn pubkey_to_u128(pubkey: &Pubkey) -> u128 {
    let bytes = pubkey.to_bytes();

    let mut result: u128 = 0;
    for &byte in &bytes[..16] {
        result = (result << 8) | byte as u128;
    }
    result
}

pub fn bytes_to_binary(i: &[u8; 32], r: &mut Vec<u8>) {
    for m in i.iter() {
        format!("{:8b}", m).chars().for_each(|b| if b == '1' { r.push(1); } else { r.push(0) } );
    }
}

pub fn err(msg: &str) -> AnchorError {
    AnchorError {
        error_msg: msg.to_string(),
        error_name: "Exception".to_string(),
        error_code_number: 0,
        error_origin: None,
        compared_values: None
    }
}