@@ -25,18 +25,34 @@ pub fn init(reader: *Reader, limit: Limit, buffer: []u8) Limited {
25
25
};
26
26
}
27
27
28
- fn stream (context : ? * anyopaque , w : * Writer , limit : Limit ) Reader.StreamError ! usize {
29
- const l : * Limited = @alignCast ( @ptrCast ( context ) );
28
+ fn stream (r : * Reader , w : * Writer , limit : Limit ) Reader.StreamError ! usize {
29
+ const l : * Limited = @fieldParentPtr ( "interface" , r );
30
30
const combined_limit = limit .min (l .remaining );
31
- const n = try l .unlimited_reader . read (w , combined_limit );
31
+ const n = try l .unlimited . stream (w , combined_limit );
32
32
l .remaining = l .remaining .subtract (n ).? ;
33
33
return n ;
34
34
}
35
35
36
- fn discard (context : ? * anyopaque , limit : Limit ) Reader.Error ! usize {
37
- const l : * Limited = @alignCast (@ptrCast (context ));
36
+ test stream {
37
+ var orig_buf : [10 ]u8 = undefined ;
38
+ @memcpy (& orig_buf , "test bytes" );
39
+ var fixed : std.Io.Reader = .fixed (& orig_buf );
40
+
41
+ var limit_buf : [1 ]u8 = undefined ;
42
+ var limited : std.Io.Reader.Limited = .init (& fixed , @enumFromInt (4 ), & limit_buf );
43
+
44
+ var result_buf : [10 ]u8 = undefined ;
45
+ var fixed_writer : std.Io.Writer = .fixed (& result_buf );
46
+ const streamed = try limited .interface .stream (& fixed_writer , @enumFromInt (7 ));
47
+
48
+ try std .testing .expect (streamed == 4 );
49
+ try std .testing .expectEqualStrings ("test" , result_buf [0.. streamed ]);
50
+ }
51
+
52
+ fn discard (r : * Reader , limit : Limit ) Reader.Error ! usize {
53
+ const l : * Limited = @fieldParentPtr ("interface" , r );
38
54
const combined_limit = limit .min (l .remaining );
39
- const n = try l .unlimited_reader .discard (combined_limit );
55
+ const n = try l .unlimited .discard (combined_limit );
40
56
l .remaining = l .remaining .subtract (n ).? ;
41
57
return n ;
42
58
}
0 commit comments