@@ -5,7 +5,7 @@ use std::{fmt::Debug, io::SeekFrom};
5
5
/**
6
6
* Source: https://github.com/jam1garner/binrw/discussions/229
7
7
*/
8
- #[ derive( Default ) ]
8
+ #[ derive( Default , PartialEq , Eq ) ]
9
9
pub struct PosMarker < T > {
10
10
pub pos : OnceCell < u64 > ,
11
11
pub value : T ,
96
96
/// * endian: The endian to write with ([binrw::Endian])
97
97
pub fn write_back < V , W > ( & self , value : V , writer : & mut W , endian : Endian ) -> BinResult < ( ) >
98
98
where
99
- V : TryInto < T > ,
99
+ V : TryInto < T > + std :: fmt :: Debug ,
100
100
W : binrw:: io:: Write + binrw:: io:: Seek ,
101
101
{
102
102
let return_to = writer. stream_position ( ) ?;
@@ -212,6 +212,34 @@ where
212
212
)
213
213
}
214
214
215
+ /// Writer for value
216
+ /// * fill relative offset to offset location.
217
+ /// * fill written size to size location.
218
+ #[ binrw:: writer( writer, endian) ]
219
+ pub fn write_roff_size_b < U , S , B > (
220
+ value : & U ,
221
+ write_offset_to : & PosMarker < S > ,
222
+ write_size_to : & Self ,
223
+ offset_relative_to : & PosMarker < B > ,
224
+ ) -> BinResult < ( ) >
225
+ where
226
+ U : BinWrite < Args < ' static > = ( ) > ,
227
+ S : BinWrite < Args < ' static > = ( ) > + TryFrom < u64 > ,
228
+ S :: Error : binrw:: error:: CustomError + ' static ,
229
+ {
230
+ Self :: write_hero (
231
+ value,
232
+ writer,
233
+ endian,
234
+ (
235
+ Some ( write_size_to) ,
236
+ Some ( write_offset_to) ,
237
+ Some ( offset_relative_to) ,
238
+ ( ) ,
239
+ ) ,
240
+ )
241
+ }
242
+
215
243
/// Writer for value,
216
244
/// * fill relative offset to offset location relative to base.
217
245
/// * fill written size to size location.
@@ -259,6 +287,52 @@ where
259
287
)
260
288
}
261
289
290
+ #[ binrw:: writer( writer, endian) ]
291
+ pub fn write_roff_size < U , S > (
292
+ value : & U ,
293
+ write_offset_to : & PosMarker < S > ,
294
+ write_size_to : & Self ,
295
+ ) -> BinResult < ( ) >
296
+ where
297
+ U : BinWrite < Args < ' static > = ( ) > ,
298
+ S : BinWrite < Args < ' static > = ( ) > + TryFrom < u64 > ,
299
+ S :: Error : binrw:: error:: CustomError + ' static ,
300
+ {
301
+ let no_base: Option < & PosMarker < T > > = None ;
302
+ Self :: write_hero (
303
+ value,
304
+ writer,
305
+ endian,
306
+ ( Some ( write_size_to) , Some ( write_offset_to) , no_base, ( ) ) ,
307
+ )
308
+ }
309
+
310
+ #[ binrw:: writer( writer, endian) ]
311
+ pub fn write_roff_size_a < U , S > (
312
+ value : & U ,
313
+ write_offset_to : & PosMarker < S > ,
314
+ write_size_to : & Self ,
315
+ value_args : U :: Args < ' _ > ,
316
+ ) -> BinResult < ( ) >
317
+ where
318
+ U : BinWrite ,
319
+ S : BinWrite < Args < ' static > = ( ) > + TryFrom < u64 > ,
320
+ S :: Error : binrw:: error:: CustomError + ' static ,
321
+ {
322
+ let no_base: Option < & PosMarker < T > > = None ;
323
+ Self :: write_hero (
324
+ value,
325
+ writer,
326
+ endian,
327
+ (
328
+ Some ( write_size_to) ,
329
+ Some ( write_offset_to) ,
330
+ no_base,
331
+ value_args,
332
+ ) ,
333
+ )
334
+ }
335
+
262
336
/// Writer for value
263
337
/// * fill absolute offset to offset location.
264
338
/// * fill written size to size location.
0 commit comments