diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-04-05 13:12:54 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-04-05 13:12:54 +0200 |
commit | 239bcf696735c202ee7eaceb0db3f2a7f3e2084d (patch) | |
tree | 0b4201adaf3f81eff2e1702a5a9e5f375132e519 /src/profile.rs | |
parent | 79a83f1ffc4fd328e10f4fcdfddb9d5d3682601a (diff) |
Add LoadedNode type for caching
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/profile.rs')
-rw-r--r-- | src/profile.rs | 27 |
1 files changed, 27 insertions, 0 deletions
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<crate::backend::Id>, + payload: crate::backend::Payload, +} + +impl LoadedNode { + async fn load_from_node(backend: &IpfsEmbedBackend, cid: &Cid) -> Result<LoadedNode> { + let block = backend.ipfs().fetch(cid).await?; + let node = block.decode::<libipld::cbor::DagCborCodec, crate::backend::Node>()?; + + let block = backend.ipfs().fetch(node.payload_id()).await?; + let payload = block.decode::<libipld::cbor::DagCborCodec, crate::backend::Payload>()?; + + Ok({ + LoadedNode { + v: node.version().to_string(), + parents: node.parent_ids().clone(), + payload + } + }) + } +} |