From c6a1bb2418094a9f9e7fefcb528b19ee5561d8e6 Mon Sep 17 00:00:00 2001 From: Emil Lerch Date: Wed, 7 May 2025 12:25:21 -0700 Subject: [PATCH] upgrade smithy to 4187d899 (enables optional service version) --- build.zig.zon | 4 ++-- codegen/src/main.zig | 12 +++++++++--- src/aws.zig | 10 +++++----- src/servicemodel.zig | 6 +++--- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/build.zig.zon b/build.zig.zon index b0be3a9..f26a80f 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -14,8 +14,8 @@ .dependencies = .{ .smithy = .{ - .url = "https://git.lerch.org/lobo/smithy/archive/a4c6ec6dfe552c57bab601c7d99e8de02bbab1fe.tar.gz", - .hash = "smithy-1.0.0-uAyBgS_MAgC4qgc9QaEy5Y5Nf7kv32buQZBYugqNQsAn", + .url = "https://git.lerch.org/lobo/smithy/archive/4187d8995112bfa2a071ea04f27a1da7c2259aab.tar.gz", + .hash = "smithy-1.0.0-uAyBgXrRAgB7bdZwFdSwAVSzfmXSu_DZyjh0MlQUdinw", }, .models = .{ .url = "https://github.com/aws/aws-sdk-go-v2/archive/58cf6509525a12d64fd826da883bfdbacbd2f00e.tar.gz", diff --git a/codegen/src/main.zig b/codegen/src/main.zig index 6b90962..c5b223a 100644 --- a/codegen/src/main.zig +++ b/codegen/src/main.zig @@ -373,7 +373,7 @@ fn generateServices(allocator: std.mem.Allocator, comptime _: []const u8, file: }; for (services.items) |service| { 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; var arn_namespace: ?[]const u8 = undefined; 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); try constant_names.append(constant_name); 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}); if (arn_namespace) |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 try writer.print("pub const aws_protocol: smithy.AwsProtocol = {};\n\n", .{aws_protocol}); _ = 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}); if (arn_namespace) |a| { try writer.print(" arn_namespace: ?[]const u8 = \"{s}\",\n", .{a}); diff --git a/src/aws.zig b/src/aws.zig index c22e05f..de72442 100644 --- a/src/aws.zig +++ b/src/aws.zig @@ -157,7 +157,7 @@ pub fn Request(comptime request_action: anytype) type { // every codegenned request object includes a metaInfo function to get // 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.sigv4_name, Self.service_meta.version, @@ -274,8 +274,8 @@ pub fn Request(comptime request_action: anytype) type { const attrs = try std.fmt.allocPrint( options.client.allocator, "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 // Need to serialize this @@ -366,7 +366,7 @@ pub fn Request(comptime request_action: anytype) type { else // EC2 try std.fmt.allocPrint(options.client.allocator, "?Action={s}&Version={s}", .{ 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) { @@ -379,7 +379,7 @@ pub fn Request(comptime request_action: anytype) type { const body = try std.fmt.allocPrint(options.client.allocator, "Action={s}&Version={s}{s}{s}", .{ 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, buffer.items, }); diff --git a/src/servicemodel.zig b/src/servicemodel.zig index a71bea3..f5abba3 100644 --- a/src/servicemodel.zig +++ b/src/servicemodel.zig @@ -39,7 +39,7 @@ fn serviceCount(desired_services: anytype) usize { pub const services = service_list; 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" { 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" { // get request object. This call doesn't have parameters 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" { const filtered_services = Services(.{ .sts, .wafv2 }){}; - try expectEqualStrings("2011-06-15", filtered_services.sts.version); + try expectEqualStrings("2011-06-15", filtered_services.sts.version.?); }