ipfs-api 0.13.0

Implementation of an IPFS HTTP API client
Documentation

Rust library for connecting to the IPFS HTTP API using Hyper/Actix.

Usage

Using Hyper

To use the Hyper backend, declare:

[dependencies]
ipfs-api-backend-hyper = "0.2"

You can specify either with-hyper-rustls or with-hyper-tls (mutually exclusive) feature for TLS support.

Using Actix

To use the Actix backend, declare:

[dependencies]
ipfs-api-backend-actix = "0.3"

Builder Pattern

With either the Hyper or Actix backend, you can specify the with-builder feature to enable a builder pattern to use when building requests.

Usage (DEPRECATED)

[dependencies]
ipfs-api = "0.13.0"

Feature Flags (DEPRECATED)

You can use actix-web as a backend instead of hyper.

[dependencies]
ipfs-api = { version = "0.13.0", features = ["with-actix"], default-features = false }

You also have the option of using rustls instead of native tls:

[dependencies]
ipfs-api = { version = "0.13.0", features = ["with-hyper-rustls"], default-features = false }

To enable the builder pattern (default) use the with-builder feature:

[dependencies]
ipfs-api = { version = "0.13.0", features = ["with-hyper-rustls", "with-builder"], default-features = false }

Examples

Writing a file to IPFS

With Hyper

use ipfs_api::{IpfsApi, IpfsClient};
use std::io::Cursor;

#[tokio::main]
async fn main() {
let client = IpfsClient::default();
let data = Cursor::new("Hello World!");

match client.add(data).await {
Ok(res) => println!("{}", res.hash),
Err(e) => eprintln!("error adding file: {}", e)
}
}

With Actix

use ipfs_api::{IpfsApi, IpfsClient};
use std::io::Cursor;

#[actix_rt::main]
async fn main() {
let client = IpfsClient::default();
let data = Cursor::new("Hello World!");

match client.add(data).await {
Ok(res) => println!("{}", res.hash),
Err(e) => eprintln!("error adding file: {}", e)
}
}

Reading a file from IPFS

With Hyper

use futures::TryStreamExt;
use ipfs_api::{IpfsApi, IpfsClient};
use std::io::{self, Write};

#[tokio::main]
async fn main() {
let client = IpfsClient::default();

match client
.get("/test/file.json")
.map_ok(|chunk| chunk.to_vec())
.try_concat()
.await
{
Ok(res) => {
let out = io::stdout();
let mut out = out.lock();

out.write_all(&res).unwrap();
}
Err(e) => eprintln!("error getting file: {}", e)
}
}

With Actix

use futures::TryStreamExt;
use ipfs_api::{IpfsApi, IpfsClient};
use std::io::{self, Write};

#[actix_rt::main]
async fn main() {
let client = IpfsClient::default();

match client
.get("/test/file.json")
.map_ok(|chunk| chunk.to_vec())
.try_concat()
.await
{
Ok(res) => {
let out = io::stdout();
let mut out = out.lock();

out.write_all(&res).unwrap();
}
Err(e) => eprintln!("error getting file: {}", e)
}
}

Additional Examples

There are also a bunch of examples included in the project, which I used for testing

For a list of examples, run:

$ cargo run --example

You can run any of the examples with cargo:

$ cargo run --example add_file