From 239bcf696735c202ee7eaceb0db3f2a7f3e2084d Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 5 Apr 2021 13:12:54 +0200 Subject: Add LoadedNode type for caching Signed-off-by: Matthias Beyer --- src/profile.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src') diff --git a/src/profile.rs b/src/profile.rs index 26ac6bb..3c4b1d5 100644 --- a/src/profile.rs +++ b/src/profile.rs @@ -1,6 +1,8 @@ use std::collections::HashMap; use anyhow::Result; +use daglib::Node as _; +use cid::Cid; use crate::backend::Id; use crate::backend::Node; @@ -27,3 +29,28 @@ impl Profile { Ok(Profile { dag, cache }) } } + + +pub struct LoadedNode { + v: String, + parents: Vec, + payload: crate::backend::Payload, +} + +impl LoadedNode { + async fn load_from_node(backend: &IpfsEmbedBackend, cid: &Cid) -> Result { + let block = backend.ipfs().fetch(cid).await?; + let node = block.decode::()?; + + let block = backend.ipfs().fetch(node.payload_id()).await?; + let payload = block.decode::()?; + + Ok({ + LoadedNode { + v: node.version().to_string(), + parents: node.parent_ids().clone(), + payload + } + }) + } +} -- cgit v1.2.3