tiger_lib/imperator/data/
setup_characters.rs1use crate::block::Block;
2use crate::context::ScopeContext;
3use crate::db::{Db, DbKind};
4use crate::everything::Everything;
5use crate::game::GameFlags;
6use crate::imperator::effect_validation::validate_create_character;
7use crate::item::{Item, ItemLoader, LoadAsFile, Recursive};
8use crate::pdxfile::PdxEncoding;
9use crate::scopes::Scopes;
10use crate::special_tokens::SpecialTokens;
11use crate::token::Token;
12use crate::tooltipped::Tooltipped;
13use crate::validator::Validator;
14
15#[derive(Clone, Debug)]
16pub struct SetupCharacters {}
17
18inventory::submit! {
19 ItemLoader::Normal(GameFlags::Imperator, Item::SetupCharacters, SetupCharacters::add)
20}
21
22impl SetupCharacters {
23 pub fn add(db: &mut Db, key: Token, block: Block) {
24 db.add(Item::SetupCharacters, key, block, Box::new(Self {}));
25 }
26}
27
28impl DbKind for SetupCharacters {
29 fn validate(&self, key: &Token, block: &Block, data: &Everything) {
30 let mut vd = Validator::new(block, data);
31 let mut sc = ScopeContext::new(Scopes::Character, key);
32 vd.field_item("country", Item::Localization);
33 vd.unknown_block_fields(|key, block| {
34 let vd = Validator::new(block, data);
35 validate_create_character(
36 key,
37 block,
38 data,
39 &mut sc,
40 vd,
41 Tooltipped::No,
42 &mut SpecialTokens::none(),
43 );
44 });
45 }
46}
47
48#[derive(Clone, Debug)]
49pub struct PostSetupCharacters {}
50
51inventory::submit! {
52 ItemLoader::Full(GameFlags::all(), Item::PostSetupCharacters, PdxEncoding::Utf8OptionalBom, ".txt", LoadAsFile::Yes, Recursive::No, PostSetupCharacters::add)
53}
54
55impl PostSetupCharacters {
56 pub fn add(db: &mut Db, key: Token, block: Block) {
57 db.add(Item::PostSetupCharacters, key, block, Box::new(Self {}));
58 }
59}
60
61impl DbKind for PostSetupCharacters {
62 fn validate(&self, _key: &Token, block: &Block, data: &Everything) {
63 let mut vd = Validator::new(block, data);
64 vd.field_validated_block("country", |block, data| {
65 let mut vd = Validator::new(block, data);
66 vd.field_validated_block("countries", |block, data| {
67 let mut vd = Validator::new(block, data);
68 vd.unknown_block_fields(|key, block| {
69 data.verify_exists(Item::Localization, key);
70 let mut vd = Validator::new(block, data);
71 vd.multi_field_validated_block("ruler_term", |block, data| {
72 let mut vd = Validator::new(block, data);
73 vd.field_integer("character");
74 vd.field_date("start_date");
75 vd.field_item("government", Item::GovernmentType);
76 });
77 });
78 });
79 });
80 }
81}