summaryrefslogtreecommitdiffstats
path: root/src/profile.rs
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-04-05 13:12:54 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-04-05 13:12:54 +0200
commit239bcf696735c202ee7eaceb0db3f2a7f3e2084d (patch)
tree0b4201adaf3f81eff2e1702a5a9e5f375132e519 /src/profile.rs
parent79a83f1ffc4fd328e10f4fcdfddb9d5d3682601a (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.rs27
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
+ }
+ })
+ }
+}