From 836f1da72322cbb84bd443bff4b2a27455898a92 Mon Sep 17 00:00:00 2001 From: Spencer Brower Date: Wed, 8 Jul 2026 15:05:29 -0400 Subject: [PATCH] feat: Added `send_const` proc. --- zmq/zmq.odin | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/zmq/zmq.odin b/zmq/zmq.odin index 14024d7..91a29b9 100644 --- a/zmq/zmq.odin +++ b/zmq/zmq.odin @@ -27,6 +27,10 @@ foreign lib { _connect :: proc(s: Socket, addr: cstring) -> c.int --- @(link_name = "zmq_send") _send :: proc(s: Socket, buf: rawptr, len: c.size_t, flags: Flags) -> c.int --- + + @(link_name = "zmq_send_const") + _send_const :: proc(s: Socket, buf: rawptr, len: c.size_t, flags: Flags) -> c.int --- + @(link_name = "zmq_recv") _recv :: proc(s: Socket, buf: rawptr, len: c.size_t, flags: Flags) -> c.int --- @(link_name = "zmq_strerror") @@ -114,18 +118,42 @@ send :: proc { send_string, } -send_bytes :: proc(s: Socket, buf: []u8, flags: Flags = Flags{}) -> (int, Error) { +send_bytes :: proc(s: Socket, buf: []u8, flags: Flags = {}) -> (int, Error) { n := _send(s, rawptr(&buf[0]), c.size_t(len(buf)), flags) if n < 0 { return -1, last_error() } - return int(n), Error{} + return int(n), nil } -send_string :: proc(s: Socket, buf: string, flags: Flags = Flags{}) -> (int, Error) { +send_string :: proc(s: Socket, buf: string, flags: Flags = {}) -> (int, Error) { return send_bytes(s, transmute([]u8)buf, flags) } +send_const :: proc { + send_const_string, + send_const_bytes, +} + +send_const_string :: proc(s: Socket, $str: string, flags: Flags = {}) -> (int, Error) { + n := _send_const(s, rawptr($str), len($str), flags) + if n < 0 { + return -1, last_error() + } + + return int(n), nil +} + +// buf must have @(rodata) or global lifetime. +send_const_bytes :: proc(s: Socket, buf: []byte, flags: Flags = {}) -> (int, Error) { + n := _send_const(s, rawptr(&buf[0]), len(buf), flags) + if n < 0 { + return -1, last_error() + } + + return int(n), nil +} + recv :: proc(s: Socket, buf: []u8, flags: Flags = Flags{}) -> (int, Error) { n := _recv(s, rawptr(&buf[0]), c.size_t(len(buf)), flags) if n < 0 {