|
1 | 1 | const c = @import("clap_c"); |
2 | 2 | const clap = @import("clap"); |
3 | | -const msgpack = @import("msgpack"); |
4 | 3 |
|
5 | 4 | const std = @import("std"); |
6 | 5 | const log = std.log.scoped(.zigplug_clap_state); |
@@ -76,82 +75,19 @@ pub fn extension(comptime _: type) *const c.clap_plugin_state { |
76 | 75 | pub fn save(clap_plugin: [*c]const c.clap_plugin, stream: [*c]const c.clap_ostream) callconv(.c) bool { |
77 | 76 | const data = clap.Data.fromClap(clap_plugin); |
78 | 77 |
|
79 | | - var clap_writer = Writer.init(stream); |
80 | | - const writer = &clap_writer.writer; |
81 | | - |
82 | | - var reader = std.Io.Reader.failing; |
83 | | - var packer = msgpack.packIO(&reader, writer); |
84 | | - |
85 | | - var map = msgpack.Payload.mapPayload(data.plugin.allocator); |
86 | | - defer map.free(data.plugin.allocator); |
87 | | - |
88 | | - for (data.plugin.parameters.?.slice) |parameter| { |
89 | | - const id = switch (parameter.*) { |
90 | | - inline else => |*p| p.options.id.?, |
91 | | - }; |
92 | | - |
93 | | - map.mapPut(id, switch (parameter.*) { |
94 | | - .bool => |p| .boolToPayload(p.get()), |
95 | | - .float => |p| .floatToPayload(p.get()), |
96 | | - .int => |p| .intToPayload(p.get()), |
97 | | - .uint => |p| .uintToPayload(p.get()), |
98 | | - }) catch { |
99 | | - switch (parameter.*) { |
100 | | - inline else => |p| { |
101 | | - log.err("failed to save parameter '{s}' = {any}", .{ p.options.name, p.get() }); |
102 | | - return false; |
103 | | - }, |
104 | | - } |
105 | | - }; |
106 | | - |
107 | | - switch (parameter.*) { |
108 | | - inline else => |p| log.debug("saved parameter '{s}' = {any}", .{ id, p.get() }), |
109 | | - } |
110 | | - } |
111 | | - |
112 | | - packer.write(map) catch |e| { |
| 78 | + var writer = Writer.init(stream); |
| 79 | + data.plugin.parameters.?.serialize(&writer.writer) catch |e| |
113 | 80 | log.err("failed to save parameters: {}", .{e}); |
114 | | - return false; |
115 | | - }; |
116 | 81 |
|
117 | 82 | return true; |
118 | 83 | } |
119 | 84 |
|
120 | 85 | pub fn load(clap_plugin: [*c]const c.clap_plugin, stream: [*c]const c.clap_istream) callconv(.c) bool { |
121 | 86 | const data = clap.Data.fromClap(clap_plugin); |
122 | | - var clap_reader = Reader.init(stream); |
123 | | - const reader = &clap_reader.reader; |
124 | | - |
125 | | - var writer = std.Io.Writer.failing; |
126 | | - var packer = msgpack.packIO(reader, &writer); |
127 | 87 |
|
128 | | - const decoded = packer.read(data.plugin.allocator) catch |e| { |
| 88 | + var reader = Reader.init(stream); |
| 89 | + data.plugin.parameters.?.deserialize(&reader.reader) catch |e| |
129 | 90 | log.err("failed to read parameters: {}", .{e}); |
130 | | - return false; |
131 | | - }; |
132 | | - defer decoded.free(data.plugin.allocator); |
133 | | - |
134 | | - for (data.plugin.parameters.?.slice) |parameter| { |
135 | | - const id = switch (parameter.*) { |
136 | | - inline else => |*p| p.options.id.?, |
137 | | - }; |
138 | | - |
139 | | - if (decoded.mapGet(id) catch |e| { |
140 | | - log.err("failed to read parameter '{s}': {}", .{ id, e }); |
141 | | - return false; |
142 | | - }) |value| { |
143 | | - switch (parameter.*) { |
144 | | - .bool => |*p| p.set(value.bool), |
145 | | - .float => |*p| p.set(value.float), |
146 | | - .int => |*p| p.set(value.int), |
147 | | - .uint => |*p| p.set(value.uint), |
148 | | - } |
149 | | - } |
150 | | - |
151 | | - switch (parameter.*) { |
152 | | - inline else => |p| log.debug("read parameter '{s}' = {any}", .{ id, p.get() }), |
153 | | - } |
154 | | - } |
155 | 91 |
|
156 | 92 | return true; |
157 | 93 | } |
|
0 commit comments