artificer/api/schemas/cooldown.zig
2025-01-03 17:35:44 +02:00

75 lines
2.6 KiB
Zig

// zig fmt: off
const std = @import("std");
const Store = @import("../store.zig");
const json_utils = @import("../json_utils.zig");
const parseDateTime = @import("../date_time/parse.zig").parseDateTime;
const EnumStringUtils = @import("../enum_string_utils.zig").EnumStringUtils;
const Cooldown = @This();
pub const Reason = enum {
movement,
fight,
crafting,
gathering,
buy_ge,
sell_ge,
cancel_ge,
delete_item,
deposit,
withdraw,
deposit_gold,
withdraw_gold,
equip,
unequip,
task,
christmas_exchange,
recycling,
rest,
use,
buy_bank_expansion,
const Utils = EnumStringUtils(Reason, .{
.{ "movement" , Reason.movement },
.{ "fight" , Reason.fight },
.{ "crafting" , Reason.crafting },
.{ "gathering" , Reason.gathering },
.{ "buy_ge" , Reason.buy_ge },
.{ "sell_ge" , Reason.sell_ge },
.{ "cancel_ge" , Reason.cancel_ge },
.{ "delete_item" , Reason.delete_item },
.{ "deposit" , Reason.deposit },
.{ "withdraw" , Reason.withdraw },
.{ "deposit_gold" , Reason.deposit_gold },
.{ "withdraw_gold" , Reason.withdraw_gold },
.{ "equip" , Reason.equip },
.{ "unequip" , Reason.unequip },
.{ "task" , Reason.task },
.{ "christmas_exchange", Reason.christmas_exchange },
.{ "recycling" , Reason.recycling },
.{ "rest" , Reason.rest },
.{ "use" , Reason.use },
.{ "buy_bank_expansion", Reason.buy_bank_expansion },
});
pub const fromString = Utils.fromString;
pub const toString = Utils.toString;
};
started_at: f64,
expiration: f64,
reason: Reason,
pub fn parse(store: *Store, obj: std.json.ObjectMap) !Cooldown {
_ = store;
const started_at = try json_utils.getStringRequired(obj, "started_at");
const expiration = try json_utils.getStringRequired(obj, "expiration");
const reason = try json_utils.getStringRequired(obj, "reason");
return Cooldown{
.started_at = parseDateTime(started_at) orelse return error.InvalidStartedAt,
.expiration = parseDateTime(expiration) orelse return error.InvalidExpiration,
.reason = Reason.fromString(reason) orelse return error.InvalidReason
};
}