diff options
-rw-r--r-- | rebar.config | 3 | ||||
-rw-r--r-- | src/gleam/json.gleam | 15 | ||||
-rw-r--r-- | src/gleam/json/types.gleam | 13 | ||||
-rw-r--r-- | test/gleam/json_test.gleam | 14 | ||||
-rw-r--r-- | test/gleam_json_test.gleam | 7 |
5 files changed, 44 insertions, 8 deletions
diff --git a/rebar.config b/rebar.config index 09d63c0..49fb1b7 100644 --- a/rebar.config +++ b/rebar.config @@ -8,5 +8,6 @@ {project_plugins, [rebar_gleam]}. {deps, [ - {gleam_stdlib, "0.10.1"} + {gleam_stdlib, "0.10.1"}, + {jsone, "1.5.2"} ]}. diff --git a/src/gleam/json.gleam b/src/gleam/json.gleam new file mode 100644 index 0000000..e1e465b --- /dev/null +++ b/src/gleam/json.gleam @@ -0,0 +1,15 @@ +import gleam/dynamic.{Dynamic} +import gleam/result +import gleam/json/types + +pub type Json = types.Json + +external fn jsone_decode(String) -> types.DecodeResult = + "jsone_decode" "decode" + +pub fn decode(encoded: String) -> Result(Json, Dynamic) { + case jsone_decode(encoded) { + types.Ok(json, _rest) -> Ok(json) + types.Error(types.Badarg(reason)) -> Error(reason) + } +} diff --git a/src/gleam/json/types.gleam b/src/gleam/json/types.gleam new file mode 100644 index 0000000..2e6c78f --- /dev/null +++ b/src/gleam/json/types.gleam @@ -0,0 +1,13 @@ +import gleam/dynamic.{Dynamic} + + +pub external type Json + +pub type Failure { + Badarg(Dynamic) +} + +pub type DecodeResult { + Ok(Json, String) + Error(Failure) +} diff --git a/test/gleam/json_test.gleam b/test/gleam/json_test.gleam new file mode 100644 index 0000000..84f0352 --- /dev/null +++ b/test/gleam/json_test.gleam @@ -0,0 +1,14 @@ +import gleam/dynamic +import gleam/result +import gleam/json.{Json} +import gleam/should + +pub fn decode_test() { + json.decode("5") + |> result.map(dynamic.from) + |> should.equal(Ok(dynamic.from(5))) + + json.decode(".") + |> result.nil_error() + |> should.equal(Error(Nil)) +} diff --git a/test/gleam_json_test.gleam b/test/gleam_json_test.gleam deleted file mode 100644 index d3b7633..0000000 --- a/test/gleam_json_test.gleam +++ /dev/null @@ -1,7 +0,0 @@ -import gleam_json -import gleam/should - -pub fn hello_world_test() { - gleam_json.hello_world() - |> should.equal("Hello, from gleam_json!") -} |