pub struct RawDefinition {
pub name: Option<String>,
pub fields: Vec<RawField>,
}Expand description
Raw table definition parsed from Assembly Kit schema files.
This is the raw equivalent to RPFM’s Definition struct. In Assembly Kit files,
this corresponds to a TWaD_*.xml file (versions 1-2) or .xsd file (version 0).
§Fields
name- Table name with.xmlextension (e.g.,"units_tables.xml")fields- All field definitions for this table
§Example Structure
A TWaD_units_tables.xml file contains field definitions like:
<root>
<field primary_key="1" name="key" field_type="text" required="1"/>
<field primary_key="0" name="category" field_type="text" required="0"
column_source_table="unit_categories_tables"
column_source_column="key"/>
</root>Fields§
§name: Option<String>Table name with .xml extension (e.g., "units_tables.xml") and without the ‘TWaD_’ prefix.
fields: Vec<RawField>All the field definitions within this table definition.
Implementations§
Source§impl RawDefinition
Implementation of RawDefinition.
impl RawDefinition
Implementation of RawDefinition.
Sourcepub fn read_all(
raw_definitions_folder: &Path,
version: i16,
tables_to_skip: &[&str],
) -> Result<Vec<Self>>
pub fn read_all( raw_definitions_folder: &Path, version: i16, tables_to_skip: &[&str], ) -> Result<Vec<Self>>
Reads all table definitions from an Assembly Kit directory.
This function scans the provided directory for Assembly Kit definition files
and parses them into RawDefinition structs. The parsing logic varies
significantly by version.
§Version-Specific Behavior
§Version 1 & 2 (Shogun 2, Rome 2+)
- Reads
TWaD_*.xmlfiles directly - Each file is a complete, self-contained definition
§Version 0 (Empire, Napoleon)
- Reads
.xsdXML Schema files - Uses two-pass processing:
- Parse all XSD files and extract field info + primary keys
- Analyze index definitions to derive foreign key relationships
- This is necessary because Version 0 uses database-style indexes rather than explicit foreign key declarations
§Arguments
raw_definitions_folder- Directory containing Assembly Kit definition filesversion- Assembly Kit version (0 = Empire/Napoleon, 1 = Shogun 2, 2 = Rome 2+)tables_to_skip- Table names (without extension) to exclude from parsing
§Returns
Returns a vector of successfully parsed table definitions. Tables in the blacklist or skip list are excluded.
§Errors
Returns an error if:
- The version is unsupported (not 0, 1, or 2)
- The directory cannot be read
- Any definition file has malformed XML
Sourcepub fn read(raw_definition_path: &Path, version: i16) -> Result<Self>
pub fn read(raw_definition_path: &Path, version: i16) -> Result<Self>
Parses a single Assembly Kit definition file.
Reads and parses one table definition file from the Assembly Kit.
§Arguments
raw_definition_path- Path to the definition file (e.g.,TWaD_units_tables.xml)version- Assembly Kit version (1 = Shogun 2, 2 = Rome 2+)
§Returns
Returns the parsed RawDefinition with the table name set to the filename
without the TWaD_ prefix (e.g., "units_tables.xml").
§Errors
Returns an error if:
- The version is not 1 or 2 (use
RawDefinitionV0::read()for version 0) - The file cannot be opened (returns
RLibError::AssemblyKitNotFound) - The XML is malformed
§Note
For Version 0 (Empire/Napoleon), use RawDefinitionV0::read() instead as the
file format is completely different (.xsd vs .xml).
Sourcepub fn get_non_localisable_fields(
&self,
raw_localisable_fields: &[RawLocalisableField],
test_row: &RawTableRow,
) -> Vec<Field>
pub fn get_non_localisable_fields( &self, raw_localisable_fields: &[RawLocalisableField], test_row: &RawTableRow, ) -> Vec<Field>
Filters out localisable fields from the definition.
Returns only the fields that are not marked as localisable (translatable) and are present in the test row data. This is used when processing Assembly Kit table data to separate regular fields from translation fields.
§Arguments
raw_localisable_fields- List of all localisable fields fromTExc_LocalisableFields.xmltest_row- Sample row data used to verify field presence
§Returns
Returns a vector of Field instances for non-localisable fields that exist
in the test data.
§Note
Fields are excluded if:
- They’re listed in
raw_localisable_fieldsfor this table - They don’t appear in the test row
- They have a “state” attribute (marked as modified/deprecated)
Trait Implementations§
Source§impl Clone for RawDefinition
impl Clone for RawDefinition
Source§fn clone(&self) -> RawDefinition
fn clone(&self) -> RawDefinition
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RawDefinition
impl Debug for RawDefinition
Source§impl Default for RawDefinition
impl Default for RawDefinition
Source§fn default() -> RawDefinition
fn default() -> RawDefinition
Source§impl<'de> Deserialize<'de> for RawDefinition
impl<'de> Deserialize<'de> for RawDefinition
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl From<&RawDefinition> for Definition
impl From<&RawDefinition> for Definition
Source§fn from(raw_definition: &RawDefinition) -> Self
fn from(raw_definition: &RawDefinition) -> Self
Source§impl From<&RawDefinitionV0> for RawDefinition
Old games don’t use references, but rather indexes like a database. This means we’re unable to find
the referenced column without having the reference definition. So ref data needs to be calculated after this.
impl From<&RawDefinitionV0> for RawDefinition
Old games don’t use references, but rather indexes like a database. This means we’re unable to find the referenced column without having the reference definition. So ref data needs to be calculated after this.
Source§fn from(value: &RawDefinitionV0) -> Self
fn from(value: &RawDefinitionV0) -> Self
Auto Trait Implementations§
impl Freeze for RawDefinition
impl RefUnwindSafe for RawDefinition
impl Send for RawDefinition
impl Sync for RawDefinition
impl Unpin for RawDefinition
impl UnsafeUnpin for RawDefinition
impl UnwindSafe for RawDefinition
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.