const std = @import("std"); pub fn main() !void { std.debug.print("Downloading input from adventofcode.com\n", .{}); var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); defer arena.deinit(); const allocator = arena.allocator(); const args = try std.process.argsAlloc(allocator); if (args.len != 3) return error.InvalidArguments; const day = try std.fmt.parseInt(u32, args[1], 10); const output_file_path = args[2]; var output_file = try std.fs.cwd().createFile(output_file_path, .{}); defer output_file.close(); const url = try std.fmt.allocPrint(allocator, "https://adventofcode.com/2024/day/{}/input", .{day}); defer allocator.free(url); const session_cookie_header = try std.fmt.allocPrint(allocator, "session={s}", .{ std.posix.getenv("AOC_SESSION") orelse return error.MissingAocSession, }); defer allocator.free(session_cookie_header); var response = std.ArrayList(u8).init(allocator); var client = std.http.Client{ .allocator = allocator }; const result = try client.fetch(.{ .location = .{ .url = url }, .response_storage = .{ .dynamic = &response }, .extra_headers = &[_]std.http.Header{ .{ .name = "Cookie", .value = session_cookie_header }, }, }); if (result.status != .ok) return error.InvalidStatusCode; try output_file.writeAll(response.items); return std.process.cleanExit(); }