[−][src]Crate serde_gff
Реализация парсера файлов формата Bioware GFF, используемых в играх на движке Aurora (Neverwinter Nights, The Witcher) и в игре Neverwinter Nights 2.
Формат имеет некоторые ограничения:
- элементами верхнего уровня могут быть только структуры или перечисления Rust в unit или struct варианте
- имена полей структур не должны быть длиннее 16 байт в UTF-8. При нарушении при сериализации будет ошибка
- то же самое касается ключей карт. Кроме того, ключами могут быть только строки (
&str
илиString
)
Пример
use std::f32::consts::PI; use std::f64::consts::E; use std::io::Cursor; use serde::{Serialize, Deserialize}; use serde_gff::de::Deserializer; use serde_gff::ser::to_vec; use serde_gff::value::Value; #[derive(Debug, Serialize, Deserialize)] struct Item { u8: u8, i8: i8 } #[derive(Debug, Serialize, Deserialize)] struct Struct { f32: f32, f64: f64, #[serde(with = "serde_bytes")] bytes: Vec<u8>, } #[derive(Debug, Serialize, Deserialize)] #[allow(non_snake_case)] struct Test { u16: u16, i16: i16, u32: u32, i32: i32, u64: u64, i64: i64, string: String, Struct: Struct, list: Vec<Item>, } fn main() { let data = Test { u16: 1, i16: 2, u32: 3, i32: 4, u64: 5, i64: 6, string: "String".into(), Struct: Struct { f32: PI, f64: E, bytes: b"Vec<u8>".to_vec() }, list: vec![ Item { u8: 7, i8: -8 }, Item { u8: 9, i8: -10 }, ], }; let mut vec = to_vec((*b"GFF ").into(), &data).expect("can't write data"); // Важный нюанс - не забыть, что создание десериализатора читает заголовок и возвращает // Result, а не сам десериализатор, поэтому требуется распаковка результата let mut de = Deserializer::new(Cursor::new(vec)).expect("can't read GFF header"); let val = Value::deserialize(&mut de).expect("can't deserialize data"); println!("{:#?}", val); }
Modules
de | Десериализатор для формата Bioware GFF (Generic File Format) |
error | Реализация структуры, описывающей ошибки кодирования или декодирования GFF |
header | Содержит описания структур заголовка GFF файла |
index | Содержит описание структур-индексов различных данных в GFF файле |
parser | Реализация потокового парсера GFF файла. См. описание структуры |
raw | Вспомогательный модуль, содержащий описание структур, непосредственно хранимых в GFF файле на диске. Обычно нет необходимости использовать данный модуль -- он может понадобиться только при отладке |
ser | Сериализатор для формата Bioware GFF (Generic File Format) |
value | Содержит описания значений, которые может хранить GFF файл |
Structs
Label | Описание названия поля структуры GFF файла. GFF файл состоит из дерева структур, а каждая структура -- из полей с именем и значением. Имена полей представлены данной структурой |
LocString | Локализуемая строка, содержащая в себе все данные, которые могут храниться в GFF файле.
Может содержать логически некорректные данные, поэтому, если не требуется анализировать
непосредственное содержимое GFF файла без потерь, лучше сразу преобразовать ее в
|
ResRef | Представляет ссылку на игровой ресурс, которым может быть шаблон объекта |
StrRef | Индекс в файле |
StringKey | Ключ, используемый для индексации локализуемых строк во внутреннем представлении строк (когда строки внедрены в GFF файл, а не используются ссылки на строки в TLK файле). |
SubString | Часть локализованной строки, хранящая информацию для одного языка и пола |
Enums
Gender | Виды пола персонажа, на которых могут храниться локализованные строки в объекте |
GffString | Локализуемая строка, представленная в виде, в котором некорректные значения непредставимы. |
Language | Виды языков, на которых могут храниться локализованные строки в объекте |