artificer/lib/api/schemas/ge_order.zig

44 lines
1.5 KiB
Zig

// zig fmt: off
const std = @import("std");
const Character = @import("./character.zig");
const json_utils = @import("../json_utils.zig");
const parseDateTime = @import("../../date_time/parse.zig").parseDateTime;
const Store = @import("../store.zig");
const Item = @import("./item.zig");
const GEOrder = @This();
pub const max_id_size = 32;
pub const Id = std.BoundedArray(u8, max_id_size);
pub const Account = Character.Account;
pub const Code = Item.Code;
id: Id,
seller: Account,
item_id: Store.Id,
quantity: u64,
price: u64,
created_at: f64,
pub fn parse(store: *Store, obj: std.json.ObjectMap) !GEOrder {
const id = try json_utils.getStringRequired(obj, "id");
const seller = try json_utils.getStringRequired(obj, "seller");
const code = try json_utils.getStringRequired(obj, "code");
const quantity = try json_utils.getPositiveIntegerRequired(obj, "quantity");
const price = try json_utils.getPositiveIntegerRequired(obj, "price");
const created_at = try json_utils.getStringRequired(obj, "created_at");
return GEOrder{
.id = try Id.fromSlice(id),
.seller = try Account.fromSlice(seller),
.item_id = try store.items.getOrReserveId(code),
.quantity = quantity,
.price = price,
.created_at = parseDateTime(created_at) orelse return error.InvalidDataTime,
};
}
pub fn parseAndAppend(store: *Store, obj: std.json.ObjectMap) !Store.Id {
return try store.ge_orders.appendOrUpdate(try parse(store, obj));
}