summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSionoiS <SionoiS@users.noreply.github.com>2020-07-27 18:38:36 -0400
committerSionoiS <SionoiS@users.noreply.github.com>2020-07-27 18:38:36 -0400
commit5578f9b3cdf91e4f6c736ee9c2bbc3b408890149 (patch)
treeeddf1e005cb52e3b2c7bd05c9f8ff89c05b7882d
parente4ecefe07bc0936898f4a7b4161ac4ff973a02aa (diff)
dag put & dag get
-rw-r--r--ipfs-api/examples/dag.rs34
-rw-r--r--ipfs-api/src/client/internal.rs45
-rw-r--r--ipfs-api/src/request/dag.rs1
-rw-r--r--ipfs-api/src/response/dag.rs10
4 files changed, 67 insertions, 23 deletions
diff --git a/ipfs-api/examples/dag.rs b/ipfs-api/examples/dag.rs
new file mode 100644
index 0000000..1846376
--- /dev/null
+++ b/ipfs-api/examples/dag.rs
@@ -0,0 +1,34 @@
+// Copyright 2017 rust-ipfs-api Developers
+//
+// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
+// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
+// http://opensource.org/licenses/MIT>, at your option. This file may not be
+// copied, modified, or distributed except according to those terms.
+//
+
+use ipfs_api::IpfsClient;
+use std::io::Cursor;
+
+// Creates an Ipfs client, and adds this dag object to Ipfs then fetch it back.
+//
+#[cfg_attr(feature = "actix", actix_rt::main)]
+#[cfg_attr(feature = "hyper", tokio::main)]
+async fn main() {
+ eprintln!("note: this must be run in the root of the project repository");
+ eprintln!("connecting to localhost:5001...");
+
+ let client = IpfsClient::default();
+
+ let dag_node = Cursor::new(r#"{ "hello" : "world" }"#);
+
+ let response = client
+ .dag_put(dag_node)
+ .await
+ .expect("error adding dag node");
+
+ let cid = response.cid.cid_string;
+
+ let response = client.dag_get(&cid).await.expect("error getting dag node");
+
+ println!("dag node => {}", response);
+}
diff --git a/ipfs-api/src/client/internal.rs b/ipfs-api/src/client/internal.rs
index 6921d9c..6785180 100644
--- a/ipfs-api/src/client/internal.rs
+++ b/ipfs-api/src/client/internal.rs
@@ -852,26 +852,31 @@ impl IpfsClient {
/// ```
///
#[inline]
- pub async fn dag_get(&self, path: &str) -> Result<response::DagGetResponse, Error> {
- self.request(request::DagGet { path }, None).await
- }
-
- // TODO /dag routes are experimental, and there isn't a whole lot of
- // documentation available for how this route works.
- //
- // /// Add a DAG node to Ipfs.
- // ///
- // #[inline]
- // pub fn dag_put<R>(&self, data: R) -> AsyncResponse<response::DagPutResponse>
- // where
- // R: 'static + Read + Send,
- // {
- // let mut form = multipart::Form::default();
- //
- // form.add_reader("arg", data);
- //
- // self.request(&request::DagPut, Some(form))
- // }
+ pub async fn dag_get(&self, path: &str) -> Result<String, Error> {
+ self.request_string(request::DagGet { path }, None).await
+ }
+
+ /// Add a DAG node to Ipfs.
+ ///
+ /// ```no_run
+ /// use ipfs_api::IpfsClient;
+ ///
+ /// let client = IpfsClient::default();
+ /// let data = Cursor::new(r#"{ "hello" : "world" }"#);
+ /// let res = client.dag_put(data);
+ /// ```
+ ///
+ #[inline]
+ pub async fn dag_put<R>(&self, data: R) -> Result<response::DagPutResponse, Error>
+ where
+ R: 'static + Read + Send + Sync,
+ {
+ let mut form = multipart::Form::default();
+
+ form.add_reader("object data", data);
+
+ self.request(request::DagPut, Some(form)).await
+ }
// TODO /dag/resolve
diff --git a/ipfs-api/src/request/dag.rs b/ipfs-api/src/request/dag.rs
index 4e2bde3..075b918 100644
--- a/ipfs-api/src/request/dag.rs
+++ b/ipfs-api/src/request/dag.rs
@@ -19,7 +19,6 @@ impl<'a> ApiRequest for DagGet<'a> {
const PATH: &'static str = "/dag/get";
}
-#[allow(dead_code)]
pub struct DagPut;
impl_skip_serialize!(DagPut);
diff --git a/ipfs-api/src/response/dag.rs b/ipfs-api/src/response/dag.rs
index c53a282..ecfcaac 100644
--- a/ipfs-api/src/response/dag.rs
+++ b/ipfs-api/src/response/dag.rs
@@ -29,9 +29,15 @@ pub struct DagGetResponse {
}
#[derive(Debug, Deserialize)]
-#[serde(rename_all = "PascalCase")]
pub struct DagPutResponse {
- pub cid: String,
+ #[serde(rename = "Cid")]
+ pub cid: Cid,
+}
+
+#[derive(Debug, Deserialize)]
+pub struct Cid {
+ #[serde(rename = "/")]
+ pub cid_string: String,
}
#[cfg(test)]