Skip to content

Commit cf5265f

Browse files
authored
feat!: Use OTP json module instead of jsx (#18)
This is a breaking change for OTP <27, so it is a major version release.
1 parent f2b724c commit cf5265f

File tree

5 files changed

+35
-31
lines changed

5 files changed

+35
-31
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
name: OTP ${{matrix.otp}}
1313
strategy:
1414
matrix:
15-
otp: ["24", "25", "26"]
15+
otp: ["27", "28"]
1616
fail-fast: false
1717
steps:
1818
- uses: actions/checkout@v4

rebar.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1313
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1414

15-
{deps, [jsx]}.
15+
{minimum_otp_vsn, "27"}.
1616

1717
{project_plugins, [
1818
erlfmt

rebar.lock

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1 @@
1-
{"1.2.0",
2-
[{<<"jsx">>,{pkg,<<"jsx">>,<<"3.1.0">>},0}]}.
3-
[
4-
{pkg_hash,[
5-
{<<"jsx">>, <<"D12516BAA0BB23A59BB35DCCAF02A1BD08243FCBB9EFE24F2D9D056CCFF71268">>}]},
6-
{pkg_hash_ext,[
7-
{<<"jsx">>, <<"0C5CC8FDC11B53CC25CF65AC6705AD39E54ECC56D1C22E4ADB8F5A53FB9427F3">>}]}
8-
].
1+
[].

src/jsonformat.app.src

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
{registered, []},
2222
{applications, [
2323
kernel,
24-
stdlib,
25-
jsx
24+
stdlib
2625
]},
2726
{licenses, ["MIT"]},
2827
{links, [{"Github", "https://github.com/kivra/jsonformat/"}]}

src/jsonformat.erl

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ merge_meta(Msg, Meta0, Config) ->
9696
maps:merge(Msg, Meta2).
9797

9898
encode(Data, Config) ->
99-
Json = jsx:encode(Data),
99+
Json = json:encode(Data),
100100
case new_line(Config) of
101101
true -> [Json, new_line_type(Config)];
102102
false -> Json
@@ -174,17 +174,19 @@ meta_with(Meta, _ConfigNotPresent) ->
174174
-include_lib("eunit/include/eunit.hrl").
175175

176176
-define(assertJSONEqual(Expected, Actual),
177-
?assertEqual(jsx:decode(Expected, [return_maps]), jsx:decode(Actual, [return_maps]))
177+
?assertEqual(json:decode(Expected), json:decode(Actual))
178178
).
179179

180180
format_test() ->
181181
?assertJSONEqual(
182182
<<"{\"level\":\"alert\",\"text\":\"derp\"}">>,
183-
format(#{level => alert, msg => {string, "derp"}, meta => #{}}, #{})
183+
iolist_to_binary(format(#{level => alert, msg => {string, "derp"}, meta => #{}}, #{}))
184184
),
185185
?assertJSONEqual(
186186
<<"{\"herp\":\"derp\",\"level\":\"alert\"}">>,
187-
format(#{level => alert, msg => {report, #{herp => derp}}, meta => #{}}, #{})
187+
iolist_to_binary(
188+
format(#{level => alert, msg => {report, #{herp => derp}}, meta => #{}}, #{})
189+
)
188190
).
189191

190192
format_funs_test() ->
@@ -196,7 +198,9 @@ format_funs_test() ->
196198
},
197199
?assertJSONEqual(
198200
<<"{\"level\":\"info\",\"text\":\"derp\",\"time\":2}">>,
199-
format(#{level => alert, msg => {string, "derp"}, meta => #{time => 1}}, Config1)
201+
iolist_to_binary(
202+
format(#{level => alert, msg => {string, "derp"}, meta => #{time => 1}}, Config1)
203+
)
200204
),
201205

202206
Config2 = #{
@@ -207,7 +211,9 @@ format_funs_test() ->
207211
},
208212
?assertJSONEqual(
209213
<<"{\"level\":\"alert\",\"text\":\"derp\",\"time\":2}">>,
210-
format(#{level => alert, msg => {string, "derp"}, meta => #{time => 1}}, Config2)
214+
iolist_to_binary(
215+
format(#{level => alert, msg => {string, "derp"}, meta => #{time => 1}}, Config2)
216+
)
211217
).
212218

213219
key_mapping_test() ->
@@ -219,7 +225,7 @@ key_mapping_test() ->
219225
},
220226
?assertJSONEqual(
221227
<<"{\"lvl\":\"alert\",\"message\":\"derp\"}">>,
222-
format(#{level => alert, msg => {string, "derp"}, meta => #{}}, Config1)
228+
iolist_to_binary(format(#{level => alert, msg => {string, "derp"}, meta => #{}}, Config1))
223229
),
224230

225231
Config2 = #{
@@ -230,7 +236,7 @@ key_mapping_test() ->
230236
},
231237
?assertJSONEqual(
232238
<<"{\"level\":\"derp\",\"lvl\":\"alert\"}">>,
233-
format(#{level => alert, msg => {string, "derp"}, meta => #{}}, Config2)
239+
iolist_to_binary(format(#{level => alert, msg => {string, "derp"}, meta => #{}}, Config2))
234240
),
235241

236242
Config3 = #{
@@ -241,7 +247,7 @@ key_mapping_test() ->
241247
},
242248
?assertJSONEqual(
243249
<<"{\"lvl\":\"alert\",\"text\":\"derp\"}">>,
244-
format(#{level => alert, msg => {string, "derp"}, meta => #{}}, Config3)
250+
iolist_to_binary(format(#{level => alert, msg => {string, "derp"}, meta => #{}}, Config3))
245251
),
246252

247253
Config4 = #{
@@ -250,7 +256,9 @@ key_mapping_test() ->
250256
},
251257
?assertJSONEqual(
252258
<<"{\"level\":\"alert\",\"text\":\"derp\",\"timestamp\":2}">>,
253-
format(#{level => alert, msg => {string, "derp"}, meta => #{time => 1}}, Config4)
259+
iolist_to_binary(
260+
format(#{level => alert, msg => {string, "derp"}, meta => #{time => 1}}, Config4)
261+
)
254262
).
255263

256264
list_format_test() ->
@@ -262,7 +270,7 @@ list_format_test() ->
262270
},
263271
?assertJSONEqual(
264272
<<"{\"level\":\"error\",\"report\":\"[{hej,\\\"hopp\\\"}]\",\"time\":1}">>,
265-
format(ErrorReport, #{})
273+
iolist_to_binary(format(ErrorReport, #{}))
266274
).
267275

268276
meta_without_test() ->
@@ -277,15 +285,15 @@ meta_without_test() ->
277285
<<"level">> => <<"info">>,
278286
<<"secret">> => <<"xyz">>
279287
},
280-
jsx:decode(format(Error, #{}), [return_maps])
288+
json:decode(iolist_to_binary(format(Error, #{})))
281289
),
282290
Config2 = #{meta_without => [secret]},
283291
?assertEqual(
284292
#{
285293
<<"answer">> => 42,
286294
<<"level">> => <<"info">>
287295
},
288-
jsx:decode(format(Error, Config2), [return_maps])
296+
json:decode(iolist_to_binary(format(Error, Config2)))
289297
),
290298
ok.
291299

@@ -301,31 +309,35 @@ meta_with_test() ->
301309
<<"level">> => <<"info">>,
302310
<<"secret">> => <<"xyz">>
303311
},
304-
jsx:decode(format(Error, #{}), [return_maps])
312+
json:decode(iolist_to_binary(format(Error, #{})))
305313
),
306314
Config2 = #{meta_with => [level]},
307315
?assertEqual(
308316
#{
309317
<<"answer">> => 42,
310318
<<"level">> => <<"info">>
311319
},
312-
jsx:decode(format(Error, Config2), [return_maps])
320+
json:decode(iolist_to_binary(format(Error, Config2)))
313321
),
314322
ok.
315323

316324
newline_test() ->
317325
ConfigDefault = #{new_line => true},
318326
?assertEqual(
319-
[<<"{\"level\":\"alert\",\"text\":\"derp\"}">>, <<"\n">>],
320-
format(#{level => alert, msg => {string, "derp"}, meta => #{}}, ConfigDefault)
327+
<<"{\"level\":\"alert\",\"text\":\"derp\"}\n">>,
328+
iolist_to_binary(
329+
format(#{level => alert, msg => {string, "derp"}, meta => #{}}, ConfigDefault)
330+
)
321331
),
322332
ConfigCRLF = #{
323333
new_line_type => crlf,
324334
new_line => true
325335
},
326336
?assertEqual(
327-
[<<"{\"level\":\"alert\",\"text\":\"derp\"}">>, <<"\r\n">>],
328-
format(#{level => alert, msg => {string, "derp"}, meta => #{}}, ConfigCRLF)
337+
<<"{\"level\":\"alert\",\"text\":\"derp\"}\r\n">>,
338+
iolist_to_binary(
339+
format(#{level => alert, msg => {string, "derp"}, meta => #{}}, ConfigCRLF)
340+
)
329341
).
330342

331343
-endif.

0 commit comments

Comments
 (0)