75 lines
2.6 KiB
Zig
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
|
|
};
|
|
}
|