// zig fmt: off const std = @import("std"); const Store = @import("../store.zig"); const json_utils = @import("../json_utils.zig"); const EnumStringUtils = @import("../enum_string_utils.zig").EnumStringUtils; const Task = @This(); pub const Type = enum { monsters, resources, crafts, const Utils = EnumStringUtils(Type, .{ .{ "monsters" , Type.monsters }, .{ "resources", Type.resources }, .{ "crafts" , Type.crafts }, }); pub const fromString = Utils.fromString; pub const toString = Utils.toString; }; pub const Code = std.BoundedArray(u8, 32); code: Code, type: Type, total: u64, pub fn parse(store: *Store, obj: std.json.ObjectMap) !Task { _ = store; const code = try json_utils.getStringRequired(obj, "code"); const task_type = try json_utils.getStringRequired(obj, "type"); const total = try json_utils.getPositiveIntegerRequired(obj, "total"); return Task{ .code = try Code.fromSlice(code), .type = Type.fromString(task_type) orelse return error.InvalidTaskType, .total = total }; } pub fn parseAndAppend(store: *Store, obj: std.json.ObjectMap) !Store.Id { return store.tasks.appendOrUpdate(try parse(store, obj)); }