ipfs_api_prelude/request/
ls.rs

1// Copyright 2017 rust-ipfs-api Developers
2//
3// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
4// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
5// http://opensource.org/licenses/MIT>, at your option. This file may not be
6// copied, modified, or distributed except according to those terms.
7//
8
9use crate::request::ApiRequest;
10use serde::Serialize;
11
12#[cfg_attr(feature = "with-builder", derive(TypedBuilder))]
13#[derive(Serialize, Default)]
14#[serde(rename_all = "kebab-case")]
15pub struct Ls<'a> {
16    #[serde(rename = "arg")]
17    pub path: &'a str,
18    /// Resolve linked objects to find out their types. Default: `true`
19    #[cfg_attr(feature = "with-builder", builder(default, setter(strip_option)))]
20    pub resolve_type: Option<bool>,
21    /// Resolve linked objects to find out their file size. Default: `true`
22    #[cfg_attr(feature = "with-builder", builder(default, setter(strip_option)))]
23    pub size: Option<bool>,
24    /// Enable experimental streaming of directory entries as they are traversed.
25    #[cfg_attr(feature = "with-builder", builder(default, setter(strip_option)))]
26    pub stream: Option<bool>,
27}
28
29impl<'a> ApiRequest for Ls<'a> {
30    const PATH: &'static str = "/ls";
31}
32
33#[cfg(test)]
34mod tests {
35    use super::Ls;
36
37    serialize_url_test!(
38        test_serializes_0,
39        Ls {
40            path: "test",
41            ..Default::default()
42        },
43        "arg=test"
44    );
45    serialize_url_test!(
46        test_serializes_1,
47        Ls {
48            path: "asdf",
49            resolve_type: Some(true),
50            size: Some(true),
51            stream: Some(false)
52        },
53        "arg=asdf&resolve-type=true&size=true&stream=false"
54    );
55}