sdl3bind/castholm/v0.1.2-SDL-3.1.10/api/storage.zig

115 lines
4.1 KiB
Zig

const std = @import("std");
pub const c = @import("c.zig").c;
pub const PathInfo = extern struct {
_type: PathType, // the path type
size: u64, // the file size in bytes
create_time: Time, // the time when the path was created
modify_time: Time, // the last time the path was modified
access_time: Time, // the last time the path was read
};
pub const PathType = enum(c_int) {
pathtypeNone, //path does not exist
pathtypeFile, //a normal file
pathtypeDirectory, //a directory
pathtypeOther,
};
pub const Time = i64;
pub const GlobFlags = packed struct(u32) {
globCaseinsensitive: bool = false,
pad0: u30 = 0,
rsvd: bool = false,
};
pub const EnumerateDirectoryCallback = c.SDL_EnumerateDirectoryCallback;
pub const PropertiesID = u32;
pub const StorageInterface = extern struct {
version: u32,
close: ?*const anyopaque,
ready: ?*const anyopaque,
enumerate: ?*const anyopaque,
info: ?*const anyopaque,
read_file: ?*const anyopaque,
write_file: ?*const anyopaque,
mkdir: ?*const anyopaque,
remove: ?*const anyopaque,
rename: ?*const anyopaque,
copy: ?*const anyopaque,
space_remaining: ?*const anyopaque,
};
pub const Storage = opaque {
pub inline fn closeStorage(storage: *Storage) bool {
return @bitCast(c.SDL_CloseStorage(storage));
}
pub inline fn storageReady(storage: *Storage) bool {
return @bitCast(c.SDL_StorageReady(storage));
}
pub inline fn getStorageFileSize(storage: *Storage, path: [*c]const u8, length: *u64) bool {
return @bitCast(c.SDL_GetStorageFileSize(storage, path, @ptrCast(length)));
}
pub inline fn readStorageFile(storage: *Storage, path: [*c]const u8, destination: ?*anyopaque, length: u64) bool {
return @bitCast(c.SDL_ReadStorageFile(storage, path, destination, length));
}
pub inline fn writeStorageFile(storage: *Storage, path: [*c]const u8, source: ?*const anyopaque, length: u64) bool {
return @bitCast(c.SDL_WriteStorageFile(storage, path, source, length));
}
pub inline fn createStorageDirectory(storage: *Storage, path: [*c]const u8) bool {
return @bitCast(c.SDL_CreateStorageDirectory(storage, path));
}
pub inline fn enumerateStorageDirectory(storage: *Storage, path: [*c]const u8, callback: EnumerateDirectoryCallback, userdata: ?*anyopaque) bool {
return @bitCast(c.SDL_EnumerateStorageDirectory(storage, path, callback, userdata));
}
pub inline fn removeStoragePath(storage: *Storage, path: [*c]const u8) bool {
return @bitCast(c.SDL_RemoveStoragePath(storage, path));
}
pub inline fn renameStoragePath(storage: *Storage, oldpath: [*c]const u8, newpath: [*c]const u8) bool {
return @bitCast(c.SDL_RenameStoragePath(storage, oldpath, newpath));
}
pub inline fn copyStorageFile(storage: *Storage, oldpath: [*c]const u8, newpath: [*c]const u8) bool {
return @bitCast(c.SDL_CopyStorageFile(storage, oldpath, newpath));
}
pub inline fn getStoragePathInfo(storage: *Storage, path: [*c]const u8, info: ?*PathInfo) bool {
return @bitCast(c.SDL_GetStoragePathInfo(storage, path, info));
}
pub inline fn getStorageSpaceRemaining(storage: *Storage) u64 {
return c.SDL_GetStorageSpaceRemaining(storage);
}
pub inline fn globStorageDirectory(storage: *Storage, path: [*c]const u8, pattern: [*c]const u8, flags: GlobFlags, count: *c_int) [*c][*c]u8 {
return c.SDL_GlobStorageDirectory(storage, path, pattern, @bitCast(flags), @ptrCast(count));
}
};
pub inline fn openTitleStorage(override: [*c]const u8, props: PropertiesID) ?*Storage {
return c.SDL_OpenTitleStorage(override, props);
}
pub inline fn openUserStorage(org: [*c]const u8, app: [*c]const u8, props: PropertiesID) ?*Storage {
return c.SDL_OpenUserStorage(org, app, props);
}
pub inline fn openFileStorage(path: [*c]const u8) ?*Storage {
return c.SDL_OpenFileStorage(path);
}
pub inline fn openStorage(iface: *const StorageInterface, userdata: ?*anyopaque) ?*Storage {
return c.SDL_OpenStorage(@ptrCast(iface), userdata);
}