upgrade smithy to 4187d899 (enables optional service version)

This commit is contained in:
Emil Lerch 2025-05-07 12:25:21 -07:00
parent 57a7cf3190
commit c6a1bb2418
Signed by: lobo
GPG key ID: A7B62D657EF764F8
4 changed files with 19 additions and 13 deletions

View file

@ -14,8 +14,8 @@
.dependencies = .{ .dependencies = .{
.smithy = .{ .smithy = .{
.url = "https://git.lerch.org/lobo/smithy/archive/a4c6ec6dfe552c57bab601c7d99e8de02bbab1fe.tar.gz", .url = "https://git.lerch.org/lobo/smithy/archive/4187d8995112bfa2a071ea04f27a1da7c2259aab.tar.gz",
.hash = "smithy-1.0.0-uAyBgS_MAgC4qgc9QaEy5Y5Nf7kv32buQZBYugqNQsAn", .hash = "smithy-1.0.0-uAyBgXrRAgB7bdZwFdSwAVSzfmXSu_DZyjh0MlQUdinw",
}, },
.models = .{ .models = .{
.url = "https://github.com/aws/aws-sdk-go-v2/archive/58cf6509525a12d64fd826da883bfdbacbd2f00e.tar.gz", .url = "https://github.com/aws/aws-sdk-go-v2/archive/58cf6509525a12d64fd826da883bfdbacbd2f00e.tar.gz",

View file

@ -373,7 +373,7 @@ fn generateServices(allocator: std.mem.Allocator, comptime _: []const u8, file:
}; };
for (services.items) |service| { for (services.items) |service| {
var sdk_id: []const u8 = undefined; var sdk_id: []const u8 = undefined;
const version: []const u8 = service.shape.service.version; const version: ?[]const u8 = service.shape.service.version;
const name: []const u8 = service.name; const name: []const u8 = service.name;
var arn_namespace: ?[]const u8 = undefined; var arn_namespace: ?[]const u8 = undefined;
var sigv4_name: ?[]const u8 = null; var sigv4_name: ?[]const u8 = null;
@ -404,7 +404,10 @@ fn generateServices(allocator: std.mem.Allocator, comptime _: []const u8, file:
const constant_name = try constantName(allocator, sdk_id); const constant_name = try constantName(allocator, sdk_id);
try constant_names.append(constant_name); try constant_names.append(constant_name);
try writer.print("const Self = @This();\n", .{}); try writer.print("const Self = @This();\n", .{});
try writer.print("pub const version: []const u8 = \"{s}\";\n", .{version}); if (version) |v|
try writer.print("pub const version: ?[]const u8 = \"{s}\";\n", .{v})
else
try writer.print("pub const version: ?[]const u8 = null;\n", .{});
try writer.print("pub const sdk_id: []const u8 = \"{s}\";\n", .{sdk_id}); try writer.print("pub const sdk_id: []const u8 = \"{s}\";\n", .{sdk_id});
if (arn_namespace) |a| { if (arn_namespace) |a| {
try writer.print("pub const arn_namespace: ?[]const u8 = \"{s}\";\n", .{a}); try writer.print("pub const arn_namespace: ?[]const u8 = \"{s}\";\n", .{a});
@ -415,7 +418,10 @@ fn generateServices(allocator: std.mem.Allocator, comptime _: []const u8, file:
// TODO: This really should just be ".whatevs". We're fully qualifying here, which isn't typical // TODO: This really should just be ".whatevs". We're fully qualifying here, which isn't typical
try writer.print("pub const aws_protocol: smithy.AwsProtocol = {};\n\n", .{aws_protocol}); try writer.print("pub const aws_protocol: smithy.AwsProtocol = {};\n\n", .{aws_protocol});
_ = try writer.write("pub const service_metadata: struct {\n"); _ = try writer.write("pub const service_metadata: struct {\n");
try writer.print(" version: []const u8 = \"{s}\",\n", .{version}); if (version) |v|
try writer.print(" version: ?[]const u8 = \"{s}\",\n", .{v})
else
try writer.print(" version: ?[]const u8 = null,\n", .{});
try writer.print(" sdk_id: []const u8 = \"{s}\",\n", .{sdk_id}); try writer.print(" sdk_id: []const u8 = \"{s}\",\n", .{sdk_id});
if (arn_namespace) |a| { if (arn_namespace) |a| {
try writer.print(" arn_namespace: ?[]const u8 = \"{s}\",\n", .{a}); try writer.print(" arn_namespace: ?[]const u8 = \"{s}\",\n", .{a});

View file

@ -157,7 +157,7 @@ pub fn Request(comptime request_action: anytype) type {
// every codegenned request object includes a metaInfo function to get // every codegenned request object includes a metaInfo function to get
// pointers to service and action // pointers to service and action
log.debug("call: prefix {s}, sigv4 {s}, version {s}, action {s}", .{ log.debug("call: prefix {s}, sigv4 {s}, version {?s}, action {s}", .{
Self.service_meta.endpoint_prefix, Self.service_meta.endpoint_prefix,
Self.service_meta.sigv4_name, Self.service_meta.sigv4_name,
Self.service_meta.version, Self.service_meta.version,
@ -274,8 +274,8 @@ pub fn Request(comptime request_action: anytype) type {
const attrs = try std.fmt.allocPrint( const attrs = try std.fmt.allocPrint(
options.client.allocator, options.client.allocator,
"xmlns=\"http://{s}.amazonaws.com/doc/{s}/\"", "xmlns=\"http://{s}.amazonaws.com/doc/{s}/\"",
.{ sm.endpoint_prefix, sm.version }, .{ sm.endpoint_prefix, sm.version.? },
); ); // Version required for the protocol, we should panic if it is not present
defer options.client.allocator.free(attrs); // once serialized, the value should be copied over defer options.client.allocator.free(attrs); // once serialized, the value should be copied over
// Need to serialize this // Need to serialize this
@ -366,7 +366,7 @@ pub fn Request(comptime request_action: anytype) type {
else // EC2 else // EC2
try std.fmt.allocPrint(options.client.allocator, "?Action={s}&Version={s}", .{ try std.fmt.allocPrint(options.client.allocator, "?Action={s}&Version={s}", .{
action.action_name, action.action_name,
Self.service_meta.version, Self.service_meta.version.?, // Version required for the protocol, we should panic if it is not present
}); });
defer if (Self.service_meta.aws_protocol != .query) { defer if (Self.service_meta.aws_protocol != .query) {
@ -379,7 +379,7 @@ pub fn Request(comptime request_action: anytype) type {
const body = const body =
try std.fmt.allocPrint(options.client.allocator, "Action={s}&Version={s}{s}{s}", .{ try std.fmt.allocPrint(options.client.allocator, "Action={s}&Version={s}{s}{s}", .{
action.action_name, action.action_name,
Self.service_meta.version, Self.service_meta.version.?, // Version required for the protocol, we should panic if it is not present
continuation, continuation,
buffer.items, buffer.items,
}); });

View file

@ -39,7 +39,7 @@ fn serviceCount(desired_services: anytype) usize {
pub const services = service_list; pub const services = service_list;
test "services includes sts" { test "services includes sts" {
try expectEqualStrings("2011-06-15", services.sts.version); try expectEqualStrings("2011-06-15", services.sts.version.?);
} }
test "sts includes get_caller_identity" { test "sts includes get_caller_identity" {
try expectEqualStrings("GetCallerIdentity", services.sts.get_caller_identity.action_name); try expectEqualStrings("GetCallerIdentity", services.sts.get_caller_identity.action_name);
@ -47,9 +47,9 @@ test "sts includes get_caller_identity" {
test "can get service and action name from request" { test "can get service and action name from request" {
// get request object. This call doesn't have parameters // get request object. This call doesn't have parameters
const metadata = services.sts.get_caller_identity.Request.metaInfo(); const metadata = services.sts.get_caller_identity.Request.metaInfo();
try expectEqualStrings("2011-06-15", metadata.service_metadata.version); try expectEqualStrings("2011-06-15", metadata.service_metadata.version.?);
} }
test "can filter services" { test "can filter services" {
const filtered_services = Services(.{ .sts, .wafv2 }){}; const filtered_services = Services(.{ .sts, .wafv2 }){};
try expectEqualStrings("2011-06-15", filtered_services.sts.version); try expectEqualStrings("2011-06-15", filtered_services.sts.version.?);
} }