summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFerris Tseng <ferristseng@fastmail.fm>2018-01-23 20:02:08 -0500
committerFerris Tseng <ferristseng@fastmail.fm>2018-01-23 20:02:08 -0500
commitc44b62ded3dd1faed5de96ffdea2fc4b3d5d8b4f (patch)
tree0ec4d660f0541a020b97c3df4bc18f63b98fd893
parent75a4584683891e5a236cd93e4e841f0555229224 (diff)
add /name/publish and /name/resolve
-rw-r--r--ipfs-api/examples/resolve_name.rs39
-rw-r--r--ipfs-api/src/client.rs76
-rw-r--r--ipfs-api/src/request/mod.rs2
-rw-r--r--ipfs-api/src/request/name.rs39
4 files changed, 154 insertions, 2 deletions
diff --git a/ipfs-api/examples/resolve_name.rs b/ipfs-api/examples/resolve_name.rs
new file mode 100644
index 0000000..dd13d26
--- /dev/null
+++ b/ipfs-api/examples/resolve_name.rs
@@ -0,0 +1,39 @@
+// 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.
+//
+
+extern crate ipfs_api;
+extern crate tokio_core;
+
+use ipfs_api::IpfsClient;
+use tokio_core::reactor::Core;
+
+const IPFS_IPNS: &str = "/ipns/ipfs.io";
+
+// Creates an Ipfs client, and resolves the Ipfs domain name, and
+// publishes a path to Ipns.
+//
+fn main() {
+ println!("connecting to localhost:5001...");
+
+ let mut core = Core::new().expect("expected event loop");
+ let client = IpfsClient::default(&core.handle());
+ let req = client.name_resolve(Some(IPFS_IPNS), true, false);
+ let resolved = core.run(req).expect("expected a valid response");
+
+ println!("{} resolves to: {}", IPFS_IPNS, &resolved.path);
+
+ let req = client.name_publish(IPFS_IPNS, true, None, None, None);
+ let publish = core.run(req).expect("expected a valid response");
+
+ println!("published {} to: /ipns/{}", IPFS_IPNS, &publish.name);
+
+ let req = client.name_resolve(Some(&publish.name), true, false);
+ let resolved = core.run(req).expect("expected a valid response");
+
+ println!("/ipns/{} resolves to: {}", &publish.name, &resolved.path);
+}
diff --git a/ipfs-api/src/client.rs b/ipfs-api/src/client.rs
index 4c8b010..dd64680 100644
--- a/ipfs-api/src/client.rs
+++ b/ipfs-api/src/client.rs
@@ -1557,9 +1557,81 @@ impl IpfsClient {
// TODO /mount
- // TODO /name/publish
+ /// Publish an IPFS path to IPNS.
+ ///
+ /// ```no_run
+ /// # extern crate ipfs_api;
+ /// # extern crate tokio_core;
+ /// #
+ /// use ipfs_api::IpfsClient;
+ /// use tokio_core::reactor::Core;
+ ///
+ /// # fn main() {
+ /// let mut core = Core::new().unwrap();
+ /// let client = IpfsClient::default(&core.handle());
+ /// let req = client.name_publish(
+ /// "/ipfs/QmVrLsEDn27sScp3k23sgZNefVTjSAL3wpgW1iWPi4MgoY",
+ /// false,
+ /// Some("12h"),
+ /// None,
+ /// None);
+ /// # }
+ /// ```
+ ///
+ pub fn name_publish(
+ &self,
+ path: &str,
+ resolve: bool,
+ lifetime: Option<&str>,
+ ttl: Option<&str>,
+ key: Option<&str>,
+ ) -> AsyncResponse<response::NamePublishResponse> {
+ self.request(
+ &request::NamePublish {
+ path,
+ resolve,
+ lifetime,
+ ttl,
+ key,
+ },
+ None,
+ )
+ }
- // TODO /name/resolve
+ /// Resolve an IPNS name.
+ ///
+ /// ```no_run
+ /// # extern crate ipfs_api;
+ /// # extern crate tokio_core;
+ /// #
+ /// use ipfs_api::IpfsClient;
+ /// use tokio_core::reactor::Core;
+ ///
+ /// # fn main() {
+ /// let mut core = Core::new().unwrap();
+ /// let client = IpfsClient::default(&core.handle());
+ /// let req = client.name_resolve(
+ /// Some("/ipns/ipfs.io"),
+ /// true,
+ /// false);
+ /// # }
+ /// ```
+ ///
+ pub fn name_resolve(
+ &self,
+ name: Option<&str>,
+ recursive: bool,
+ nocache: bool,
+ ) -> AsyncResponse<response::NameResolveResponse> {
+ self.request(
+ &request::NameResolve {
+ name,
+ recursive,
+ nocache,
+ },
+ None,
+ )
+ }
// TODO /object/data
diff --git a/ipfs-api/src/request/mod.rs b/ipfs-api/src/request/mod.rs
index 7e57b64..defd0ca 100644
--- a/ipfs-api/src/request/mod.rs
+++ b/ipfs-api/src/request/mod.rs
@@ -25,6 +25,7 @@ pub use self::log::*;
pub use self::ls::*;
pub use self::id::*;
pub use self::key::*;
+pub use self::name::*;
pub use self::object::*;
pub use self::pin::*;
pub use self::ping::*;
@@ -86,6 +87,7 @@ mod log;
mod ls;
mod id;
mod key;
+mod name;
mod object;
mod pin;
mod ping;
diff --git a/ipfs-api/src/request/name.rs b/ipfs-api/src/request/name.rs
new file mode 100644
index 0000000..5def7b7
--- /dev/null
+++ b/ipfs-api/src/request/name.rs
@@ -0,0 +1,39 @@
+// 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 request::ApiRequest;
+
+#[derive(Serialize)]
+pub struct NamePublish<'a, 'b, 'c, 'd> {
+ #[serde(rename = "arg")] pub path: &'a str,
+
+ pub resolve: bool,
+
+ pub lifetime: Option<&'b str>,
+
+ pub ttl: Option<&'c str>,
+
+ pub key: Option<&'d str>,
+}
+
+impl<'a, 'b, 'c, 'd> ApiRequest for NamePublish<'a, 'b, 'c, 'd> {
+ const PATH: &'static str = "/name/publish";
+}
+
+#[derive(Serialize)]
+pub struct NameResolve<'a> {
+ #[serde(rename = "arg")] pub name: Option<&'a str>,
+
+ pub recursive: bool,
+
+ pub nocache: bool,
+}
+
+impl<'a> ApiRequest for NameResolve<'a> {
+ const PATH: &'static str = "/name/resolve";
+}