@@ -299,11 +299,72 @@ impl<
299
299
ResponseHeader : Debug + ZeroCopySend ,
300
300
> ResponseMutUninit < Service , [ MaybeUninit < ResponsePayload > ] , ResponseHeader >
301
301
{
302
+ /// Converts the [`ResponseMutUninit`] into [`ResponseMut`]. This shall be done after the
303
+ /// payload was written into the [`ResponseMutUninit`].
304
+ ///
305
+ /// # Safety
306
+ ///
307
+ /// * Must ensure that the payload was properly initialized.
308
+ ///
309
+ /// ```
310
+ /// use iceoryx2::prelude::*;
311
+ /// # fn main() -> Result<(), Box<dyn core::error::Error>> {
312
+ /// # let node = NodeBuilder::new().create::<ipc::Service>()?;
313
+ /// #
314
+ /// # let service = node.service_builder(&"Whatever6".try_into()?)
315
+ /// # .request_response::<u64, [u64]>()
316
+ /// # .open_or_create()?;
317
+ /// #
318
+ /// # let client = service.client_builder().create()?;
319
+ /// # let server = service.server_builder()
320
+ /// .initial_max_slice_len(32)
321
+ /// .create()?;
322
+ /// # let pending_response = client.send_copy(0)?;
323
+ /// # let active_request = server.receive()?.unwrap();
324
+ ///
325
+ /// let slice_length = 13;
326
+ /// let mut response = active_request.loan_slice_uninit(slice_length)?;
327
+ /// for element in response.payload_mut() {
328
+ /// element.write(1234);
329
+ /// }
330
+ /// // this is fine since the payload was initialized to 789
331
+ /// let response = unsafe { response.assume_init() };
332
+ ///
333
+ /// # Ok(())
334
+ /// # }
335
+ /// ```
302
336
pub unsafe fn assume_init ( self ) -> ResponseMut < Service , [ ResponsePayload ] , ResponseHeader > {
303
337
// the transmute is not nice but safe since MaybeUninit is #[repr(transparent)] to the inner type
304
338
core:: mem:: transmute ( self . response )
305
339
}
306
340
341
+ /// Writes the payload to the [`ResponseMutUninit`] and labels the [`ResponseMutUninit`] as
342
+ /// initialized
343
+ ///
344
+ /// ```
345
+ /// use iceoryx2::prelude::*;
346
+ /// # fn main() -> Result<(), Box<dyn core::error::Error>> {
347
+ /// # let node = NodeBuilder::new().create::<ipc::Service>()?;
348
+ /// #
349
+ /// # let service = node.service_builder(&"Whatever6".try_into()?)
350
+ /// # .request_response::<u64, [usize]>()
351
+ /// # .open_or_create()?;
352
+ /// #
353
+ /// # let client = service.client_builder().create()?;
354
+ /// # let server = service.server_builder()
355
+ /// .initial_max_slice_len(32)
356
+ /// .create()?;
357
+ /// # let pending_response = client.send_copy(0)?;
358
+ /// # let active_request = server.receive()?.unwrap();
359
+ ///
360
+ /// let slice_length = 13;
361
+ /// let mut response = active_request.loan_slice_uninit(slice_length)?;
362
+ /// let response = response.write_from_fn(|index| index * 2 + 3);
363
+ /// response.send()?;
364
+ ///
365
+ /// # Ok(())
366
+ /// # }
367
+ /// ```
307
368
pub fn write_from_fn < F : FnMut ( usize ) -> ResponsePayload > (
308
369
mut self ,
309
370
mut initializer : F ,
@@ -323,6 +384,32 @@ impl<
323
384
ResponseHeader : Debug + ZeroCopySend ,
324
385
> ResponseMutUninit < Service , [ MaybeUninit < ResponsePayload > ] , ResponseHeader >
325
386
{
387
+ /// Writes the payload by mem copying the provided slice into the [`ResponseMutUninit`].
388
+ ///
389
+ /// ```
390
+ /// use iceoryx2::prelude::*;
391
+ /// # fn main() -> Result<(), Box<dyn core::error::Error>> {
392
+ /// # let node = NodeBuilder::new().create::<ipc::Service>()?;
393
+ /// #
394
+ /// # let service = node.service_builder(&"Whatever6".try_into()?)
395
+ /// # .request_response::<u64, [u64]>()
396
+ /// # .open_or_create()?;
397
+ /// #
398
+ /// # let client = service.client_builder().create()?;
399
+ /// # let server = service.server_builder()
400
+ /// .initial_max_slice_len(32)
401
+ /// .create()?;
402
+ /// # let pending_response = client.send_copy(0)?;
403
+ /// # let active_request = server.receive()?.unwrap();
404
+ ///
405
+ /// let slice_length = 4;
406
+ /// let mut response = active_request.loan_slice_uninit(slice_length)?;
407
+ /// let response = response.write_from_slice(&vec![1, 2, 3, 4]);
408
+ /// response.send()?;
409
+ ///
410
+ /// # Ok(())
411
+ /// # }
412
+ /// ```
326
413
pub fn write_from_slice (
327
414
mut self ,
328
415
value : & [ ResponsePayload ] ,
0 commit comments