{"id":17278137,"url":"https://github.com/mingun/serde-gff","last_synced_at":"2026-01-20T11:02:18.619Z","repository":{"id":52383469,"uuid":"162027886","full_name":"Mingun/serde-gff","owner":"Mingun","description":"Реализация формата Bioware GFF для Rust","archived":false,"fork":false,"pushed_at":"2023-06-26T01:10:20.000Z","size":91,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-29T15:46:01.193Z","etag":null,"topics":["aurora","bioware","file-format","gff","nwn","nwn-lib","nwn2","parser","serde","witcher"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mingun.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-16T18:12:03.000Z","updated_at":"2021-04-30T06:22:05.000Z","dependencies_parsed_at":"2024-10-15T09:11:00.282Z","dependency_job_id":"c06746d4-05fb-457e-95d5-c97da82c946c","html_url":"https://github.com/Mingun/serde-gff","commit_stats":{"total_commits":48,"total_committers":2,"mean_commits":24.0,"dds":0.02083333333333337,"last_synced_commit":"2bfacbb0b6b361da749082f99edaec474ccc6c7c"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mingun%2Fserde-gff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mingun%2Fserde-gff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mingun%2Fserde-gff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mingun%2Fserde-gff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mingun","download_url":"https://codeload.github.com/Mingun/serde-gff/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247459709,"owners_count":20942274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aurora","bioware","file-format","gff","nwn","nwn-lib","nwn2","parser","serde","witcher"],"created_at":"2024-10-15T09:10:53.876Z","updated_at":"2026-01-20T11:02:13.581Z","avatar_url":"https://github.com/Mingun.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"serde-gff\n=========\n[![Crates.io](https://img.shields.io/crates/v/serde_gff.svg)](https://crates.io/crates/serde_gff)\n[![Документация](https://docs.rs/serde-gff/badge.svg)](https://docs.rs/serde-gff)\n[![Лицензия MIT](https://img.shields.io/crates/l/serde_gff.svg)](https://github.com/Mingun/serde-gff/blob/master/LICENSE)\n\nGeneric File Format (GFF) -- формат файлов, используемый играми на движке Bioware Aurora:\nNewerwinter Nights, The Witcher и Newerwinter Nights 2.\n\nФормат имеет некоторые ограничения:\n- элементами верхнего уровня могут быть только структуры или перечисления Rust в unit или struct варианте\n- имена полей структур не должны быть длиннее 16 байт в UTF-8. При нарушении при сериализации будет ошибка\n- то же самое касается ключей карт. Кроме того, ключами могут быть только строки (`\u0026str` или `String`)\n\nУстановка\n---------\nВыполните в корне проекта\n```sh\ncargo add serde_gff\n```\nили добавьте следующую строку в `Cargo.toml`:\n```toml\n[dependencies]\nserde_gff = \"0.2\"\n```\n\nПример\n------\n```rust\nuse std::f32::consts::PI;\nuse std::f64::consts::E;\nuse std::io::Cursor;\nuse serde::{Serialize, Deserialize};\n\nuse serde_gff::de::Deserializer;\nuse serde_gff::ser::to_vec;\nuse serde_gff::value::Value;\n\n#[derive(Debug, Serialize, Deserialize)]\nstruct Item { u8: u8, i8: i8 }\n\n#[derive(Debug, Serialize, Deserialize)]\nstruct Struct {\n  f32: f32,\n  f64: f64,\n\n  #[serde(with = \"serde_bytes\")]\n  bytes: Vec\u003cu8\u003e,\n}\n\n#[derive(Debug, Serialize, Deserialize)]\n#[allow(non_snake_case)]\nstruct Test {\n  u16: u16,\n  i16: i16,\n  u32: u32,\n  i32: i32,\n  u64: u64,\n  i64: i64,\n\n  string: String,\n\n  Struct: Struct,\n  list: Vec\u003cItem\u003e,\n}\n\nfn main() {\n  let data = Test {\n    u16: 1, i16: 2,\n    u32: 3, i32: 4,\n    u64: 5, i64: 6,\n\n    string: \"String\".into(),\n\n    Struct: Struct { f32: PI, f64: E, bytes: b\"Vec\u003cu8\u003e\".to_vec() },\n    list: vec![\n      Item { u8: 7, i8:  -8 },\n      Item { u8: 9, i8: -10 },\n    ],\n  };\n\n  let mut vec = to_vec((*b\"GFF \").into(), \u0026data).expect(\"can't write data\");\n  // Важный нюанс - не забыть, что создание десериализатора читает заголовок и возвращает\n  // Result, а не сам десериализатор, поэтому требуется распаковка результата\n  let mut de = Deserializer::new(Cursor::new(vec)).expect(\"can't read GFF header\");\n  let val = Value::deserialize(\u0026mut de).expect(\"can't deserialize data\");\n\n  println!(\"{:#?}\", val);\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmingun%2Fserde-gff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmingun%2Fserde-gff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmingun%2Fserde-gff/lists"}