Changes
5 changed files (+194/-2)
-
-
@@ -21,6 +21,8 @@pub const CBaseType = union(enum) { int: u16, uint: u16, float: void, double: void, char: void, bool: void, void: void,
-
@@ -32,6 +34,11 @@ .int => |int| if (int.signedness == .signed) .{.int = int.bits, } else .{ .uint = int.bits, }, .float => |float| switch (float.bits) { 32 => .float, 64 => .double, else => @compileError(std.fmt.comptimePrint("{d} bits float is not exportable.", .{float.bits})), }, .bool => .bool, .@"enum" => .{ .custom = T.cname },
-
-
-
@@ -16,6 +16,7 @@ // SPDX-License-Identifier: Apache-2.0const browse = @import("./services/browse.zig"); const registry = @import("./services/registry.zig"); const transport = @import("./services/transport.zig"); pub const public_api: []const type = &.{ browse.Hierarchy,
-
@@ -32,4 +33,11 @@ browse.load.Response,registry.info.Response, registry.register.Request, registry.register.Response, transport.ControlType, transport.SeekMode, transport.ChangeVolumeMode, transport.SubscribeZoneChanges.Request, transport.Control.Request, transport.Seek.Request, transport.ChangeVolume.Request, };
-
-
-
@@ -20,7 +20,7 @@ const ApiSpec = @import("./ApiSpec.zig");fn writeBaseType(writer: anytype, t: ApiSpec.CBaseType) !void { switch (t) { .bool, .char, .void => try writer.writeAll(@tagName(t)), .bool, .char, .float, .double, .void => try writer.writeAll(@tagName(t)), .custom => |name| try writer.writeAll(name), .int, .uint => |bits| { try std.fmt.format(writer, "{s}{d}_t", .{
-
-
-
@@ -20,7 +20,7 @@ const ApiSpec = @import("./ApiSpec.zig");fn writeBaseType(writer: anytype, t: ApiSpec.CBaseType) !void { switch (t) { .bool, .char, .void => try writer.writeAll(@tagName(t)), .bool, .char, .float, .double, .void => try writer.writeAll(@tagName(t)), .custom => |name| try writeCNameAsValaName(writer, name), .int => |bits| try std.fmt.format(writer, "int{d}", .{bits}), .uint => |bits| try std.fmt.format(writer, "uint{d}", .{bits}),
-
-
-
@@ -0,0 +1,177 @@// Copyright 2025 Shota FUJI // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // SPDX-License-Identifier: Apache-2.0 const std = @import("std"); const rc = @import("../rc.zig"); const json = @import("../json.zig"); const allocator = std.heap.c_allocator; pub const ControlType = enum(c_int) { pub const cname = "roon_transport_ControlType"; play, pause, playpause, stop, previous, next, }; pub const SeekMode = enum(c_int) { pub const cname = "roon_transport_SeekMode"; relative, absolute, }; pub const ChangeVolumeMode = enum(c_int) { pub const cname = "roon_transport_ChangeVolumeMode"; absolute, relative, relative_step, }; pub const SubscribeZoneChanges = struct { pub const Request = json.Serializable(rc.RefCounted(struct { pub const cname = "roon_transport_SubscribeZoneChanges_Request"; subscription_key: []const u8, pub fn init(subscription_id: []const u8) @This() { return .{ .subscription_key = subscription_id }; } pub fn deinit(self: *const @This()) void { allocator.free(self.subscription_key); } }), .{}); export fn roon_transport_SubscribeZoneChanges_Request_new( subscription_id: [*:0]const u8, ) callconv(.C) ?*Request { const copy = allocator.dupe(u8, std.mem.span(subscription_id)) catch { std.log.err("Unable to copy subscription_id: out of memory", .{}); return null; }; return Request.new(.init(copy)) catch { std.log.err("Unable to create SubscribeZoneChange request: out of memory", .{}); allocator.free(copy); return null; }; } }; pub const Control = struct { pub const Request = json.Serializable(rc.RefCounted(struct { pub const cname = "roon_transport_Control_Request"; zone_or_output_id: []const u8, control: ControlType, pub fn init(zone_or_output_id: []const u8, control: ControlType) @This() { return .{ .zone_or_output_id = zone_or_output_id, .control = control, }; } pub fn deinit(self: *const @This()) void { allocator.free(self.zone_or_output_id); } }), .{}); export fn roon_transport_Control_Request_new( zone_or_output_id: [*:0]const u8, control: ControlType, ) callconv(.C) ?*Request { const copy = allocator.dupe(u8, std.mem.span(zone_or_output_id)) catch { std.log.err("Unable to copy zone_or_output_id: out of memory", .{}); return null; }; return Request.new(.init(copy, control)) catch { std.log.err("Unable to create Control request: out of memory", .{}); allocator.free(copy); return null; }; } }; pub const Seek = struct { pub const Request = json.Serializable(rc.RefCounted(struct { pub const cname = "roon_transport_Seek_Request"; zone_or_output_id: []const u8, how: SeekMode = .relative, seconds: i64 = 0, pub fn init(zone_or_output_id: []const u8) @This() { return .{ .zone_or_output_id = zone_or_output_id }; } pub fn deinit(self: *const @This()) void { allocator.free(self.zone_or_output_id); } }), .{}); export fn roon_transport_Seek_Request_new(zone_or_output_id: [*:0]const u8) callconv(.C) ?*Request { const copy = allocator.dupe(u8, std.mem.span(zone_or_output_id)) catch { std.log.err("Unable to copy zone_or_output_id: out of memory", .{}); return null; }; return Request.new(.init(copy)) catch { std.log.err("Unable to create Seek request: out of memory", .{}); allocator.free(copy); return null; }; } }; pub const ChangeVolume = struct { pub const Request = json.Serializable(rc.RefCounted(struct { pub const cname = "roon_transport_ChangeVolume_Request"; output_id: []const u8, how: ChangeVolumeMode = .relative, value: f64 = 0, pub fn init(output_id: []const u8) @This() { return .{ .output_id = output_id }; } pub fn deinit(self: *const @This()) void { allocator.free(self.output_id); } }), .{}); export fn roon_transport_ChangeVolume_Request_new(output_id: [*:0]const u8) callconv(.C) ?*Request { const copy = allocator.dupe(u8, std.mem.span(output_id)) catch { std.log.err("Unable to copy output_id: out of memory", .{}); return null; }; return Request.new(.init(copy)) catch { std.log.err("Unable to create ChangeVolume request: out of memory", .{}); allocator.free(copy); return null; }; } };
-