difftreelog
Merge commit 'd93ca83fe3668f134c0a705b972e2b52072ebf3d'
in: master
3 files changed
.github/workflows/release.ymldiffbeforeafterboth1name: 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 }}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 target:57 # Tier 158 - aarch64-unknown-linux-gnu59 - i686-pc-windows-gnu60 - i686-pc-windows-msvc61 - i686-unknown-linux-gnu62 - x86_64-apple-darwin63 - x86_64-pc-windows-gnu64 - x86_64-pc-windows-msvc65 - x86_64-unknown-linux-gnu6667 # Other68 - x86_64-unknown-linux-musl69 include:70 - target: aarch64-unknown-linux-gnu71 os: ubuntu-latest72 bin: jrsonnet73 name: jrsonnet-linux-gnu-aarch6474 - target: i686-pc-windows-gnu75 os: windows-latest76 bin: jrsonnet.exe77 name: jrsonnet-windows-gnu-i686.exe78 - target: i686-pc-windows-msvc79 os: windows-latest80 bin: jrsonnet.exe81 name: jrsonnet-windows-msvc-i686.exe82 - target: i686-unknown-linux-gnu83 os: ubuntu-latest84 bin: jrsonnet85 name: jrsonnet-linux-gnu-i68686 - target: x86_64-apple-darwin87 os: macOS-latest88 bin: jrsonnet89 name: jrsonnet-darwin-amd6490 - target: x86_64-pc-windows-gnu91 os: windows-latest92 bin: jrsonnet.exe93 name: jrsonnet-windows-gnu-amd64.exe94 - target: x86_64-pc-windows-msvc95 os: windows-latest96 bin: jrsonnet.exe97 name: jrsonnet-windows-msvc-amd64.exe98 - target: x86_64-unknown-linux-gnu99 os: ubuntu-latest100 bin: jrsonnet101 name: jrsonnet-linux-gnu-amd64102103 - target: x86_64-unknown-linux-musl104 os: ubuntu-latest105 bin: jrsonnet106 name: jrsonnet-linux-musl-amd64107 runs-on: ${{ matrix.os }}108 steps:109 - name: Install stable toolchain110 uses: actions-rs/toolchain@v1111 with:112 toolchain: stable113 override: true114 target: ${{ matrix.target }}115116 - name: Checkout117 uses: actions/checkout@v2118119 - name: Linux x86 cross compiler120 if: ${{ matrix.target == 'i686-unknown-linux-gnu' }}121 run: sudo apt install gcc-multilib122123 - name: Windows x86 cross compiler124 if: ${{ matrix.target == 'i686-pc-windows-gnu' }}125 uses: egor-tensin/setup-mingw@v2126 with:127 platform: x86128129 - name: ARM cross compiler130 if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }}131 uses: actions-rs/cargo@v1132 with:133 command: install134 args: cross135136 - name: Run ARM build137 if: ${{ matrix.target == 'aarch64-unknown-linux-gnu' }}138 shell: bash139 run: cross --bin=jrsonnet --release --target ${{ matrix.target }}140141 - name: Run build142 if: ${{ matrix.target != 'aarch64-unknown-linux-gnu' }}143 uses: actions-rs/cargo@v1144 with:145 command: build146 args: --bin=jrsonnet --release --target ${{ matrix.target }}147148 - name: Package149 shell: bash150 run: |151 strip target/${{ matrix.target }}/release/${{ matrix.bin }}152 cd target/${{ matrix.target }}/release153154 cp ${{ matrix.bin }} ../../../${{ matrix.name }}155 cd -156157 - name: Generate SHA-256158 run: shasum -a 256 ${{ matrix.name }} > ${{ matrix.name }}.sha256159160 - name: Publish161 uses: softprops/action-gh-release@v1162 with:163 draft: true164 files: "jrsonnet*"165 env:166 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}crates/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, [
crates/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]]"#,