git.delta.rocks / jrsonnet / refs/commits / cead2c336a71

difftreelog

Merge commit 'd93ca83fe3668f134c0a705b972e2b52072ebf3d'

Yaroslav Bolyukin2021-05-23parents: #b148741 #d93ca83.patch.diff
in: master

3 files changed

modified.github/workflows/release.ymldiffbeforeafterboth
before · .github/workflows/release.yml
1name: CI23on: [push]45jobs:6  test:7    name: Test Suite8    runs-on: ubuntu-latest9    steps:10      - name: Checkout sources11        uses: actions/checkout@v212      - name: Install stable toolchain13        uses: actions-rs/toolchain@v114        with:15          toolchain: stable16          override: true17      - name: Run tests18        uses: actions-rs/cargo@v119        with:20          command: test21          args: --all2223  cargo-release:24    if: startsWith(github.ref, 'refs/tags/')25    needs: [test]26    runs-on: ubuntu-latest27    steps:28      - name: Checkout sources29        uses: actions/checkout@v230      - name: Install stable toolchain31        uses: actions-rs/toolchain@v132        with:33          toolchain: stable34          override: true35      - name: Install cargo release command36        uses: actions-rs/cargo@v137        with:38          command: install39          args: cargo-release40      - name: Run cargo login41        uses: actions-rs/cargo@v142        with:43          command: login44          args: ${{ secrets.CARGO_TOKEN }}45      - name: Publish crates46        uses: actions-rs/cargo@v147        with:48          command: release49          args: --no-dev-version --skip-push --skip-tag --no-confirm5051  github-release:52    if: startsWith(github.ref, 'refs/tags/')53    needs: [test]54    strategy:55      matrix:56        os: [ubuntu-latest, macOS-latest, windows-latest]57        include:58          - os: ubuntu-latest59            rust: stable60            target: x86_64-unknown-linux-musl61            bin: jrsonnet62            name: jrsonnet-linux-amd6463          - os: windows-latest64            rust: stable65            target: x86_64-pc-windows-msvc66            bin: jrsonnet.exe67            name: jrsonnet-windows-amd64.exe68          - os: macOS-latest69            rust: stable70            target: x86_64-apple-darwin71            bin: jrsonnet72            name: jrsonnet-darwin-amd6473    runs-on: ${{ matrix.os }}74    steps:75      - name: Install stable toolchain76        uses: actions-rs/toolchain@v177        with:78          toolchain: ${{ matrix.rust }}79          override: true80          target: ${{ matrix.target }}81      - name: Checkout82        uses: actions/checkout@v283      - name: Run build84        uses: actions-rs/cargo@v185        with:86          command: build87          args: --bin=jrsonnet --release --target ${{ matrix.target }}88      - name: Package89        shell: bash90        run: |91          strip target/${{ matrix.target }}/release/${{ matrix.bin }}92          cd target/${{ matrix.target }}/release9394          cp ${{ matrix.bin }} ../../../${{ matrix.name }}95          cd -96      - name: Generate SHA-25697        run: shasum -a 256 ${{ matrix.name }} > ${{ matrix.name }}.sha25698      - name: Publish99        uses: softprops/action-gh-release@v1100        with:101          draft: true102          files: "jrsonnet*"103        env:104          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs
+++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs
@@ -1,8 +1,8 @@
 use crate::{
 	equals,
 	error::{Error::*, Result},
-	parse_args, primitive_equals, push, throw, with_state, ArrValue, Context, FuncVal, LazyVal,
-	Val,
+	parse_args, primitive_equals, push, throw, with_state, ArrValue, Context, EvaluationState,
+	FuncVal, LazyVal, Val,
 };
 use format::{format_arr, format_obj};
 use jrsonnet_interner::IStr;
@@ -74,6 +74,7 @@
 			("reverse".into(), builtin_reverse),
 			("id".into(), builtin_id),
 			("strReplace".into(), builtin_str_replace),
+			("parseJson".into(), builtin_parse_json),
 		].iter().cloned().collect()
 	};
 }
@@ -164,6 +165,20 @@
 	})
 }
 
+fn builtin_parse_json(
+	context: Context,
+	_loc: Option<&ExprLocation>,
+	args: &ArgsDesc,
+) -> Result<Val> {
+	parse_args!(context, "parseJson", args, 1, [
+		0, s: ty!(string) => Val::Str;
+	], {
+		let state = EvaluationState::default();
+		let path = Rc::new(PathBuf::from("std.parseJson"));
+		state.evaluate_snippet_raw(path ,s)
+	})
+}
+
 // faster
 fn builtin_slice(context: Context, _loc: Option<&ExprLocation>, args: &ArgsDesc) -> Result<Val> {
 	parse_args!(context, "slice", args, 4, [
modifiedcrates/jrsonnet-evaluator/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/lib.rs
+++ b/crates/jrsonnet-evaluator/src/lib.rs
@@ -809,6 +809,21 @@
 	}
 
 	#[test]
+	fn parse_json() {
+		assert_json!(
+			r#"std.parseJson('{"a": -1,"b": 1,"c": 3.141,"d": []}')"#,
+			r#"{"a": -1,"b": 1,"c": 3.141,"d": []}"#
+		);
+		// TODO: this should in fact fail as is no proper JSON syntax
+		assert_json!(
+			r#"std.parseJson("{a:-1, b:1, c:3.141, d:[]}")"#,
+			r#"{"a": -1,"b": 1,"c": 3.141,"d": []}"#
+		);
+		// TODO: this is also no valid JSON
+		assert_json!(r#"std.parseJson('local x = 2; x * x')"#, r#"4"#);
+	}
+
+	#[test]
 	fn test() {
 		assert_json!(
 			r#"[[a, b] for a in [1,2,3] for b in [4,5,6]]"#,