From 696578e1c147a21107e8c04390c9361eb1bd9d91 Mon Sep 17 00:00:00 2001 From: Regis Caillaud Date: Mon, 4 Nov 2024 11:53:53 +0100 Subject: [PATCH 1/7] Update connections.nim --- zmq/connections.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zmq/connections.nim b/zmq/connections.nim index 79c9349..f67cbe7 100644 --- a/zmq/connections.nim +++ b/zmq/connections.nim @@ -323,7 +323,7 @@ proc close(c: var ZConnectionImpl, linger: int = 500) = c.context.terminate() proc close*(c: ZConnection, linger: int = 500) = - c[].close() + c[].close(linger) # Send / Receive # Send with ZSocket type From 73089ea4e90c7f67a598f813df89785b38c23fa9 Mon Sep 17 00:00:00 2001 From: Clonkk Date: Mon, 4 Nov 2024 12:04:08 +0100 Subject: [PATCH 2/7] overload resolution change : update it --- zmq/connections.nim | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/zmq/connections.nim b/zmq/connections.nim index f67cbe7..b8269a9 100644 --- a/zmq/connections.nim +++ b/zmq/connections.nim @@ -91,31 +91,29 @@ proc terminate*(ctx: ZContext) = get/set socket options Declare socket options first because it's used in =destroy hooks ]# -# Some option take cint, int64 or uint64 -proc setsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: T) = - var val: T = optval - if setsockopt(s, option, addr(val), sizeof(val)) != 0: - zmqError() # Some option take cstring -proc setsockopt_impl(s: ZSocket, option: ZSockOptions, optval: string) = - var val: string = optval - if setsockopt(s, option, cstring(val), val.len) != 0: - zmqError() +# Some option take cint, int64 or uint64 +proc setsockopt_impl[T: string|SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: T) = + when T is string: + var val: string = optval + if setsockopt(s, option, cstring(val), val.len) != 0: + zmqError() + elif T is SomeOrdinal: + var val: T = optval + if setsockopt(s, option, addr(val), sizeof(val)) != 0: + zmqError() # some sockopt returns integer values -proc getsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: var T) = - var optval_len: int = sizeof(optval) - - if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0: - zmqError() - -# Some sockopt returns a string -proc getsockopt_impl(s: ZSocket, option: ZSockOptions, optval: var string) = - var optval_len: int = optval.len - - if bindings.getsockopt(s, option, cstring(optval), addr(optval_len)) != 0: - zmqError() +proc getsockopt_impl[T: SomeOrdinal|string](s: ZSocket, option: ZSockOptions, optval: var T) = + when T is string: + var optval_len: int = optval.len + if bindings.getsockopt(s, option, cstring(optval), addr(optval_len)) != 0: + zmqError() + elif T is SomeOrdinal: + var optval_len: int = sizeof(optval) + if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0: + zmqError() #[ Public set/get sockopt function on ZSocket / ZConnection @@ -323,7 +321,7 @@ proc close(c: var ZConnectionImpl, linger: int = 500) = c.context.terminate() proc close*(c: ZConnection, linger: int = 500) = - c[].close(linger) + close(c[], linger) # Send / Receive # Send with ZSocket type From 1ff00576bfa79a3d6783b69dc3256379dd1c2f45 Mon Sep 17 00:00:00 2001 From: Clonkk Date: Mon, 4 Nov 2024 13:52:51 +0100 Subject: [PATCH 3/7] bump nimble version --- zmq.nimble | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zmq.nimble b/zmq.nimble index 604263c..f14291a 100644 --- a/zmq.nimble +++ b/zmq.nimble @@ -1,6 +1,6 @@ # Package -version = "1.5.2" +version = "1.5.3" author = "Andreas Rumpf" description = "ZeroMQ wrapper" license = "MIT" From 235be8bbaaad4a38952b54c3b9bfbea0fd616ec5 Mon Sep 17 00:00:00 2001 From: Clonkk Date: Mon, 4 Nov 2024 13:56:59 +0100 Subject: [PATCH 4/7] adding matrix of tests to keep maitaining 2.0.X and 2.2.X --- .github/workflows/tests.yml | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 92d94c8..bc1e9ba 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,11 +7,27 @@ on: - master jobs: - default: - runs-on: ubuntu-latest + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + nim: + - '2.0.x' + - 'stable' + - devel + os: + - ubuntu-latest + + name: '${{ matrix.nim }} (${{ matrix.os }})' steps: - uses: actions/checkout@v4 - - uses: iffy/install-nim@v5 + - name: Setup nim + uses: jiro4989/setup-nim-action@v2 + with: + use-nightlies: true + nim-version: ${{ matrix.nim }} + repo-token: ${{ secrets.GITHUB_TOKEN }} + - run: nimble install -y - run: nimble test - run: nimble test --gc:arc From 89da3ab37aa5b3c978496121afcf13f682dbe95f Mon Sep 17 00:00:00 2001 From: Clonkk Date: Mon, 4 Nov 2024 14:52:50 +0100 Subject: [PATCH 5/7] try another way to fix overloading --- zmq/connections.nim | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/zmq/connections.nim b/zmq/connections.nim index b8269a9..41cdd1f 100644 --- a/zmq/connections.nim +++ b/zmq/connections.nim @@ -93,27 +93,29 @@ proc terminate*(ctx: ZContext) = ]# # Some option take cstring +proc setsockopt_impl(s: ZSocket, option: ZSockOptions, optval: string) = + var val: string = optval + if setsockopt(s, option, cstring(val), val.len) != 0: + zmqError() + # Some option take cint, int64 or uint64 -proc setsockopt_impl[T: string|SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: T) = - when T is string: - var val: string = optval - if setsockopt(s, option, cstring(val), val.len) != 0: - zmqError() - elif T is SomeOrdinal: - var val: T = optval - if setsockopt(s, option, addr(val), sizeof(val)) != 0: - zmqError() +proc setsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: T) = + var val: T = optval + if setsockopt(s, option, addr(val), sizeof(val)) != 0: + zmqError() # some sockopt returns integer values -proc getsockopt_impl[T: SomeOrdinal|string](s: ZSocket, option: ZSockOptions, optval: var T) = - when T is string: - var optval_len: int = optval.len - if bindings.getsockopt(s, option, cstring(optval), addr(optval_len)) != 0: - zmqError() - elif T is SomeOrdinal: - var optval_len: int = sizeof(optval) - if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0: - zmqError() +proc getsockopt_impl(s: ZSocket, option: ZSockOptions, optval: var string) = + var optval_len: int = optval.len + + if bindings.getsockopt(s, option, cstring(optval), addr(optval_len)) != 0: + zmqError() + +proc getsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: var T) = + var optval_len: int = sizeof(optval) + + if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0: + zmqError() #[ Public set/get sockopt function on ZSocket / ZConnection @@ -123,7 +125,7 @@ proc setsockopt*[T: SomeOrdinal|string](s: ZSocket, option: ZSockOptions, optval ## ## Careful, the ``sizeof`` of ``optval`` depends on the ``ZSockOptions`` passed. ## Check http://api.zeromq.org/4-2:zmq-setsockopt - setsockopt_impl[T](s, option, optval) + setsockopt_impl(s, option, optval) proc setsockopt[T: SomeOrdinal|string](c: ZConnectionImpl, option: ZSockOptions, optval: T) = ## Internal From 438b6999340a1967a0347d7311e450c22f59d025 Mon Sep 17 00:00:00 2001 From: Clonkk Date: Mon, 4 Nov 2024 14:55:08 +0100 Subject: [PATCH 6/7] clean up --- zmq/connections.nim | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/zmq/connections.nim b/zmq/connections.nim index 41cdd1f..219735c 100644 --- a/zmq/connections.nim +++ b/zmq/connections.nim @@ -92,28 +92,27 @@ proc terminate*(ctx: ZContext) = Declare socket options first because it's used in =destroy hooks ]# -# Some option take cstring -proc setsockopt_impl(s: ZSocket, option: ZSockOptions, optval: string) = - var val: string = optval - if setsockopt(s, option, cstring(val), val.len) != 0: - zmqError() - # Some option take cint, int64 or uint64 proc setsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: T) = var val: T = optval if setsockopt(s, option, addr(val), sizeof(val)) != 0: zmqError() -# some sockopt returns integer values +# Some option take cstring +proc setsockopt_impl(s: ZSocket, option: ZSockOptions, optval: string) = + var val: string = optval + if setsockopt(s, option, cstring(val), val.len) != 0: + zmqError() + +# Some sockopt returns a string proc getsockopt_impl(s: ZSocket, option: ZSockOptions, optval: var string) = var optval_len: int = optval.len - if bindings.getsockopt(s, option, cstring(optval), addr(optval_len)) != 0: zmqError() +# some sockopt returns integer values proc getsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: var T) = var optval_len: int = sizeof(optval) - if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0: zmqError() From df2010a9f95ef89a9175d846d58ade438051f172 Mon Sep 17 00:00:00 2001 From: Clonkk Date: Mon, 4 Nov 2024 14:56:15 +0100 Subject: [PATCH 7/7] keep same order of procs --- zmq/connections.nim | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/zmq/connections.nim b/zmq/connections.nim index 219735c..b4fa50e 100644 --- a/zmq/connections.nim +++ b/zmq/connections.nim @@ -104,17 +104,18 @@ proc setsockopt_impl(s: ZSocket, option: ZSockOptions, optval: string) = if setsockopt(s, option, cstring(val), val.len) != 0: zmqError() +# some sockopt returns integer values +proc getsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: var T) = + var optval_len: int = sizeof(optval) + if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0: + zmqError() + # Some sockopt returns a string proc getsockopt_impl(s: ZSocket, option: ZSockOptions, optval: var string) = var optval_len: int = optval.len if bindings.getsockopt(s, option, cstring(optval), addr(optval_len)) != 0: zmqError() -# some sockopt returns integer values -proc getsockopt_impl[T: SomeOrdinal](s: ZSocket, option: ZSockOptions, optval: var T) = - var optval_len: int = sizeof(optval) - if bindings.getsockopt(s, option, addr(optval), addr(optval_len)) != 0: - zmqError() #[ Public set/get sockopt function on ZSocket / ZConnection