artificer/lib/api/schemas/equip_result.zig

38 lines
1.3 KiB
Zig

// zig fmt: off
const std = @import("std");
const json_utils = @import("../json_utils.zig");
const Store = @import("../store.zig");
const Character = @import("./character.zig");
const Cooldown = @import("./cooldown.zig");
const Item = @import("./item.zig");
const EquipResult = @This();
pub const Slot = Character.Equipment.SlotId;
cooldown: Cooldown,
slot: Slot,
item: Item,
character: Character,
fn parse(store: *Store, obj: std.json.ObjectMap) !EquipResult {
const cooldown = json_utils.getObject(obj, "cooldown") orelse return error.MissingProperty;
const item = json_utils.getObject(obj, "item") orelse return error.MissingProperty;
const character = json_utils.getObject(obj, "character") orelse return error.MissingProperty;
const slot = try json_utils.getStringRequired(obj, "slot");
return EquipResult{
.character = try Character.parse(store, character),
.cooldown = try Cooldown.parse(store, cooldown),
.item = try Item.parse(store, item),
.slot = Slot.fromString(slot) orelse return error.InvalidSlot
};
}
pub fn parseAndUpdate(store: *Store, obj: std.json.ObjectMap) !EquipResult {
const result = try parse(store, obj);
_ = try store.characters.appendOrUpdate(result.character);
_ = try store.items.appendOrUpdate(result.item);
return result;
}