greentic_component/store/
meta.rs1use anyhow::Result;
2use serde::{Deserialize, Serialize};
3use sha2::{Digest, Sha256};
4
5use super::ComponentId;
6
7#[derive(Clone, Debug, Serialize, Deserialize)]
8pub struct MetaInfo {
9 pub id: ComponentId,
10 pub size: u64,
11 pub abi_version: String,
12 pub provider_name: Option<String>,
13 pub provider_version: Option<String>,
14 pub capabilities: Vec<String>,
15}
16
17pub async fn compute_id_and_meta(bytes: &[u8]) -> Result<(ComponentId, MetaInfo)> {
18 let mut hasher = Sha256::new();
19 hasher.update(bytes);
20 let digest = hex::encode(hasher.finalize());
21 let id = ComponentId(format!("sha256:{digest}"));
22
23 let size = bytes.len() as u64;
24
25 let meta = MetaInfo {
27 id: id.clone(),
28 size,
29 abi_version: "greentic-abi-0".to_string(),
30 provider_name: None,
31 provider_version: None,
32 capabilities: Vec::new(),
33 };
34
35 Ok((id, meta))
36}