nu_plugin_cloud 0.2.11+0.110.0

A nushell plugin for working with cloud storage services
Documentation
use crate::CloudPlugin;

mod clear;
mod ls;
mod open;
mod rm;
mod save;
mod stub;

pub fn commands() -> Vec<Box<dyn nu_plugin::PluginCommand<Plugin = CloudPlugin>>> {
    vec![
        Box::new(clear::Clear),
        Box::new(ls::Ls),
        Box::new(open::Open),
        Box::new(rm::Remove),
        Box::new(save::Save),
        Box::new(stub::Stub),
    ]
}

#[cfg(test)]
mod tests {
    use crate::CloudPlugin;
    use nu_command::{FromCsv, Select, ToCsv};
    use nu_plugin_test_support::PluginTest;
    use nu_protocol::{PipelineData, Span, Value, record};

    #[test]
    fn test_save_open() -> Result<(), Box<dyn std::error::Error>> {
        let plugin = CloudPlugin::default();
        let mut plugin_test = PluginTest::new("polars", plugin.into())?;
        let _ = plugin_test.add_decl(Box::new(ToCsv))?;
        let _ = plugin_test.add_decl(Box::new(FromCsv))?;
        let result = plugin_test.eval_with(
            "[[a b]; [1 2]] | cloud save memory:/foo.csv | cloud open memory:/foo.csv",
            PipelineData::Empty,
        )?;
        let value = result.into_value(Span::test_data())?;
        assert_eq!(
            value,
            Value::test_list(vec![Value::test_record(record!(
                "a" => Value::test_int(1),
                "b" => Value::test_int(2),
            ))])
        );
        Ok(())
    }

    #[test]
    fn test_save_open_raw() -> Result<(), Box<dyn std::error::Error>> {
        let plugin = CloudPlugin::default();
        let mut plugin_test = PluginTest::new("polars", plugin.into())?;
        let _ = plugin_test.add_decl(Box::new(ToCsv))?;
        let _ = plugin_test.add_decl(Box::new(FromCsv))?;
        let result = plugin_test.eval_with(
            "[[a b]; [1 2]] | cloud save memory:/foo.csv | cloud open --raw memory:/foo.csv",
            PipelineData::Empty,
        )?;
        let value = result.into_value(Span::test_data())?;
        assert_eq!(value, Value::test_string("a,b\n1,2\n"));
        Ok(())
    }

    #[test]
    fn test_save_raw_open() -> Result<(), Box<dyn std::error::Error>> {
        let plugin = CloudPlugin::default();
        let mut plugin_test = PluginTest::new("polars", plugin.into())?;
        let _ = plugin_test.add_decl(Box::new(ToCsv))?;
        let _ = plugin_test.add_decl(Box::new(FromCsv))?;
        let result = plugin_test.eval_with(
            "[[a b]; [1 2]] | to csv | cloud save --raw memory:/foo.csv | cloud open memory:/foo.csv",
            PipelineData::Empty,
        )?;
        let value = result.into_value(Span::test_data())?;
        assert_eq!(
            value,
            Value::test_list(vec![Value::test_record(record!(
                "a" => Value::test_int(1),
                "b" => Value::test_int(2),
            ))])
        );
        Ok(())
    }

    #[test]
    fn test_list() -> Result<(), Box<dyn std::error::Error>> {
        let plugin = CloudPlugin::default();
        let mut plugin_test = PluginTest::new("polars", plugin.into())?;
        let _ = plugin_test.add_decl(Box::new(ToCsv))?;
        let _ = plugin_test.add_decl(Box::new(Select))?;
        let result = plugin_test.eval_with(
            "[[a b]; [1 2]] | cloud save memory:/foo.csv | cloud ls memory:/ | select name size",
            PipelineData::Empty,
        )?;
        let value = result.into_value(Span::test_data())?;
        assert_eq!(
            value,
            Value::test_list(vec![Value::test_record(record!(
                "name" => Value::test_string("foo.csv"),
                "size" => Value::test_filesize(8),
            ))])
        );
        Ok(())
    }
}