tiger_lib::everything

Struct Everything

Source
pub struct Everything {
Show 37 fields config: Block, pub parser: ParserMemory, warned_defines: RwLock<HashSet<String>>, pub(crate) fileset: Fileset, pub(crate) dds: DdsFiles, pub(crate) database: Db, pub(crate) localization: Localization, pub(crate) scripted_lists: ScriptedLists, pub(crate) defines: Defines, pub(crate) events: Events, pub(crate) decisions_imperator: Decisions, pub(crate) scripted_modifiers: ScriptedModifiers, pub(crate) on_actions: OnActions, pub(crate) interaction_cats: CharacterInteractionCategories, pub(crate) provinces_ck3: Ck3Provinces, pub(crate) provinces_vic3: Vic3Provinces, pub(crate) provinces_imperator: ImperatorProvinces, pub(crate) province_histories: ProvinceHistories, pub(crate) province_properties: ProvinceProperties, pub(crate) province_terrains: ProvinceTerrains, pub(crate) gameconcepts: GameConcepts, pub(crate) titles: Titles, pub(crate) characters: Characters, pub(crate) script_values: ScriptValues, pub(crate) triggers: Triggers, pub(crate) effects: Effects, pub(crate) traits: Traits, pub(crate) title_history: TitleHistories, pub(crate) doctrines: Doctrines, pub(crate) menatarmstypes: MenAtArmsTypes, pub(crate) gui: Gui, pub(crate) data_bindings: DataBindings, pub(crate) assets: Assets, pub(crate) music: Musics, pub(crate) coas: Coas, pub(crate) history: History, pub(crate) wars: Wars,
}
Expand description

A record of everything known about the game and mod being validated.

References to Everything are passed down through nearly all of the validation logic, so that individual functions can access all the defined game items.

The validator has two main phases: parsing and validation.

  • During parsing, the script files are read, parsed, and loaded into the various databases. Everything is mutable during this period.
  • During validation, Everything is immutable and cross-checking between item types can be done safely.

Fields§

§config: Block

Config from file

§parser: ParserMemory

The global parser state, carrying information between files. Currently only used by the pdxfile parser, to handle the reader_export directory, which is specially processed before all other files.

§warned_defines: RwLock<HashSet<String>>

A cache of define values (from common/defines) that are missing and that have already been warned about as missing. This is to avoid duplicate warnings.

§fileset: Fileset

Tracks all the files (vanilla and mods) that are relevant to the current validation.

§dds: DdsFiles

Tracks specifically the .dds files, and their formats and sizes.

§database: Db

A general database of item types. Most items go here. The ones that need special handling go in the separate databases listed below.

§localization: Localization§scripted_lists: ScriptedLists§defines: Defines§events: Events§decisions_imperator: Decisions§scripted_modifiers: ScriptedModifiers§on_actions: OnActions§interaction_cats: CharacterInteractionCategories§provinces_ck3: Ck3Provinces§provinces_vic3: Vic3Provinces§provinces_imperator: ImperatorProvinces§province_histories: ProvinceHistories§province_properties: ProvinceProperties§province_terrains: ProvinceTerrains§gameconcepts: GameConcepts§titles: Titles§characters: Characters§script_values: ScriptValues§triggers: Triggers§effects: Effects§traits: Traits§title_history: TitleHistories§doctrines: Doctrines§menatarmstypes: MenAtArmsTypes§gui: Gui§data_bindings: DataBindings§assets: Assets§music: Musics§coas: Coas§history: History§wars: Wars

Implementations§

Source§

impl Everything

Source

pub fn new( config_filepath: Option<&Path>, vanilla_dir: Option<&Path>, mod_root: &Path, replace_paths: Vec<PathBuf>, ) -> Result<Self>

Create a new Everything instance, ready for validating a mod.

vanilla_dir is the path to the base game files. If it’s None, then no vanilla files will be loaded. This will seriously affect validation, but it’s ok if you just want to load and examine the mod files.

mod_root is the path to the mod files. The config file will also be looked for there.

replace_paths is from the similarly named field in the .mod file.

Source

fn read_config(name: &str, path: &Path) -> Option<Block>

Source

pub fn load_config_filtering_rules(&self)

Source

fn load_output_styles(&self, default_color: bool) -> OutputStyle

Load the OutputStyle settings from the config. Note that the settings from the config can still be overridden by supplying the –no-color flag.

Source

pub fn load_output_settings(&self, default_colors: bool)

Source

fn load_json<F>(&mut self, itype: Item, add_json: F)
where F: Fn(&mut Db, Block) + Sync + Send,

Source

fn load_reader_export(&mut self)

Source

fn load_pdx_files(&mut self, loader: &ItemLoader)

Source

fn load_all_normal_pdx_files(&mut self)

Source

fn load_all_generic(&mut self)

Source

fn load_all_ck3(&mut self)

Source

fn load_all_vic3(&mut self)

Source

fn load_all_imperator(&mut self)

Source

pub fn load_all(&mut self)

Source

fn validate_all_generic<'a>(&'a self, s: &Scope<'a>)

Source

fn validate_all_ck3<'a>(&'a self, s: &Scope<'a>)

Source

fn validate_all_vic3<'a>(&'a self, s: &Scope<'a>)

Source

fn validate_all_imperator<'a>(&'a self, s: &Scope<'a>)

Source

pub fn validate_all(&self)

Source

pub fn check_rivers(&mut self)

Source

pub fn check_pod(&mut self)

Source

pub fn check_unused(&mut self)

Source

pub(crate) fn item_has_property( &self, itype: Item, key: &str, property: &str, ) -> bool

Source

pub(crate) fn item_lc_has_property( &self, itype: Item, key: &Lowercase<'_>, property: &str, ) -> bool

Source

fn item_exists_ck3(&self, itype: Item, key: &str) -> bool

Source

fn item_exists_vic3(&self, itype: Item, key: &str) -> bool

Source

fn item_exists_imperator(&self, itype: Item, key: &str) -> bool

Source

pub(crate) fn item_exists(&self, itype: Item, key: &str) -> bool

Source

fn item_exists_lc_ck3(&self, itype: Item, key: &Lowercase<'_>) -> bool

Return true iff the item key is found with a case insensitive match. This function is incomplete. It only contains the item types for which case insensitive matches are needed; this is currently the ones used in src/ck3/tables/modif.rs.

Source

fn item_exists_lc_vic3(&self, itype: Item, key: &Lowercase<'_>) -> bool

Return true iff the item key is found with a case insensitive match. This function is incomplete. It only contains the item types for which case insensitive matches are needed; this is currently the ones used in src/vic3/tables/modif.rs.

Source

fn item_exists_lc_imperator(&self, itype: Item, key: &Lowercase<'_>) -> bool

Return true iff the item key is found with a case insensitive match. This function is incomplete. It only contains the item types for which case insensitive matches are needed; this is currently the ones used in src/imperator/tables/modif.rs.

Source

pub(crate) fn item_exists_lc(&self, itype: Item, key: &Lowercase<'_>) -> bool

Return true iff the item key is found with a case insensitive match. This function is incomplete. It only contains the item types for which case insensitive matches are needed; this is currently the ones used in modif lookups.

Source

pub(crate) fn mark_used(&self, itype: Item, key: &str)

Source

pub(crate) fn verify_exists(&self, itype: Item, token: &Token)

Source

pub(crate) fn verify_exists_max_sev( &self, itype: Item, token: &Token, max_sev: Severity, )

Source

pub(crate) fn verify_exists_implied_max_sev( &self, itype: Item, key: &str, token: &Token, max_sev: Severity, )

Source

pub(crate) fn verify_exists_implied( &self, itype: Item, key: &str, token: &Token, )

Source

pub(crate) fn verify_icon(&self, define: &str, token: &Token, suffix: &str)

Source

pub(crate) fn mark_used_icon(&self, define: &str, token: &Token, suffix: &str)

Source

pub(crate) fn validate_use(&self, itype: Item, key: &Token, block: &Block)

Source

pub(crate) fn validate_call( &self, itype: Item, key: &Token, block: &Block, sc: &mut ScopeContext, )

Source

pub(crate) fn validate_localization_sc(&self, key: &str, sc: &mut ScopeContext)

Validate the use of a localization within a specific ScopeContext. This allows validation of the named scopes used within the localization’s datafunctions.

Source

pub(crate) fn get_item<T: DbKind>( &self, itype: Item, key: &str, ) -> Option<(&Token, &Block, &T)>

Source

pub(crate) fn get_key_block( &self, itype: Item, key: &str, ) -> Option<(&Token, &Block)>

Source

pub(crate) fn get_trigger(&self, key: &Token) -> Option<&Trigger>

Source

pub(crate) fn get_effect(&self, key: &Token) -> Option<&Effect>

Source

pub(crate) fn get_defined_string(&self, key: &str) -> Option<&Token>

Source

pub(crate) fn get_defined_array(&self, key: &str) -> Option<&Block>

Source

pub(crate) fn get_defined_string_warn( &self, token: &Token, key: &str, ) -> Option<&Token>

Source

pub(crate) fn get_defined_array_warn( &self, token: &Token, key: &str, ) -> Option<&Block>

Source

pub fn iter_keys_ck3<'a>( &'a self, itype: Item, ) -> Box<dyn Iterator<Item = &'a Token> + 'a>

Source

fn iter_keys_vic3<'a>( &'a self, itype: Item, ) -> Box<dyn Iterator<Item = &'a Token> + 'a>

Source

fn iter_keys_imperator<'a>( &'a self, itype: Item, ) -> Box<dyn Iterator<Item = &'a Token> + 'a>

Source

pub fn iter_keys<'a>( &'a self, itype: Item, ) -> Box<dyn Iterator<Item = &'a Token> + 'a>

Source

fn valid_sound(&self, name: &str) -> bool

Trait Implementations§

Source§

impl Debug for Everything

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for Everything

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AsAny for T
where T: Any,

§

fn as_any(&self) -> &(dyn Any + 'static)

§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

§

fn type_name(&self) -> &'static str

Gets the type name of self
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for T
where T: AsAny + ?Sized,

§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.