@@ -10,37 +10,37 @@ pub const std_options: std.Options = .{
1010
1111fn getWeather (completed : * std .atomic .Value (u32 ), allocator : std .mem .Allocator , city : []const u8 , lang : []const u8 ) anyerror ! []const u8 {
1212 defer _ = completed .fetchAdd (1 , .monotonic );
13- var url : std .BoundedArray (u8 , 256 ) = .{};
13+ var url_buf : [256 ]u8 = undefined ;
14+ var url_writer : std.Io.Writer = .fixed (& url_buf );
1415 if (builtin .target .os .tag == .windows ) {
15- try url . writer () .print ("https://wttr.in/{s}?AFT&lang={s}" , .{ city , lang });
16+ try url_writer .print ("https://wttr.in/{s}?AFT&lang={s}" , .{ city , lang });
1617 } else {
17- try url . writer () .print ("https://wttr.in/{s}?AF&lang={s}" , .{ city , lang });
18+ try url_writer .print ("https://wttr.in/{s}?AF&lang={s}" , .{ city , lang });
1819 }
19- var body = std .ArrayList (u8 ).init (allocator );
20- errdefer body .deinit ();
20+ var body_writer : std.Io.Writer.Allocating = .init (allocator );
2121 var client : std.http.Client = .{ .allocator = allocator };
2222 defer client .deinit ();
2323 _ = try client .fetch (.{
24- .location = .{ .url = url . constSlice () },
25- .response_storage = .{ . dynamic = & body } ,
24+ .location = .{ .url = url_writer . buffered () },
25+ .response_writer = & body_writer . writer ,
2626 });
27- return body .toOwnedSlice ();
27+ return try body_writer .toOwnedSlice ();
2828}
2929
3030fn getLatestZig (completed : * std .atomic .Value (u32 ), allocator : std .mem .Allocator ) anyerror ! []const u8 {
3131 defer _ = completed .fetchAdd (1 , .monotonic );
32- var body = std .ArrayList ( u8 ) .init (allocator );
33- defer body .deinit ();
32+ var body_writer : std.Io.Writer.Allocating = .init (allocator );
33+ defer body_writer .deinit ();
3434 var client : std.http.Client = .{ .allocator = allocator };
3535 defer client .deinit ();
3636 _ = try client .fetch (.{
3737 .location = .{ .url = "https://ziglang.org/download/index.json" },
38- .response_storage = .{ . dynamic = & body } ,
38+ .response_writer = & body_writer . writer ,
3939 });
4040 const Index = struct {
4141 master : struct { version : []const u8 },
4242 };
43- var parsed = try std .json .parseFromSlice (Index , allocator , body . items , .{ .ignore_unknown_fields = true });
43+ var parsed = try std .json .parseFromSlice (Index , allocator , body_writer . written () , .{ .ignore_unknown_fields = true });
4444 defer parsed .deinit ();
4545 return allocator .dupe (u8 , parsed .value .master .version );
4646}
@@ -86,13 +86,13 @@ pub fn main() !void {
8686 var tpool : coro.ThreadPool = try coro .ThreadPool .init (gpa .allocator (), .{});
8787 defer tpool .deinit ();
8888
89- var tasks = std .ArrayList (coro .Task .Generic (anyerror ! []const u8 )). init ( allocator ) ;
90- defer tasks .deinit ();
89+ var tasks : std .ArrayList (coro .Task .Generic (anyerror ! []const u8 )) = .empty ;
90+ defer tasks .deinit (allocator );
9191
92- try tasks .append (try tpool .spawnForCompletion (& scheduler , getWeather , .{ & completed , allocator , "oulu" , "fi" }));
93- try tasks .append (try tpool .spawnForCompletion (& scheduler , getWeather , .{ & completed , allocator , "tokyo" , "ja" }));
94- try tasks .append (try tpool .spawnForCompletion (& scheduler , getWeather , .{ & completed , allocator , "portland" , "en" }));
95- try tasks .append (try tpool .spawnForCompletion (& scheduler , getLatestZig , .{ & completed , allocator }));
92+ try tasks .append (allocator , try tpool .spawnForCompletion (& scheduler , getWeather , .{ & completed , allocator , "oulu" , "fi" }));
93+ try tasks .append (allocator , try tpool .spawnForCompletion (& scheduler , getWeather , .{ & completed , allocator , "tokyo" , "ja" }));
94+ try tasks .append (allocator , try tpool .spawnForCompletion (& scheduler , getWeather , .{ & completed , allocator , "portland" , "en" }));
95+ try tasks .append (allocator , try tpool .spawnForCompletion (& scheduler , getLatestZig , .{ & completed , allocator }));
9696
9797 max = @intCast (tasks .items .len );
9898 while (completed .load (.acquire ) < tasks .items .len ) {
@@ -102,18 +102,23 @@ pub fn main() !void {
102102 // don't really have to call this, but I want the defer that cleans the progress bar to run
103103 ltask .cancel ();
104104
105+ var stdout_buf : [4096 ]u8 = undefined ;
106+ var stdout_writer = std .fs .File .stdout ().writer (& stdout_buf );
107+ var stdout = & stdout_writer .interface ;
108+ defer stdout .flush () catch {};
109+
105110 for (tasks .items , 0.. ) | task , idx | {
106111 if (task .complete (.wait )) | body | {
107112 defer allocator .free (body );
108113 if (idx == 3 ) {
109- try std . io . getStdOut (). writer () .print ("\n Aaand the current master zig version is... " , .{});
114+ try stdout .print ("\n Aaand the current master zig version is... " , .{});
110115 }
111- try std . io . getStdOut () .writeAll (body );
112- try std . io . getStdOut () .writeAll ("\n " );
116+ try stdout .writeAll (body );
117+ try stdout .writeAll ("\n " );
113118 } else | err | {
114- try std . io . getStdOut (). writer () .print ("request {} failed with: {}\n " , .{ idx , err });
119+ try stdout .print ("request {} failed with: {}\n " , .{ idx , err });
115120 }
116121 }
117122
118- try std . io . getStdOut (). writer () .print ("\n That's all folks\n " , .{});
123+ try stdout .print ("\n That's all folks\n " , .{});
119124}
0 commit comments