From 72379e63ee5a6a64fcdbbba58d0d34f16d489227 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 31 May 2020 22:27:56 -0300 Subject: [PATCH] add support for more types on lv2 parameter structs --- src/lang.zig | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/lang.zig b/src/lang.zig index 329aa7e..3b7a542 100644 --- a/src/lang.zig +++ b/src/lang.zig @@ -551,10 +551,15 @@ pub const Lang = struct { } const arg = maybe_arg.?; - if (cmd_field.field_type != f32) - @compileError("LV2 parameter struct can only have f32 fields"); + const arg_value = switch (cmd_field.field_type) { + f32 => try std.fmt.parseFloat(f32, arg), + u64 => try std.fmt.parseInt(u64, arg, 10), + usize => try std.fmt.parseInt(usize, arg, 10), + []const u8 => try self.allocator.dupe(u8, arg), + else => @compileError("parameter struct has unsupported type " ++ @typeName(cmd_field.field_type)), + }; - @field(cmd.parameters, cmd_field.name) = try std.fmt.parseFloat(f32, arg); + @field(cmd.parameters, cmd_field.name) = arg_value; } } else { inline for (@typeInfo(command_struct).Struct.fields) |cmd_field| { @@ -569,7 +574,7 @@ pub const Lang = struct { i32 => try std.fmt.parseInt(i32, arg, 10), f32 => try std.fmt.parseFloat(f32, arg), []const u8 => try self.allocator.dupe(u8, arg), - else => @panic("Invalid parameter type (" ++ @typeName(cmd_field.field_type) ++ ") left on command struct " ++ @typeName(command_struct) ++ "."), + else => @compileError("Invalid parameter type (" ++ @typeName(cmd_field.field_type) ++ ") left on command struct " ++ @typeName(command_struct) ++ "."), }; std.debug.warn("parsing {}, arg of type {} => {}\n", .{