From 251b04e17b07192f7df9fda10a8d24d3965ee5c9 Mon Sep 17 00:00:00 2001 From: Simon Heath Date: Thu, 30 Nov 2017 14:46:43 -0500 Subject: [PATCH] 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" + ] +}