Contracts on generic modules would evaluate too late, sometimes not catching the error until it already occurred elsewhere. Add file::save.

This commit is contained in:
Christoffer Lerno
2024-11-27 00:02:43 +01:00
parent 0e213ae777
commit f13472a8c3
4 changed files with 33 additions and 14 deletions

View File

@@ -1,3 +1,6 @@
<*
@require values::@is_int(SIZE) &&& SIZE > 0 "The size must be positive integer"
*>
module std::collections::ringbuffer(<Type, SIZE>);
struct RingBuffer

View File

@@ -182,6 +182,17 @@ fn char[]! load_temp(String filename)
return load_new(filename, allocator::temp());
}
fn void! save(String filename, char[] data)
{
File file = open(filename, "wb")!;
defer (void)file.close();
while (data.len)
{
usz written = file.write(data)!;
data = data[written..];
}
}
<*
@require self.file `File must be initialized`
*>