diff options
author | Ferris Tseng <ferristseng@fastmail.fm> | 2020-11-01 19:32:56 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-01 19:32:56 -0500 |
commit | c2b10b69472bf9fdd5ac74865dcb2f667a159c57 (patch) | |
tree | 9dd5560a65a78a44d8dd3cda41669a07d869967a | |
parent | 38e8ad75e9310beac9846f982eecb7a0ba439bbd (diff) | |
parent | 61c5b741eb3d6a02f075c6da2ce93d715d16f446 (diff) |
Merge pull request #61 from jcaesar/master
ls_with_options
-rw-r--r-- | ipfs-api/src/client/internal.rs | 40 | ||||
-rw-r--r-- | ipfs-api/src/request/ls.rs | 19 |
2 files changed, 51 insertions, 8 deletions
diff --git a/ipfs-api/src/client/internal.rs b/ipfs-api/src/client/internal.rs index 7ee856b..1b544ee 100644 --- a/ipfs-api/src/client/internal.rs +++ b/ipfs-api/src/client/internal.rs @@ -1942,13 +1942,45 @@ impl IpfsClient { /// use ipfs_api::IpfsClient; /// /// let client = IpfsClient::default(); - /// let res = client.ls(None); - /// let res = client.ls(Some("/ipfs/QmVrLsEDn27sScp3k23sgZNefVTjSAL3wpgW1iWPi4MgoY")); + /// let res = client.ls("/ipfs/QmVrLsEDn27sScp3k23sgZNefVTjSAL3wpgW1iWPi4MgoY"); /// ``` /// #[inline] - pub async fn ls(&self, path: Option<&str>) -> Result<response::LsResponse, Error> { - self.request(request::Ls { path }, None).await + pub async fn ls(&self, path: &str) -> Result<response::LsResponse, Error> { + self.request(request::Ls { + path: path, + .. Default::default() + }, None).await + } + + /// List the contents of an Ipfs multihash. + /// + /// ```no_run + /// use ipfs_api::IpfsClient; + /// + /// let client = IpfsClient::default(); + /// #[cfg(feature = "builder")] + /// let _ = client.ls_with_options(ipfs_api::request::Ls::builder() + /// .path("/ipfs/QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n") + /// .build() + /// ); + /// let _ = client.ls_with_options(ipfs_api::request::Ls { + /// path: "/ipfs/QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n", + /// // Example options for fast listing + /// stream: Some(true), + /// resolve_type: Some(false), + /// size: Some(false), + /// }); + /// ``` + /// + #[inline] + pub async fn ls_with_options( + &self, + options: request::Ls<'_> + ) -> impl Stream<Item = Result<response::LsResponse, Error>> { + impl_stream_api_response! { + (self, options, None) => request_stream_json + } } // TODO /mount diff --git a/ipfs-api/src/request/ls.rs b/ipfs-api/src/request/ls.rs index 69e456a..eb6a1fa 100644 --- a/ipfs-api/src/request/ls.rs +++ b/ipfs-api/src/request/ls.rs @@ -9,10 +9,21 @@ use crate::request::ApiRequest; use crate::serde::Serialize; -#[derive(Serialize)] +#[cfg_attr(feature = "builder", derive(TypedBuilder))] +#[derive(Serialize, Default)] +#[serde(rename_all = "kebab-case")] pub struct Ls<'a> { #[serde(rename = "arg")] - pub path: Option<&'a str>, + pub path: &'a str, + /// Resolve linked objects to find out their types. Default: `true` + #[cfg_attr(feature = "builder", builder(default, setter(strip_option)))] + pub resolve_type: Option<bool>, + /// Resolve linked objects to find out their file size. Default: `true` + #[cfg_attr(feature = "builder", builder(default, setter(strip_option)))] + pub size: Option<bool>, + /// Enable experimental streaming of directory entries as they are traversed. + #[cfg_attr(feature = "builder", builder(default, setter(strip_option)))] + pub stream: Option<bool>, } impl<'a> ApiRequest for Ls<'a> { @@ -23,6 +34,6 @@ impl<'a> ApiRequest for Ls<'a> { mod tests { use super::Ls; - serialize_url_test!(test_serializes_0, Ls { path: Some("test") }, "arg=test"); - serialize_url_test!(test_serializes_1, Ls { path: None }, ""); + serialize_url_test!(test_serializes_0, Ls { path: "test", .. Default::default() }, "arg=test"); + serialize_url_test!(test_serializes_1, Ls { path: "asdf", resolve_type: Some(true), size: Some(true), stream: Some(false) }, "arg=asdf&resolve-type=true&size=true&stream=false"); } |