fix: checking if member is required
This commit is contained in:
parent
d2ba0af842
commit
a4d4da348f
2 changed files with 58 additions and 13 deletions
|
@ -726,7 +726,8 @@ const JsonMember = struct {
|
||||||
field_name: []const u8,
|
field_name: []const u8,
|
||||||
json_key: []const u8,
|
json_key: []const u8,
|
||||||
target: []const u8,
|
target: []const u8,
|
||||||
shape: Shape,
|
type_member: smithy.TypeMember,
|
||||||
|
shape_info: smithy.ShapeInfo,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn getJsonMembers(allocator: std.mem.Allocator, shape: Shape, state: GenerationState) !std.ArrayListUnmanaged(JsonMember) {
|
fn getJsonMembers(allocator: std.mem.Allocator, shape: Shape, state: GenerationState) !std.ArrayListUnmanaged(JsonMember) {
|
||||||
|
@ -747,7 +748,8 @@ fn getJsonMembers(allocator: std.mem.Allocator, shape: Shape, state: GenerationS
|
||||||
.field_name = try constantName(allocator, member.name, .snake),
|
.field_name = try constantName(allocator, member.name, .snake),
|
||||||
.json_key = key,
|
.json_key = key,
|
||||||
.target = member.target,
|
.target = member.target,
|
||||||
.shape = (try shapeInfoForId(member.target, state)).shape,
|
.type_member = member,
|
||||||
|
.shape_info = try shapeInfoForId(member.target, state),
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
else => {},
|
else => {},
|
||||||
|
@ -842,16 +844,17 @@ fn shapeIsLeaf(shape: Shape) bool {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn shapeIsOptional(shape: Shape) bool {
|
fn shapeIsOptional(member: smithy.TypeMember) bool {
|
||||||
const traits = getShapeTraits(shape);
|
var optional = true;
|
||||||
|
|
||||||
for (traits) |t| {
|
for (member.traits) |t| {
|
||||||
if (t == .required) {
|
if (t == .required) {
|
||||||
return false;
|
optional = false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return optional;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn getShapeJsonValueType(shape: Shape) []const u8 {
|
fn getShapeJsonValueType(shape: Shape) []const u8 {
|
||||||
|
@ -874,10 +877,10 @@ fn getMemberValueBlock(allocator: std.mem.Allocator, source: []const u8, member:
|
||||||
var output_block = std.ArrayListUnmanaged(u8){};
|
var output_block = std.ArrayListUnmanaged(u8){};
|
||||||
var writer = output_block.writer(allocator);
|
var writer = output_block.writer(allocator);
|
||||||
|
|
||||||
if (shapeIsLeaf(member.shape)) {
|
if (shapeIsLeaf(member.shape_info.shape)) {
|
||||||
const json_value_type = getShapeJsonValueType(member.shape);
|
const json_value_type = getShapeJsonValueType(member.shape_info.shape);
|
||||||
|
|
||||||
if (shapeIsOptional(member.shape)) {
|
if (shapeIsOptional(member.type_member)) {
|
||||||
try writer.print("if ({s}) |{s}|", .{ member_value, member_value_name });
|
try writer.print("if ({s}) |{s}|", .{ member_value, member_value_name });
|
||||||
try writer.writeAll(".{");
|
try writer.writeAll(".{");
|
||||||
try writer.writeAll(json_value_type);
|
try writer.writeAll(json_value_type);
|
||||||
|
|
48
src/aws.zig
48
src/aws.zig
|
@ -2584,7 +2584,9 @@ test "test server timeout works" {
|
||||||
std.log.debug("test complete", .{});
|
std.log.debug("test complete", .{});
|
||||||
}
|
}
|
||||||
|
|
||||||
test "toJson" {
|
const testing = std.testing;
|
||||||
|
|
||||||
|
test "toJson: structure + enums" {
|
||||||
const request = services.media_convert.PutPolicyRequest{
|
const request = services.media_convert.PutPolicyRequest{
|
||||||
.policy = .{
|
.policy = .{
|
||||||
.http_inputs = "foo",
|
.http_inputs = "foo",
|
||||||
|
@ -2593,7 +2595,7 @@ test "toJson" {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
var arena = std.heap.ArenaAllocator.init(std.testing.allocator);
|
var arena = std.heap.ArenaAllocator.init(testing.allocator);
|
||||||
defer arena.deinit();
|
defer arena.deinit();
|
||||||
|
|
||||||
const request_json_value = try request.toJson(arena.allocator());
|
const request_json_value = try request.toJson(arena.allocator());
|
||||||
|
@ -2601,5 +2603,45 @@ test "toJson" {
|
||||||
const request_json = try std.json.stringifyAlloc(std.testing.allocator, request_json_value, .{});
|
const request_json = try std.json.stringifyAlloc(std.testing.allocator, request_json_value, .{});
|
||||||
defer std.testing.allocator.free(request_json);
|
defer std.testing.allocator.free(request_json);
|
||||||
|
|
||||||
std.debug.print("{s}\n", .{request_json});
|
try testing.expectEqualStrings("{\"policy\":{\"httpInputs\":\"foo\",\"httpsInputs\":\"bar\",\"s3Inputs\":\"baz\"}}", request_json);
|
||||||
|
}
|
||||||
|
|
||||||
|
test "toJson: strings" {
|
||||||
|
const request = services.media_convert.AssociateCertificateRequest{
|
||||||
|
.arn = "1234",
|
||||||
|
};
|
||||||
|
|
||||||
|
var arena = std.heap.ArenaAllocator.init(testing.allocator);
|
||||||
|
defer arena.deinit();
|
||||||
|
|
||||||
|
const request_json_value = try request.toJson(arena.allocator());
|
||||||
|
|
||||||
|
const request_json = try std.json.stringifyAlloc(std.testing.allocator, request_json_value, .{});
|
||||||
|
defer std.testing.allocator.free(request_json);
|
||||||
|
|
||||||
|
try testing.expectEqualStrings("{\"arn\":\"1234\"}", request_json);
|
||||||
|
}
|
||||||
|
|
||||||
|
test "toJson: map" {
|
||||||
|
var tags = [_]services.media_convert.MapOfStringKeyValue{
|
||||||
|
.{
|
||||||
|
.key = "foo",
|
||||||
|
.value = "bar",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const request = services.media_convert.TagResourceRequest{
|
||||||
|
.arn = "1234",
|
||||||
|
.tags = &tags,
|
||||||
|
};
|
||||||
|
|
||||||
|
var arena = std.heap.ArenaAllocator.init(testing.allocator);
|
||||||
|
defer arena.deinit();
|
||||||
|
|
||||||
|
const request_json_value = try request.toJson(arena.allocator());
|
||||||
|
|
||||||
|
const request_json = try std.json.stringifyAlloc(std.testing.allocator, request_json_value, .{});
|
||||||
|
defer std.testing.allocator.free(request_json);
|
||||||
|
|
||||||
|
try testing.expectEqualStrings("{\"arn\":\"1234\"}", request_json);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue