diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0d20c97..a57d81a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,7 +1,10 @@ name: Run Tests on: - [push, pull_request] + pull_request + push: + branches: + - '**' env: nim-version: 'stable' diff --git a/nulid.nimble b/nulid.nimble index a1933ae..0db4f8f 100644 --- a/nulid.nimble +++ b/nulid.nimble @@ -1,6 +1,6 @@ # Package -version = "1.2.0" +version = "1.3.0" author = "Yu Vitaqua fer Chronos" description = "An implementation of ULID!" license = "CC0" diff --git a/src/nulid.nim b/src/nulid.nim index 8a6a23f..ff64d04 100644 --- a/src/nulid.nim +++ b/src/nulid.nim @@ -1,5 +1,6 @@ import std/[ - times + times, + json ] import crockfordb32 @@ -28,10 +29,9 @@ when not NoLocks: Note: There are 2 defines that can be passed to the compiler to trigger different functionality in this library at runtime, they are listed here: - `--define:nulidInsecureRandom`: Uses `std/random` instead of `std/sysrand`. - - `--define:nulidNoLocks` + - `--define:nulidNoLocks`: Disables the use of locks. -The JS backend used `-d:nulidNoLocks` by default and Nimscript uses both. -these flags by default (whether either work with NULID is untested). +The JS backend used `-d:nulidNoLocks` by default. ]## when not defined(js): @@ -327,6 +327,14 @@ func `$`*(ulid: ULID): string = else: result = JsBigInt.encode(ulid.toInt128(), 26) +# std/json support +proc `%`*(u: ULID): JsonNode = newJString($u) + +proc to*(j: JsonNode, _: typedesc[ULID]): ULID = + if j.kind != JString: + raise newException(JsonKindError, "Expected a string!") + + result = ULID.parse(j.getStr()) when HasJsony: import jsony diff --git a/tests/test1.nim b/tests/test1.nim index f89dabf..64bbca4 100644 --- a/tests/test1.nim +++ b/tests/test1.nim @@ -4,8 +4,10 @@ # the letter 't'). # # To run these tests, simply execute `nimble test`. - -import unittest +import std/[ + unittest, + json +] const UlidRandStr = "541019288874337045949482" @@ -47,3 +49,9 @@ when not defined(js): check ulid == ULID.fromBytes(ulidBytes) check ulid.toBytes == ulidBytes + +test "ULID std/json support": + let ulid = ULID.parse("01H999MBGTEA8BDS0M5AWEBB1A") + + check (%ulid).getStr() == "01H999MBGTEA8BDS0M5AWEBB1A" + check (%ulid).to(ULID) == ulid \ No newline at end of file