use futures::{StreamExt, TryStreamExt};
use twine_lib::resolver::*;
use twine_lib::twine::Strand;
use twine_http_store::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let resolver = v2::HttpStore::new(reqwest::Client::new()).with_url("http://localhost:3000/");
println!("strands:");
let strands: Vec<Strand> = resolver
.strands()
.await?
.inspect_ok(|strand| {
println!(
"> cid: {}\n> description: {:?}",
strand.cid(),
strand.details().get("description").unwrap()
);
})
.inspect_err(|err| {
eprintln!("error: {}", err);
})
.try_collect()
.await?;
let cid = strands[0].cid().clone();
let twine = resolver.resolve_strand(cid).await?.unpack();
println!("specific strand resolved: {}", twine.cid());
let tenth = resolver.resolve_index(&twine, 10).await?;
println!("tenth: {}", tenth.cid());
let latest = resolver.resolve_latest(&twine).await?;
println!("latest: {}", latest.cid());
resolver
.resolve_range((&twine, 0..=50))
.await?
.inspect_ok(|twine| println!("index: {}, cid: {}", twine.index(), twine.cid()))
.inspect_err(|err| eprintln!("error: {}", err))
.filter_map(|twine| async { twine.ok() })
.for_each(|_| async {})
.await;
Ok(())
}