From 251b04e17b07192f7df9fda10a8d24d3965ee5c9 Mon Sep 17 00:00:00 2001 From: Simon Heath Date: Thu, 30 Nov 2017 14:46:43 -0500 Subject: [PATCH 1/2] Added /pin/add endpoint call --- ipfs-api/src/client.rs | 13 +++++++++++++ ipfs-api/src/request/pin.rs | 16 ++++++++++++++++ ipfs-api/src/response/pin.rs | 2 ++ ipfs-api/src/response/tests/v0_pin_add_0.json | 5 +++++ 4 files changed, 36 insertions(+) create mode 100644 ipfs-api/src/response/tests/v0_pin_add_0.json diff --git a/ipfs-api/src/client.rs b/ipfs-api/src/client.rs index 1a7dc89..229f666 100644 --- a/ipfs-api/src/client.rs +++ b/ipfs-api/src/client.rs @@ -821,6 +821,19 @@ impl IpfsClient { self.request(&request::ObjectStat { key }, None) } + /// Pins a new object. + /// + /// Does not yet implement "progress" because reading it is kinda squirrelly. + /// + #[inline] + pub fn pin_add( + &self, + key: &str, + recursive: Option + ) -> AsyncResponse { + self.request(&request::PinAdd { key, recursive, progress: false }, None) + } + /// Returns a list of pinned objects in local storage. /// #[inline] diff --git a/ipfs-api/src/request/pin.rs b/ipfs-api/src/request/pin.rs index fe96da5..d72bd6b 100644 --- a/ipfs-api/src/request/pin.rs +++ b/ipfs-api/src/request/pin.rs @@ -9,6 +9,22 @@ use request::ApiRequest; +#[derive(Serialize)] +pub struct PinAdd<'a> { + #[serde(rename = "arg")] + pub key: &'a str, + pub recursive: Option, + pub progress: bool, +} + +impl<'a> ApiRequest for PinAdd<'a> { + #[inline] + fn path() -> &'static str { + "/pin/add" + } +} + + #[derive(Serialize)] pub struct PinLs<'a> { #[serde(rename = "arg")] diff --git a/ipfs-api/src/response/pin.rs b/ipfs-api/src/response/pin.rs index eab99c2..e6e4192 100644 --- a/ipfs-api/src/response/pin.rs +++ b/ipfs-api/src/response/pin.rs @@ -28,6 +28,7 @@ pub struct PinType { } + #[derive(Debug, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct PinLsResponse { @@ -47,4 +48,5 @@ pub struct PinRmResponse { #[cfg(test)] mod tests { deserialize_test!(v0_pin_ls_0, PinLsResponse); + deserialize_test!(v0_pin_add_0, PinAddResponse); } diff --git a/ipfs-api/src/response/tests/v0_pin_add_0.json b/ipfs-api/src/response/tests/v0_pin_add_0.json new file mode 100644 index 0000000..60c9e48 --- /dev/null +++ b/ipfs-api/src/response/tests/v0_pin_add_0.json @@ -0,0 +1,5 @@ +{ + "Pins": [ + "QmQ5vhrL7uv6tuoN9KeVBwd4PwfQkXdVVmDLUZuTNxqgvm" + ] +} From 2f6025ad1372f25956655c0a27c2e513ee78e577 Mon Sep 17 00:00:00 2001 From: Simon Heath Date: Mon, 4 Dec 2017 18:55:16 -0500 Subject: [PATCH 2/2] Updated pin_add() API slightly and added example. --- ipfs-api/src/client.rs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/ipfs-api/src/client.rs b/ipfs-api/src/client.rs index 229f666..025c9e6 100644 --- a/ipfs-api/src/client.rs +++ b/ipfs-api/src/client.rs @@ -823,15 +823,35 @@ impl IpfsClient { /// Pins a new object. /// - /// Does not yet implement "progress" because reading it is kinda squirrelly. + /// The "recursive" option tells the server whether to + /// pin just the top-level object, or all sub-objects + /// it depends on. For most cases you want it to be `true`. /// + /// Does not yet implement the "progress" agument because + /// reading it is kinda squirrelly. + /// + /// # Examples + /// + /// ```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.pin_add("QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", true); + /// # } + /// ``` #[inline] pub fn pin_add( &self, key: &str, - recursive: Option + recursive: bool ) -> AsyncResponse { - self.request(&request::PinAdd { key, recursive, progress: false }, None) + self.request(&request::PinAdd { key, recursive: Some(recursive), progress: false }, None) } /// Returns a list of pinned objects in local storage.