6 releases (breaking)
0.6.0 | Dec 31, 2022 |
---|---|
0.5.0 | Jul 29, 2022 |
0.4.0 | Mar 30, 2022 |
0.3.0 | Dec 4, 2021 |
0.1.1 | Sep 16, 2021 |
#364 in Web programming
6,511 downloads per month
Used in 45 crates
(4 directly)
195KB
3.5K
SLoC
ipfs-api
Components
Name | Documentation | Crate |
---|---|---|
ipfs-api-prelude | ||
ipfs-api-backend-actix | ||
ipfs-api-backend-hyper | ||
ipfs-api (deprecated) |
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.6"
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.7"
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.17.0"
Feature Flags (DEPRECATED)
You can use actix-web
as a backend instead of hyper
.
[dependencies]
ipfs-api = { version = "0.17.0", features = ["with-actix"], default-features = false }
You also have the option of using rustls
instead of native tls:
[dependencies]
ipfs-api = { version = "0.17.0", features = ["with-hyper-rustls"], default-features = false }
To enable the builder pattern (default) use the with-builder
feature:
[dependencies]
ipfs-api = { version = "0.17.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
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~8–17MB
~218K SLoC