buildkit_llb/serialization/
output.rs

1use buildkit_proto::pb;
2use prost::Message;
3use sha2::{Digest, Sha256};
4
5#[derive(Debug, Default, Clone)]
6pub(crate) struct Node {
7    pub bytes: Vec<u8>,
8    pub digest: String,
9    pub metadata: pb::OpMetadata,
10}
11
12impl Node {
13    pub fn new(message: pb::Op, metadata: pb::OpMetadata) -> Self {
14        let mut bytes = Vec::new();
15        message.encode(&mut bytes).unwrap();
16
17        Self {
18            digest: Self::get_digest(&bytes),
19            bytes,
20            metadata,
21        }
22    }
23
24    pub fn get_digest(bytes: &[u8]) -> String {
25        let mut hasher = Sha256::new();
26        hasher.input(&bytes);
27
28        format!("sha256:{:x}", hasher.result())
29    }
30}