feat(buffers): define explicit errors for Buffer store functions
This commit is contained in:
parent
ba5f15dab8
commit
e404c830c9
1 changed files with 43 additions and 4 deletions
|
@ -1220,7 +1220,7 @@ pub fn store_to_string(self: *const Self, allocator: Allocator, eol_mode: EolMod
|
||||||
return s.toOwnedSlice();
|
return s.toOwnedSlice();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn store_to_file_const(self: *const Self, file: anytype) !void {
|
fn store_to_file_const(self: *const Self, file: anytype) StoreToFileError!void {
|
||||||
const buffer_size = 4096 * 16; // 64KB
|
const buffer_size = 4096 * 16; // 64KB
|
||||||
const BufferedWriter = std.io.BufferedWriter(buffer_size, std.fs.File.Writer);
|
const BufferedWriter = std.io.BufferedWriter(buffer_size, std.fs.File.Writer);
|
||||||
const Writer = std.io.Writer(*BufferedWriter, BufferedWriter.Error, BufferedWriter.write);
|
const Writer = std.io.Writer(*BufferedWriter, BufferedWriter.Error, BufferedWriter.write);
|
||||||
|
@ -1232,7 +1232,46 @@ fn store_to_file_const(self: *const Self, file: anytype) !void {
|
||||||
try buffered_writer.flush();
|
try buffered_writer.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn store_to_existing_file_const(self: *const Self, file_path: []const u8) !void {
|
pub const StoreToFileError = error{
|
||||||
|
AccessDenied,
|
||||||
|
AntivirusInterference,
|
||||||
|
BadPathName,
|
||||||
|
BrokenPipe,
|
||||||
|
ConnectionResetByPeer,
|
||||||
|
DeviceBusy,
|
||||||
|
DiskQuota,
|
||||||
|
FileBusy,
|
||||||
|
FileLocksNotSupported,
|
||||||
|
FileNotFound,
|
||||||
|
FileTooBig,
|
||||||
|
InputOutput,
|
||||||
|
InvalidArgument,
|
||||||
|
InvalidUtf8,
|
||||||
|
InvalidWtf8,
|
||||||
|
IsDir,
|
||||||
|
LinkQuotaExceeded,
|
||||||
|
LockViolation,
|
||||||
|
NameTooLong,
|
||||||
|
NetworkNotFound,
|
||||||
|
NoDevice,
|
||||||
|
NoSpaceLeft,
|
||||||
|
NotDir,
|
||||||
|
NotOpenForWriting,
|
||||||
|
OperationAborted,
|
||||||
|
PathAlreadyExists,
|
||||||
|
PipeBusy,
|
||||||
|
ProcessFdQuotaExceeded,
|
||||||
|
ReadOnlyFileSystem,
|
||||||
|
RenameAcrossMountPoints,
|
||||||
|
SharingViolation,
|
||||||
|
SymLinkLoop,
|
||||||
|
SystemFdQuotaExceeded,
|
||||||
|
SystemResources,
|
||||||
|
Unexpected,
|
||||||
|
WouldBlock,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn store_to_existing_file_const(self: *const Self, file_path: []const u8) StoreToFileError!void {
|
||||||
const stat = try cwd().statFile(file_path);
|
const stat = try cwd().statFile(file_path);
|
||||||
var atomic = try cwd().atomicFile(file_path, .{ .mode = stat.mode });
|
var atomic = try cwd().atomicFile(file_path, .{ .mode = stat.mode });
|
||||||
defer atomic.deinit();
|
defer atomic.deinit();
|
||||||
|
@ -1240,13 +1279,13 @@ pub fn store_to_existing_file_const(self: *const Self, file_path: []const u8) !v
|
||||||
try atomic.finish();
|
try atomic.finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn store_to_new_file_const(self: *const Self, file_path: []const u8) !void {
|
pub fn store_to_new_file_const(self: *const Self, file_path: []const u8) StoreToFileError!void {
|
||||||
const file = try cwd().createFile(file_path, .{ .read = true, .truncate = true });
|
const file = try cwd().createFile(file_path, .{ .read = true, .truncate = true });
|
||||||
defer file.close();
|
defer file.close();
|
||||||
try self.store_to_file_const(file);
|
try self.store_to_file_const(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn store_to_file_and_clean(self: *Self, file_path: []const u8) !void {
|
pub fn store_to_file_and_clean(self: *Self, file_path: []const u8) StoreToFileError!void {
|
||||||
self.store_to_existing_file_const(file_path) catch |e| switch (e) {
|
self.store_to_existing_file_const(file_path) catch |e| switch (e) {
|
||||||
error.FileNotFound => try self.store_to_new_file_const(file_path),
|
error.FileNotFound => try self.store_to_new_file_const(file_path),
|
||||||
else => return e,
|
else => return e,
|
||||||
|
|
Loading…
Add table
Reference in a new issue