From f20a082203d2275bd8b578aae6d98be3a2b6c14c Mon Sep 17 00:00:00 2001 From: BitlyTwiser Date: Sun, 15 Sep 2024 09:45:19 -0700 Subject: [PATCH] Removing manual trim from various functions (string, int, bool) and created helper function to trim values at a higher level. Adjusted tests to specifically test spaces --- src/root.zig | 25 ++++++++++++++----------- src/tests.zig | 3 +++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/root.zig b/src/root.zig index 8eb4e16..013d877 100644 --- a/src/root.zig +++ b/src/root.zig @@ -372,10 +372,7 @@ pub fn Ymlz(comptime Destination: type) type { fn parseStringExpression(self: *Self, raw_line: []const u8, depth: usize, is_multiline: bool) ![]const u8 { const expression = try self.parseSimpleExpression(raw_line, depth, is_multiline); - var value = self.getExpressionValue(expression); - - // Trim spaces to avoid errors when placing spaces after strings in the yaml - value = std.mem.trim(u8, value, " "); + const value = self.getExpressionValueWithTrim(expression); if (value.len == 0) return value; @@ -420,6 +417,17 @@ pub fn Ymlz(comptime Destination: type) type { return str; } + fn getExpressionValueWithTrim(self: *Self, expression: Expression) []const u8 { + _ = self; + + // Trim spaces from value + return std.mem.trim(u8, switch (expression.value) { + .Simple => expression.value.Simple, + .KV => expression.value.KV.value, + else => @panic("Not implemeted for " ++ @typeName(@TypeOf(expression.value))), + }, " "); + } + fn getExpressionValue(self: *Self, expression: Expression) []const u8 { _ = self; @@ -432,10 +440,7 @@ pub fn Ymlz(comptime Destination: type) type { fn parseBooleanExpression(self: *Self, raw_line: []const u8, depth: usize) !bool { const expression = try self.parseSimpleExpression(raw_line, depth, false); - var value = self.getExpressionValue(expression); - - // Trim spaces to avoid errors when placing spaces after strings in the yaml - value = std.mem.trim(u8, value, " "); + const value = self.getExpressionValueWithTrim(expression); const isBooleanTrue = std.mem.eql(u8, value, "True") or std.mem.eql(u8, value, "true") or std.mem.eql(u8, value, "On") or std.mem.eql(u8, value, "on"); @@ -454,9 +459,7 @@ pub fn Ymlz(comptime Destination: type) type { fn parseNumericExpression(self: *Self, comptime T: type, raw_line: []const u8, depth: usize) !T { const expression = try self.parseSimpleExpression(raw_line, depth, false); - var value = self.getExpressionValue(expression); - - value = std.mem.trim(u8, value, " "); + const value = self.getExpressionValueWithTrim(expression); switch (@typeInfo(T)) { .Int => { diff --git a/src/tests.zig b/src/tests.zig index 710d6d1..a62ecce 100644 --- a/src/tests.zig +++ b/src/tests.zig @@ -31,6 +31,9 @@ test "Multiple elements in yaml file" { try expect(result.elements[0].bool_val == true); try expect(std.mem.eql(u8, result.elements[0].name, "Example Name")); + // Ensure 1st element does *not* have spaces (A space is manually entered into the yaml file) + try expect(!std.mem.eql(u8, result.elements[0].name, "Example Name ")); + // Test 2nd element try expect(result.elements[1].bool_val == false); try expect(std.mem.eql(u8, result.elements[1].name, "Example Name 2"));