From e270017c8601af4dc8645485aab2196d17d18a00 Mon Sep 17 00:00:00 2001 From: Alex Selimov Date: Fri, 29 May 2026 09:06:40 -0400 Subject: [PATCH] Remove OG zig code (unneeded for now) --- src/env.zig | 28 ----- src/http_utils/http_client_wrapper.zig | 155 ------------------------- src/test_git.zig | 29 ----- 3 files changed, 212 deletions(-) delete mode 100644 src/env.zig delete mode 100644 src/http_utils/http_client_wrapper.zig delete mode 100644 src/test_git.zig diff --git a/src/env.zig b/src/env.zig deleted file mode 100644 index 7844555..0000000 --- a/src/env.zig +++ /dev/null @@ -1,28 +0,0 @@ -const std = @import("std"); - -pub const Env = struct { - github_token: ?[]const u8, - pub fn init(env_map: *const std.process.Environ.Map) !Env { - const github_token = env_map.get("GITHUB_TOKEN") orelse null; - return .{ .github_token = github_token }; - } -}; - -test "Validate that missing github token is null" { - const allocator = std.testing.allocator; - var env_map = std.process.Environ.Map.init(allocator); - defer env_map.deinit(); - - const env: Env = try .init(&env_map); - try std.testing.expect(env.github_token == null); -} - -test "Validate that present github token isn't null" { - const allocator = std.testing.allocator; - var env_map = std.process.Environ.Map.init(allocator); - try env_map.put("GITHUB_TOKEN", "some_token"); - defer env_map.deinit(); - - const env: Env = try .init(&env_map); - try std.testing.expect(std.mem.eql(u8, env.github_token.?, "some_token")); -} diff --git a/src/http_utils/http_client_wrapper.zig b/src/http_utils/http_client_wrapper.zig deleted file mode 100644 index 6231a03..0000000 --- a/src/http_utils/http_client_wrapper.zig +++ /dev/null @@ -1,155 +0,0 @@ -const std = @import("std"); - -const HttpError = error{UnexpectedStatus}; -pub const HttpClientWrapper = @This(); - -client: std.http.Client, - -const ResponseOptions = struct { - token: ?[]const u8 = null, - extra_headers: []const std.http.Header = &.{}, -}; - -// The caller is in charge of freeing the memory -pub fn makeAuthorizationHeaderFromToken(allocator: std.mem.Allocator, token: []const u8) ![]u8 { - return try std.fmt.allocPrint(allocator, "Authorization: Bearer {s}", .{token}); -} - -// Get raw response -pub fn getRawResponse( - client_wrapper: *HttpClientWrapper, - allocator: std.mem.Allocator, - url: []const u8, - response_options: ResponseOptions, -) ![]u8 { - var auth_header: []u8 = undefined; - - defer allocator.free(auth_header); - if (response_options.token) |token| { - auth_header = try makeAuthorizationHeaderFromToken(allocator, token); - } else { - auth_header = ""; - } - - //Get the endpoint - const endpoint = try std.Uri.parse(url); - var request = try client_wrapper.client.request(.GET, endpoint, .{ - .headers = .{ .authorization = .{ .override = auth_header } }, - .extra_headers = response_options.extra_headers, - }); - - defer request.deinit(); - - try request.sendBodiless(); - var response = try request.receiveHead(&.{}); - - var transfer_buffer: [64]u8 = undefined; - var decompress: std.http.Decompress = undefined; - var decompress_buffer: [std.compress.flate.max_window_len]u8 = undefined; - const response_reader = response.readerDecompressing( - transfer_buffer[0..], - &decompress, - decompress_buffer[0..], - ); - - if (response.head.status.class() != .success) { - return HttpError.UnexpectedStatus; - } - - return response_reader.allocRemaining(allocator, .unlimited); -} - -pub fn getResponse( - client_wrapper: *HttpClientWrapper, - comptime T: type, - allocator: std.mem.Allocator, - url: []const u8, -) !std.json.Parsed(T) { - //Get the endpoint - const endpoint = try std.Uri.parse(url); - var request = try client_wrapper.client.request(.GET, endpoint, .{}); - defer request.deinit(); - - try request.sendBodiless(); - var response = try request.receiveHead(&.{}); - - var transfer_buffer: [64]u8 = undefined; - var decompress: std.http.Decompress = undefined; - var decompress_buffer: [std.compress.flate.max_window_len]u8 = undefined; - const response_reader = response.readerDecompressing( - transfer_buffer[0..], - &decompress, - decompress_buffer[0..], - ); - - if (response.head.status.class() != .success) { - return HttpError.UnexpectedStatus; - } - - var json_reader: std.json.Reader = .init(allocator, response_reader); - defer json_reader.deinit(); - - const parsed: std.json.Parsed(T) = try std.json.parseFromTokenSource( - T, - allocator, - &json_reader, - .{ - .ignore_unknown_fields = true, - .allocate = .alloc_always, - }, - ); - return parsed; -} - -pub fn deinit(client_wrapper: *HttpClientWrapper) void { - client_wrapper.client.deinit(); -} - -// Tests - -test "makeAuthorizationHeader makes the right header" { - const token = "Some Bearer Token"; - const allocator = std.testing.allocator; - - const header = try makeAuthorizationHeaderFromToken(allocator, token); - defer allocator.free(header); - - try std.testing.expect(std.mem.eql(u8, header, "Authorization: Bearer Some Bearer Token")); -} - -test "Test getResponse" { - const io = std.Io.Threaded.global_single_threaded.io(); - const allocator = std.testing.allocator; - - const HelloMessage = struct { message: []u8 }; - - const http_client: std.http.Client = .{ .allocator = allocator, .io = io }; - var test_client: HttpClientWrapper = .{ .client = http_client }; - defer test_client.deinit(); - - const parsed = try test_client.getResponse( - HelloMessage, - allocator, - "http://localhost:8080/hello", - ); - defer parsed.deinit(); - try std.testing.expect(std.mem.eql(u8, parsed.value.message, "hello")); -} - -test "Test getRawResponse" { - const io = std.Io.Threaded.global_single_threaded.io(); - const allocator = std.testing.allocator; - - const http_client: std.http.Client = .{ .allocator = allocator, .io = io }; - var test_client: HttpClientWrapper = .{ .client = http_client }; - defer test_client.deinit(); - - const response = try test_client.getRawResponse( - allocator, - "http://localhost:8080/hello-raw", - .{}, - ); - defer allocator.free(response); - - try std.testing.expect(std.mem.eql(u8, response, "hello\n")); -} diff --git a/src/test_git.zig b/src/test_git.zig deleted file mode 100644 index bc4603f..0000000 --- a/src/test_git.zig +++ /dev/null @@ -1,29 +0,0 @@ -const env_config = @import("env.zig"); -const http_utils = @import("http_utils/http_client_wrapper.zig"); -const std = @import("std"); - -test "Test get github file contents passing authorization and content-type" { - const io = std.Io.Threaded.global_single_threaded.io(); - const allocator = std.testing.allocator; - - const http_client: std.http.Client = .{ .allocator = allocator, .io = io }; - var test_client: http_utils.HttpClientWrapper = .{ .client = http_client }; - defer test_client.deinit(); - - var env_map = try std.process.Environ.createMap(std.testing.environ, allocator); - defer env_map.deinit(); - const env: env_config.Env = try .init(&env_map); - - const extra_headers: []const std.http.Header = &.{ - .{ .name = "Accept", .value = "application/vnd.github.raw+json" }, - .{ .name = "X-GitHub-Api-Version", .value = "2026-03-10" }, - }; - const response = try test_client.getRawResponse( - allocator, - "https://api.github.com/repos/aselimov/upvoters/contents/README.md", - .{ .token = env.github_token, .extra_headers = extra_headers }, - ); - defer allocator.free(response); - - try std.testing.expect(std.mem.containsAtLeast(u8, response, 1, "upvoters")); -}