28 lines
1.0 KiB
Zig
28 lines
1.0 KiB
Zig
const std = @import("std");
|
|
const Store = @import("../store.zig");
|
|
const json_utils = @import("../json_utils.zig");
|
|
const json = std.json;
|
|
const Allocator = std.mem.Allocator;
|
|
|
|
const Cooldown = @import("./cooldown.zig");
|
|
const Character = @import("./character.zig");
|
|
const ItemQuantity = @import("./item_quantity.zig");
|
|
|
|
const TaskRewardData = @This();
|
|
|
|
cooldown: Cooldown,
|
|
character: Character,
|
|
reward: ItemQuantity,
|
|
|
|
pub fn parse(store: *Store, obj: json.ObjectMap, allocator: Allocator) !TaskRewardData {
|
|
const cooldown = json_utils.getObject(obj, "cooldown") orelse return error.MissingProperty;
|
|
const character = json_utils.getObject(obj, "character") orelse return error.MissingProperty;
|
|
const task = json_utils.getObject(obj, "task") orelse return error.MissingProperty;
|
|
|
|
return TaskRewardData{
|
|
.cooldown = try Cooldown.parse(cooldown),
|
|
.character = try Character.parse(store, character, allocator),
|
|
.reward = (try ItemQuantity.parse(store, task)) orelse return error.MissinReward
|
|
};
|
|
}
|