bucky-objects 0.1.0

Bucky objects library
Documentation
use crate::*;
use std::str::FromStr;

#[test]
fn test_codec() {
    let area = Area::new(1, 2, 1, 0);
    let owner = ObjectId::from_str("5r4MYfFMLwNG8oaBA7tmssaV2Z94sVZUfKXejfC1RMjX").unwrap();
    let unique_id = UniqueId::create_with_hash("test_device".as_bytes());

    let sn_list =
        vec![DeviceId::from_str("5aSixgMAjePp1j5M7ngnU6CN6Do2gitKirviqJswuGVM").unwrap()];

    let private_key = PrivateKey::generate_rsa(1024).unwrap();
    let public_key = private_key.public();

    let device = Device::new(
        Some(owner.clone()),
        unique_id,
        vec![],
        sn_list,
        vec![],
        public_key,
        area,
        DeviceCategory::IOSMobile,
    )
    .build();

    let buf = device.to_vec().unwrap();
    println!("device without object_id: {}", hex::encode(&buf));

    {
        let device1 = Device::clone_from_slice(&buf).unwrap();
        assert!(device1.body().as_ref().unwrap().object_id().is_none());
    }

    let mut device_with_body_object_id = device.clone();
    device_with_body_object_id
        .body_mut()
        .as_mut()
        .unwrap()
        .set_object_id(Some(owner.clone()));

    let buf = device_with_body_object_id.to_vec().unwrap();
    println!("device with object_id: {}", hex::encode(&buf));

    {
        let device1 = Device::clone_from_slice(&buf).unwrap();
        assert_eq!(device1.body().as_ref().unwrap().object_id(), &Some(owner));
    }
}


/*
The following code needs to be run with old code that does not support body object_id to test compatibility with the new format
 */
/* 
#[test]
fn test_old_compatibility() {
    let s: &str = "00015a02002f58f47dc0d1fe4800000000765965ba5259c2ca0fb345f95b17ad022415ca9fe3eec3d3c431920102000108010030818902818100ab41eb7c0c74eddb92f3ec7efcbe5c93abd8e5df41866af1dfc1807dbf0731c04920e5bb714e9379c986ab0b0f22153a878ac03d94d558b8402f70da4a8d5f170ef8360b0f713ba6b0c869c94063ae1dbc5d84938be7d892f8138dec9b299bc209ddb2538166b10c806b7bd7da12ba87502cdff77f4f5a2e12a6cca5668dc02502030100010000000000000000000000000000000000000000000000000010fb060e8dc1f2b688c4ee3a6a1e2d8d0700002f58f47dc0d21c00012212204400000000b8b0e69a98ca86a81f12eed2d7457dc6318d9f164b2ec75012af88";
    let buf_without_body_object_id = hex::decode(s).unwrap();
    let buf_with_body_object_id: Vec<u8> = hex::decode("00015a02002f58f47dc0d1fe4800000000765965ba5259c2ca0fb345f95b17ad022415ca9fe3eec3d3c431920102000108010030818902818100ab41eb7c0c74eddb92f3ec7efcbe5c93abd8e5df41866af1dfc1807dbf0731c04920e5bb714e9379c986ab0b0f22153a878ac03d94d558b8402f70da4a8d5f170ef8360b0f713ba6b0c869c94063ae1dbc5d84938be7d892f8138dec9b299bc209ddb2538166b10c806b7bd7da12ba87502cdff77f4f5a2e12a6cca5668dc02502030100010000000000000000000000000000000000000000000000000010fb060e8dc1f2b688c4ee3a6a1e2d8d0704002f58f47dc0d21c00220a204800000000765965ba5259c2ca0fb345f95b17ad022415ca9fe3eec3d3c4319200012212204400000000b8b0e69a98ca86a81f12eed2d7457dc6318d9f164b2ec75012af88").unwrap();

    let device1 = Device::clone_from_slice(&buf_without_body_object_id).unwrap();
    let device2 = Device::clone_from_slice(&buf_with_body_object_id).unwrap();

    let buf1 = device1.to_vec().unwrap();
    let buf = device2.to_vec().unwrap();
    assert_eq!(buf1, buf);

    assert_eq!(buf, buf_without_body_object_id);
    assert_ne!(buf, buf_with_body_object_id);
}
*/