Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion antd-zig/src/antd.zig
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ pub const Client = struct {

req.wait() catch return error.HttpError;

const status_code = @intFromEnum(req.status);
const status_code = @intFromEnum(req.response.status);

// For HEAD requests, just check status
if (method == .HEAD) {
Expand Down
52 changes: 26 additions & 26 deletions antd-zig/src/json_helpers.zig
Original file line number Diff line number Diff line change
Expand Up @@ -210,27 +210,27 @@ fn dupeU64(v: std.json.Value) u64 {

/// Escape a string for JSON output.
fn jsonEscapeString(allocator: Allocator, s: []const u8) ![]const u8 {
var list: std.ArrayList(u8) = .empty;
errdefer list.deinit(allocator);
try list.append(allocator, '"');
var list = std.ArrayList(u8).init(allocator);
errdefer list.deinit();
try list.append('"');
for (s) |c| {
switch (c) {
'"' => try list.appendSlice(allocator, "\\\""),
'\\' => try list.appendSlice(allocator, "\\\\"),
'\n' => try list.appendSlice(allocator, "\\n"),
'\r' => try list.appendSlice(allocator, "\\r"),
'\t' => try list.appendSlice(allocator, "\\t"),
'"' => try list.appendSlice("\\\""),
'\\' => try list.appendSlice("\\\\"),
'\n' => try list.appendSlice("\\n"),
'\r' => try list.appendSlice("\\r"),
'\t' => try list.appendSlice("\\t"),
else => {
if (c < 0x20) {
try list.writer(allocator).print("\\u{x:0>4}", .{c});
try list.writer().print("\\u{x:0>4}", .{c});
} else {
try list.append(allocator, c);
try list.append(c);
}
},
}
}
try list.append(allocator, '"');
return list.toOwnedSlice(allocator);
try list.append('"');
return list.toOwnedSlice();
}

/// Build a JSON object string with a single base64-encoded "data" field.
Expand Down Expand Up @@ -271,45 +271,45 @@ pub const JsonValue = union(enum) {

/// Build a JSON request body from key-value pairs.
pub fn buildJsonBody(allocator: Allocator, fields: []const struct { key: []const u8, value: JsonValue }) ![]const u8 {
var buf: std.ArrayList(u8) = .empty;
errdefer buf.deinit(allocator);
var buf = std.ArrayList(u8).init(allocator);
errdefer buf.deinit();

try buf.append(allocator, '{');
try buf.append('{');

for (fields, 0..) |field, i| {
if (i > 0) try buf.append(allocator, ',');
if (i > 0) try buf.append(',');

// Write key
const escaped_key = jsonEscapeString(allocator, field.key) catch return error.JsonError;
defer allocator.free(escaped_key);
try buf.appendSlice(allocator, escaped_key);
try buf.append(allocator, ':');
try buf.appendSlice(escaped_key);
try buf.append(':');

// Write value
switch (field.value) {
.string => |s| {
const escaped_val = jsonEscapeString(allocator, s) catch return error.JsonError;
defer allocator.free(escaped_val);
try buf.appendSlice(allocator, escaped_val);
try buf.appendSlice(escaped_val);
},
.boolean => |b| {
try buf.appendSlice(allocator, if (b) "true" else "false");
try buf.appendSlice(if (b) "true" else "false");
},
.string_array => |arr| {
try buf.append(allocator, '[');
try buf.append('[');
for (arr, 0..) |item, j| {
if (j > 0) try buf.append(allocator, ',');
if (j > 0) try buf.append(',');
const escaped_item = jsonEscapeString(allocator, item) catch return error.JsonError;
defer allocator.free(escaped_item);
try buf.appendSlice(allocator, escaped_item);
try buf.appendSlice(escaped_item);
}
try buf.append(allocator, ']');
try buf.append(']');
},
}
}

try buf.append(allocator, '}');
return buf.toOwnedSlice(allocator);
try buf.append('}');
return buf.toOwnedSlice();
}

/// Parse a WalletAddress from a JSON response body.
Expand Down
10 changes: 5 additions & 5 deletions antd-zig/src/tests.zig
Original file line number Diff line number Diff line change
Expand Up @@ -134,14 +134,14 @@ test "parseBase64Data decodes data" {
try testing.expectEqualStrings("hello", result);
}

test "parseCost extracts cost" {
test "parseCostEstimate extracts cost" {
const body =
\\{"cost":"500"}
\\{"cost":"500","file_size":0,"chunk_count":0,"estimated_gas_cost_wei":"0","payment_mode":""}
;
const result = try json_helpers.parseCost(testing.allocator, body);
defer testing.allocator.free(result);
const result = try json_helpers.parseCostEstimate(testing.allocator, body);
defer result.deinit(testing.allocator);

try testing.expectEqualStrings("500", result);
try testing.expectEqualStrings("500", result.cost);
}

// =============================================================================
Expand Down