update generated models for xml mappings
This commit is contained in:
parent
744d834cfd
commit
f374df3fa1
|
@ -544,12 +544,12 @@ fn generateSimpleTypeFor(_: anytype, type_name: []const u8, writer: anytype) !vo
|
||||||
}
|
}
|
||||||
fn generateComplexTypeFor(shape_id: []const u8, members: []smithy.TypeMember, type_type_name: []const u8, writer: anytype, state: GenerationState) anyerror!void {
|
fn generateComplexTypeFor(shape_id: []const u8, members: []smithy.TypeMember, type_type_name: []const u8, writer: anytype, state: GenerationState) anyerror!void {
|
||||||
_ = shape_id;
|
_ = shape_id;
|
||||||
const Mapping = struct { snake: []const u8, json: []const u8 };
|
const Mapping = struct { snake: []const u8, original: []const u8 };
|
||||||
var json_field_name_mappings = try std.ArrayList(Mapping).initCapacity(state.allocator, members.len);
|
var field_name_mappings = try std.ArrayList(Mapping).initCapacity(state.allocator, members.len);
|
||||||
defer {
|
defer {
|
||||||
for (json_field_name_mappings.items) |mapping|
|
for (field_name_mappings.items) |mapping|
|
||||||
state.allocator.free(mapping.snake);
|
state.allocator.free(mapping.snake);
|
||||||
json_field_name_mappings.deinit();
|
field_name_mappings.deinit();
|
||||||
}
|
}
|
||||||
// There is an httpQueryParams trait as well, but nobody is using it. API GW
|
// There is an httpQueryParams trait as well, but nobody is using it. API GW
|
||||||
// pretends to, but it's an empty map
|
// pretends to, but it's an empty map
|
||||||
|
@ -591,15 +591,19 @@ fn generateComplexTypeFor(shape_id: []const u8, members: []smithy.TypeMember, ty
|
||||||
switch (trait) {
|
switch (trait) {
|
||||||
.json_name => {
|
.json_name => {
|
||||||
found_name_trait = true;
|
found_name_trait = true;
|
||||||
json_field_name_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .json = trait.json_name });
|
field_name_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .original = trait.json_name });
|
||||||
},
|
},
|
||||||
.http_query => http_query_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .json = trait.http_query }),
|
.xml_name => {
|
||||||
.http_header => http_header_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .json = trait.http_header }),
|
found_name_trait = true;
|
||||||
|
field_name_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .original = trait.xml_name });
|
||||||
|
},
|
||||||
|
.http_query => http_query_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .original = trait.http_query }),
|
||||||
|
.http_header => http_header_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .original = trait.http_header }),
|
||||||
else => {},
|
else => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found_name_trait)
|
if (!found_name_trait)
|
||||||
json_field_name_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .json = member.name });
|
field_name_mappings.appendAssumeCapacity(.{ .snake = try state.allocator.dupe(u8, snake_case_member), .original = member.name });
|
||||||
defer state.allocator.free(snake_case_member);
|
defer state.allocator.free(snake_case_member);
|
||||||
try outputIndent(child_state, writer);
|
try outputIndent(child_state, writer);
|
||||||
const member_name = avoidReserved(snake_case_member);
|
const member_name = avoidReserved(snake_case_member);
|
||||||
|
@ -637,11 +641,11 @@ fn generateComplexTypeFor(shape_id: []const u8, members: []smithy.TypeMember, ty
|
||||||
//
|
//
|
||||||
try writer.writeByte('\n');
|
try writer.writeByte('\n');
|
||||||
try outputIndent(child_state, writer);
|
try outputIndent(child_state, writer);
|
||||||
_ = try writer.write("pub fn jsonFieldNameFor(_: @This(), comptime field_name: []const u8) []const u8 {\n");
|
_ = try writer.write("pub fn fieldNameFor(_: @This(), comptime field_name: []const u8) []const u8 {\n");
|
||||||
var grandchild_state = child_state;
|
var grandchild_state = child_state;
|
||||||
grandchild_state.indent_level += 1;
|
grandchild_state.indent_level += 1;
|
||||||
// We need to force output here becaseu we're referencing the field in the return statement below
|
// We need to force output here becaseu we're referencing the field in the return statement below
|
||||||
try writeMappings(grandchild_state, "", "mappings", json_field_name_mappings, true, writer);
|
try writeMappings(grandchild_state, "", "mappings", field_name_mappings, true, writer);
|
||||||
try outputIndent(grandchild_state, writer);
|
try outputIndent(grandchild_state, writer);
|
||||||
_ = try writer.write("return @field(mappings, field_name);\n");
|
_ = try writer.write("return @field(mappings, field_name);\n");
|
||||||
try outputIndent(child_state, writer);
|
try outputIndent(child_state, writer);
|
||||||
|
@ -667,7 +671,7 @@ fn writeStringify(state: GenerationState, fields: [][]const u8, writer: anytype)
|
||||||
try outputIndent(child_state, writer);
|
try outputIndent(child_state, writer);
|
||||||
try writer.print("if (std.mem.eql(u8, \"{s}\", field_name))\n", .{field});
|
try writer.print("if (std.mem.eql(u8, \"{s}\", field_name))\n", .{field});
|
||||||
try outputIndent(return_state, writer);
|
try outputIndent(return_state, writer);
|
||||||
try writer.print("return try serializeMap(self.{s}, self.jsonFieldNameFor(\"{s}\"), options, out_stream);\n", .{ field, field });
|
try writer.print("return try serializeMap(self.{s}, self.fieldNameFor(\"{s}\"), options, out_stream);\n", .{ field, field });
|
||||||
}
|
}
|
||||||
try outputIndent(child_state, writer);
|
try outputIndent(child_state, writer);
|
||||||
_ = try writer.write("return false;\n");
|
_ = try writer.write("return false;\n");
|
||||||
|
@ -690,7 +694,7 @@ fn writeMappings(state: GenerationState, @"pub": []const u8, mapping_name: []con
|
||||||
child_state.indent_level += 1;
|
child_state.indent_level += 1;
|
||||||
for (mappings.items) |mapping| {
|
for (mappings.items) |mapping| {
|
||||||
try outputIndent(child_state, writer);
|
try outputIndent(child_state, writer);
|
||||||
try writer.print(".{s} = \"{s}\",\n", .{ avoidReserved(mapping.snake), mapping.json });
|
try writer.print(".{s} = \"{s}\",\n", .{ avoidReserved(mapping.snake), mapping.original });
|
||||||
}
|
}
|
||||||
try outputIndent(state, writer);
|
try outputIndent(state, writer);
|
||||||
_ = try writer.write("};\n");
|
_ = try writer.write("};\n");
|
||||||
|
|
|
@ -96,6 +96,7 @@ pub const TraitType = enum {
|
||||||
http_label,
|
http_label,
|
||||||
http_query,
|
http_query,
|
||||||
json_name,
|
json_name,
|
||||||
|
xml_name,
|
||||||
required,
|
required,
|
||||||
documentation,
|
documentation,
|
||||||
pattern,
|
pattern,
|
||||||
|
@ -118,6 +119,7 @@ pub const Trait = union(TraitType) {
|
||||||
aws_protocol: AwsProtocol,
|
aws_protocol: AwsProtocol,
|
||||||
ec2_query_name: []const u8,
|
ec2_query_name: []const u8,
|
||||||
json_name: []const u8,
|
json_name: []const u8,
|
||||||
|
xml_name: []const u8,
|
||||||
http: struct {
|
http: struct {
|
||||||
method: []const u8,
|
method: []const u8,
|
||||||
uri: []const u8,
|
uri: []const u8,
|
||||||
|
@ -565,6 +567,8 @@ fn getTrait(trait_type: []const u8, value: std.json.Value) SmithyParseError!?Tra
|
||||||
}
|
}
|
||||||
if (std.mem.eql(u8, trait_type, "smithy.api#jsonName"))
|
if (std.mem.eql(u8, trait_type, "smithy.api#jsonName"))
|
||||||
return Trait{ .json_name = value.String };
|
return Trait{ .json_name = value.String };
|
||||||
|
if (std.mem.eql(u8, trait_type, "smithy.api#xmlName"))
|
||||||
|
return Trait{ .xml_name = value.String };
|
||||||
if (std.mem.eql(u8, trait_type, "smithy.api#httpQuery"))
|
if (std.mem.eql(u8, trait_type, "smithy.api#httpQuery"))
|
||||||
return Trait{ .http_query = value.String };
|
return Trait{ .http_query = value.String };
|
||||||
if (std.mem.eql(u8, trait_type, "smithy.api#httpHeader"))
|
if (std.mem.eql(u8, trait_type, "smithy.api#httpHeader"))
|
||||||
|
@ -617,7 +621,6 @@ fn getTrait(trait_type: []const u8, value: std.json.Value) SmithyParseError!?Tra
|
||||||
\\smithy.api#timestampFormat
|
\\smithy.api#timestampFormat
|
||||||
\\smithy.api#xmlAttribute
|
\\smithy.api#xmlAttribute
|
||||||
\\smithy.api#xmlFlattened
|
\\smithy.api#xmlFlattened
|
||||||
\\smithy.api#xmlName
|
|
||||||
\\smithy.waiters#waitable
|
\\smithy.waiters#waitable
|
||||||
;
|
;
|
||||||
var iterator = std.mem.split(u8, list, "\n");
|
var iterator = std.mem.split(u8, list, "\n");
|
||||||
|
|
|
@ -432,7 +432,7 @@ fn buildPath(allocator: std.mem.Allocator, raw_uri: []const u8, comptime ActionR
|
||||||
in_var = false;
|
in_var = false;
|
||||||
const replacement_var = raw_uri[start..inx];
|
const replacement_var = raw_uri[start..inx];
|
||||||
inline for (std.meta.fields(ActionRequest)) |field| {
|
inline for (std.meta.fields(ActionRequest)) |field| {
|
||||||
if (std.mem.eql(u8, request.jsonFieldNameFor(field.name), replacement_var)) {
|
if (std.mem.eql(u8, request.fieldNameFor(field.name), replacement_var)) {
|
||||||
var replacement_buffer = try std.ArrayList(u8).initCapacity(allocator, raw_uri.len);
|
var replacement_buffer = try std.ArrayList(u8).initCapacity(allocator, raw_uri.len);
|
||||||
defer replacement_buffer.deinit();
|
defer replacement_buffer.deinit();
|
||||||
var encoded_buffer = try std.ArrayList(u8).initCapacity(allocator, raw_uri.len);
|
var encoded_buffer = try std.ArrayList(u8).initCapacity(allocator, raw_uri.len);
|
||||||
|
|
|
@ -2871,8 +2871,8 @@ pub fn stringify(
|
||||||
field_written = try value.jsonStringifyField(Field.name, child_options, out_stream);
|
field_written = try value.jsonStringifyField(Field.name, child_options, out_stream);
|
||||||
|
|
||||||
if (!field_written) {
|
if (!field_written) {
|
||||||
if (comptime std.meta.trait.hasFn("jsonFieldNameFor")(T)) {
|
if (comptime std.meta.trait.hasFn("fieldNameFor")(T)) {
|
||||||
const name = value.jsonFieldNameFor(Field.name);
|
const name = value.fieldNameFor(Field.name);
|
||||||
try stringify(name, options, out_stream);
|
try stringify(name, options, out_stream);
|
||||||
} else {
|
} else {
|
||||||
try stringify(Field.name, options, out_stream);
|
try stringify(Field.name, options, out_stream);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user