nats.zig/examples/headers.zig
torque b101e0acd2
message: more iterators, less problems
This seems like a pretty nice way to do this, since it lets us produce
the sliced version of each value rather than the somewhat janky many
pointer.
2023-08-23 22:03:25 -07:00

68 lines
2.0 KiB
Zig

const std = @import("std");
const nats = @import("nats");
pub fn main() !void {
const connection = try nats.Connection.connectTo(nats.default_server_url);
defer connection.destroy();
const message = try nats.Message.create("subject", null, "message");
defer message.destroy();
try message.setHeaderValue("My-Key1", "value1");
try message.setHeaderValue("My-Key2", "value2");
try message.addHeaderValue("My-Key1", "value3");
try message.setHeaderValue("My-Key3", "value4");
try message.deleteHeader("My-Key3");
{
var iter = try message.headerIterator();
defer iter.destroy();
while (iter.next()) |resolv| {
var val_iter = try resolv.getValueIterator();
defer val_iter.destroy();
std.debug.print("key '{s}' got: ", .{resolv.key});
while (val_iter.next()) |value| {
std.debug.print("'{s}', ", .{value});
}
std.debug.print("\n", .{});
}
}
const subscription = try connection.subscribeSync("subject");
defer subscription.destroy();
try connection.publishMessage(message);
const received = try subscription.nextMessage(1000);
defer received.destroy();
{
var iter = try received.getHeaderValueIterator("My-Key1");
defer iter.destroy();
std.debug.print("For key 'My-Key1' got: ", .{});
while (iter.next()) |value| {
std.debug.print("'{s}', ", .{value});
}
std.debug.print("\n", .{});
}
_ = received.getHeaderValue("key-does-not-exist") catch |err| switch (err) {
nats.Error.NotFound => {},
else => {
std.debug.print("Should not have found that key!", .{});
return err;
},
};
received.deleteHeader("key-does-not-exist") catch |err| switch (err) {
nats.Error.NotFound => {},
else => {
std.debug.print("Should not have found that key!", .{});
return err;
},
};
}