diff --git a/src/classify.zig b/src/classify.zig index 6208b8b..d8db2d2 100644 --- a/src/classify.zig +++ b/src/classify.zig @@ -1,20 +1,44 @@ const std = @import("std"); -pub const Category = enum { image, document, music, video, code, other }; +pub const Category = enum { + image, + document, + music, + video, + code, + other, +}; +const CategoryEntry = struct { + category: Category, + extensions: []const []const u8, +}; + +const CategoryMap = [_]CategoryEntry{ + .{ .category = .image, .extensions = &ImageTypes }, + .{ .category = .document, .extensions = &DocumentTypes }, + .{ .category = .music, .extensions = &MusicTypes }, + .{ .category = .video, .extensions = &VideoTypes }, +}; + +const ImageTypes = [_][]const u8{ ".png", ".jpg", ".jpeg", ".webp", ".gif" }; const DocumentTypes = [_][]const u8{ ".pdf", ".docx", ".odt" }; +const MusicTypes = [_][]const u8{ ".mp3", ".ogg", ".flac", ".opus", ".aac", ".wav", ".alac", ".m4a" }; +const VideoTypes = [_][]const u8{ ".mp4", ".mkv", ".mov", ".m4v" }; pub fn classify(name: []const u8) Category { const extension = std.fs.path.extension(name); - for (DocumentTypes) |ext| { - const eicDocument = std.ascii.eqlIgnoreCase(extension, ext); - if (eicDocument) { - std.debug.print("document found! \n", .{}); - return .document; + for (CategoryMap) |entry| { + for (entry.extensions) |ext| { + const eicDocument = std.ascii.eqlIgnoreCase(extension, ext); + if (eicDocument) { + std.debug.print("{s} found!\n", .{@tagName(entry.category)}); + return entry.category; + } } } - std.debug.print("no document found! \n", .{}); + std.debug.print("no compatible extensions found! \n", .{}); return .other; } diff --git a/src/main.zig b/src/main.zig index 71cc68e..6beda91 100644 --- a/src/main.zig +++ b/src/main.zig @@ -7,7 +7,7 @@ pub fn main() !void { const io = threaded.io(); const cwd = std.Io.Dir.cwd(); - const dir = try cwd.openDir(io, "examples", .{ .iterate = true }); + const dir = try cwd.openDir(io, ".", .{ .iterate = true }); defer dir.close(io); var it = dir.iterate();