From c761f7f844bf89ce0d0be314a87c2df718759dc8 Mon Sep 17 00:00:00 2001 From: Yuto <39439017+utouto97@users.noreply.github.com> Date: Mon, 11 Sep 2023 21:59:07 +0900 Subject: [PATCH] add 'from ndjson' into standard library (#10283) close #8574 related #10276 # Description added below into standard library ``` def "from ndjson" []: string -> any { from json --objects } ``` # User-Facing Changes Users can use functions like "from ndjson" in standard library, and can open ndjson files with `open` command. ``` use std formats * # `from ndjson` is available now open sample.ndjson ``` # Tests + Formatting `toolkit check pr` - :green_circle: `toolkit fmt` - :green_circle: `toolkit clippy` - :green_circle: `toolkit test` - :green_circle: `toolkit test stdlib` # After Submitting --------- Co-authored-by: Stefan Holderbach --- crates/nu-std/src/lib.rs | 1 + crates/nu-std/std/formats.nu | 20 +++++++++++ crates/nu-std/tests/test_formats.nu | 54 +++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 crates/nu-std/std/formats.nu create mode 100644 crates/nu-std/tests/test_formats.nu diff --git a/crates/nu-std/src/lib.rs b/crates/nu-std/src/lib.rs index 0e5948da29..ae2e868082 100644 --- a/crates/nu-std/src/lib.rs +++ b/crates/nu-std/src/lib.rs @@ -28,6 +28,7 @@ pub fn load_standard_library( ("xml.nu", include_str!("../std/xml.nu")), ("input.nu", include_str!("../std/input.nu")), ("math.nu", include_str!("../std/math.nu")), + ("formats.nu", include_str!("../std/formats.nu")), ]; let mut working_set = StateWorkingSet::new(engine_state); diff --git a/crates/nu-std/std/formats.nu b/crates/nu-std/std/formats.nu new file mode 100644 index 0000000000..d7487b1a84 --- /dev/null +++ b/crates/nu-std/std/formats.nu @@ -0,0 +1,20 @@ +# formats.nu +# +# This file contains functions for formatting data in various ways. +# +# Usage: +# use std format * +# use std format +# +# These functions help `open` the files with unsupported extensions such as ndjson. +# + +# Convert from ndjson to structured data. +export def "from ndjson" []: string -> any { + from json --objects +} + +# Convert from jsonl to structured data. +export def "from jsonl" []: string -> any { + from json --objects +} diff --git a/crates/nu-std/tests/test_formats.nu b/crates/nu-std/tests/test_formats.nu new file mode 100644 index 0000000000..4e2001a723 --- /dev/null +++ b/crates/nu-std/tests/test_formats.nu @@ -0,0 +1,54 @@ +use std assert + +def ndjson_test_data1 [] { + '{"a":1} +{"a":2} +{"a":3} +{"a":4} +{"a":5} +{"a":6}' +} + +#[test] +def from_ndjson_multiple_objects [] { + use std formats * + let result = ndjson_test_data1 | from ndjson + let expect = [{a:1},{a:2},{a:3},{a:4},{a:5},{a:6}] + assert equal $result $expect "could not convert from NDJSON" +} + +#[test] +def from_ndjson_single_object [] { + use std formats * + let result = '{"a":1}' | from ndjson + let expect = [{a:1}] + assert equal $result $expect "could not convert from NDJSON" +} + +#[test] +def from_ndjson_invalid_object [] { + use std formats * + assert error { '{"a":1' | from ndjson } +} + +#[test] +def from_jsonl_multiple_objects [] { + use std formats * + let result = ndjson_test_data1 | from jsonl + let expect = [{a:1},{a:2},{a:3},{a:4},{a:5},{a:6}] + assert equal $result $expect "could not convert from JSONL" +} + +#[test] +def from_jsonl_single_object [] { + use std formats * + let result = '{"a":1}' | from jsonl + let expect = [{a:1}] + assert equal $result $expect "could not convert from JSONL" +} + +#[test] +def from_jsonl_invalid_object [] { + use std formats * + assert error { '{"a":1' | from jsonl } +}