Skip to main content

n3_lib/
formats.rs

1//! Format-specific byte parsers and writers; no filename or extension detection.
2
3use crate::binary::Result;
4use crate::records::{self, Limits, Record};
5
6macro_rules! record_format {
7    ($parse:ident, $parse_limits:ident, $write:ident, $write_limits:ident, $format:literal) => {
8        #[doc = concat!("Parse `", $format, "` bytes with default resource and layout budgets.")]
9        pub fn $parse(bytes: &[u8]) -> Result<Record> { records::parse_record($format, bytes) }
10        #[doc = concat!("Parse `", $format, "` bytes with explicit safety budgets and layout parameters.")]
11        pub fn $parse_limits(bytes: &[u8], limits: Limits) -> Result<Record> { records::parse_record_with_limits($format, bytes, limits) }
12        #[doc = concat!("Write a new or edited `", $format, "` record without normalizing stored values.")]
13        pub fn $write(record: &Record) -> Result<Vec<u8>> { records::write_record($format, record) }
14        #[doc = concat!("Write `", $format, "` storage with explicit safety budgets and layout parameters.")]
15        pub fn $write_limits(record: &Record, limits: Limits) -> Result<Vec<u8>> { records::write_record_with_limits($format, record, limits) }
16    };
17}
18
19record_format!(
20    parse_n3pmesh,
21    parse_n3pmesh_with_limits,
22    write_n3pmesh,
23    write_n3pmesh_with_limits,
24    "n3pmesh"
25);
26record_format!(
27    parse_n3cskin,
28    parse_n3cskin_with_limits,
29    write_n3cskin,
30    write_n3cskin_with_limits,
31    "n3cskin"
32);
33record_format!(
34    parse_n3cskins,
35    parse_n3cskins_with_limits,
36    write_n3cskins,
37    write_n3cskins_with_limits,
38    "n3cskins"
39);
40record_format!(
41    parse_n3cpart,
42    parse_n3cpart_with_limits,
43    write_n3cpart,
44    write_n3cpart_with_limits,
45    "n3cpart"
46);
47record_format!(
48    parse_n3cplug,
49    parse_n3cplug_with_limits,
50    write_n3cplug,
51    write_n3cplug_with_limits,
52    "n3cplug"
53);
54record_format!(
55    parse_n3shape,
56    parse_n3shape_with_limits,
57    write_n3shape,
58    write_n3shape_with_limits,
59    "n3shape"
60);
61record_format!(
62    parse_n3chr,
63    parse_n3chr_with_limits,
64    write_n3chr,
65    write_n3chr_with_limits,
66    "n3chr"
67);
68record_format!(
69    parse_n3joint,
70    parse_n3joint_with_limits,
71    write_n3joint,
72    write_n3joint_with_limits,
73    "n3joint"
74);
75record_format!(
76    parse_n3anim,
77    parse_n3anim_with_limits,
78    write_n3anim,
79    write_n3anim_with_limits,
80    "n3anim"
81);
82record_format!(
83    parse_n3fxplug,
84    parse_n3fxplug_with_limits,
85    write_n3fxplug,
86    write_n3fxplug_with_limits,
87    "n3fxplug"
88);
89record_format!(
90    parse_n3sky,
91    parse_n3sky_with_limits,
92    write_n3sky,
93    write_n3sky_with_limits,
94    "n3sky"
95);
96record_format!(
97    parse_fxb,
98    parse_fxb_with_limits,
99    write_fxb,
100    write_fxb_with_limits,
101    "fxb"
102);
103record_format!(
104    parse_gtd,
105    parse_gtd_with_limits,
106    write_gtd,
107    write_gtd_with_limits,
108    "gtd"
109);
110record_format!(
111    parse_opd,
112    parse_opd_with_limits,
113    write_opd,
114    write_opd_with_limits,
115    "opd"
116);
117record_format!(
118    parse_uif,
119    parse_uif_with_limits,
120    write_uif,
121    write_uif_with_limits,
122    "uif"
123);
124
125pub use crate::images::{parse_bmp, parse_tga, write_bmp, write_tga};
126pub use crate::table::{parse_table as parse_tbl, write_table as write_tbl};
127pub use crate::textures::{
128    parse_gtt, parse_tct, parse_texture as parse_dxt, write_gtt, write_tct,
129    write_texture as write_dxt,
130};