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,
|
||||
json_key: []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) {
|
||||
|
@ -747,7 +748,8 @@ fn getJsonMembers(allocator: std.mem.Allocator, shape: Shape, state: GenerationS
|
|||
.field_name = try constantName(allocator, member.name, .snake),
|
||||
.json_key = key,
|
||||
.target = member.target,
|
||||
.shape = (try shapeInfoForId(member.target, state)).shape,
|
||||
.type_member = member,
|
||||
.shape_info = try shapeInfoForId(member.target, state),
|
||||
});
|
||||
},
|
||||
else => {},
|
||||
|
@ -842,16 +844,17 @@ fn shapeIsLeaf(shape: Shape) bool {
|
|||
};
|
||||
}
|
||||
|
||||
fn shapeIsOptional(shape: Shape) bool {
|
||||
const traits = getShapeTraits(shape);
|
||||
fn shapeIsOptional(member: smithy.TypeMember) bool {
|
||||
var optional = true;
|
||||
|
||||
for (traits) |t| {
|
||||
for (member.traits) |t| {
|
||||
if (t == .required) {
|
||||
return false;
|
||||
optional = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return optional;
|
||||
}
|
||||
|
||||
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 writer = output_block.writer(allocator);
|
||||
|
||||
if (shapeIsLeaf(member.shape)) {
|
||||
const json_value_type = getShapeJsonValueType(member.shape);
|
||||
if (shapeIsLeaf(member.shape_info.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.writeAll(".{");
|
||||
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", .{});
|
||||
}
|
||||
|
||||
test "toJson" {
|
||||
const testing = std.testing;
|
||||
|
||||
test "toJson: structure + enums" {
|
||||
const request = services.media_convert.PutPolicyRequest{
|
||||
.policy = .{
|
||||
.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();
|
||||
|
||||
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, .{});
|
||||
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