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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use anyhow::Result;
use aruna_rust_api::api::storage::models::v2::{generic_resource, User};
use base64::{engine::general_purpose, Engine};
use xxhash_rust::xxh3::xxh3_128;

pub fn checksum_resource(gen_res: generic_resource::Resource) -> Result<String> {
    match gen_res {
        generic_resource::Resource::Project(mut proj) => {
            proj.stats = None;
            Ok(general_purpose::STANDARD_NO_PAD
                .encode(xxh3_128(&bincode::serialize(&proj)?).to_be_bytes())
                .to_string())
        }
        generic_resource::Resource::Collection(mut col) => {
            col.stats = None;
            Ok(general_purpose::STANDARD_NO_PAD
                .encode(xxh3_128(&bincode::serialize(&col)?).to_be_bytes())
                .to_string())
        }
        generic_resource::Resource::Dataset(mut ds) => {
            ds.stats = None;
            Ok(general_purpose::STANDARD_NO_PAD
                .encode(xxh3_128(&bincode::serialize(&ds)?).to_be_bytes())
                .to_string())
        }
        generic_resource::Resource::Object(obj) => Ok(general_purpose::STANDARD_NO_PAD
            .encode(xxh3_128(&bincode::serialize(&obj)?).to_be_bytes())
            .to_string()),
    }
}

pub fn checksum_user(user: &User) -> Result<String> {
    Ok(general_purpose::STANDARD_NO_PAD
        .encode(xxh3_128(&bincode::serialize(user)?).to_be_bytes())
        .to_string())
}

// #[cfg(test)]
// mod tests {
//     use super::*;
//     use aruna_rust_api::api::storage::models::v2::{generic_resource, Project, User};
//     use diesel_ulid::DieselUlid;

//     #[test]
//     fn checksum_user_test() {
//         let user = User {
//             id: DieselUlid::generate().to_string(),
//             external_ids: todo!(),
//             display_name: todo!(),
//             active: todo!(),
//             email: todo!(),
//             attributes: todo!(),
//         };

//         let checksum = checksum_user(&user).unwrap();
//     }
// }