@@ -428,6 +428,39 @@ impl<
428
428
ResponseHeader : Debug + ZeroCopySend ,
429
429
> ActiveRequest < Service , RequestPayload , RequestHeader , [ ResponsePayload ] , ResponseHeader >
430
430
{
431
+ /// Loans/allocates a [`ResponseMut`] from the underlying data segment of the
432
+ /// [`Server`](crate::port::server::Server)
433
+ /// and initializes all slice elements with the default value. This can be a performance hit
434
+ /// and [`ActiveRequest::loan_slice_uninit()`] can be used to loan a slice of
435
+ /// [`core::mem::MaybeUninit<Payload>`].
436
+ ///
437
+ /// On failure it returns [`LoanError`] describing the failure.
438
+ ///
439
+ /// # Example
440
+ ///
441
+ /// ```
442
+ /// use iceoryx2::prelude::*;
443
+ /// # fn main() -> Result<(), Box<dyn core::error::Error>> {
444
+ /// # let node = NodeBuilder::new().create::<ipc::Service>()?;
445
+ /// #
446
+ /// # let service = node.service_builder(&"Whatever6".try_into()?)
447
+ /// # .request_response::<u64, [usize]>()
448
+ /// # .open_or_create()?;
449
+ /// #
450
+ /// # let client = service.client_builder().create()?;
451
+ /// let server = service.server_builder()
452
+ /// .initial_max_slice_len(32)
453
+ /// .create()?;
454
+ /// # let pending_response = client.send_copy(0)?;
455
+ /// let active_request = server.receive()?.unwrap();
456
+ ///
457
+ /// let slice_length = 13;
458
+ /// let mut response = active_request.loan_slice(slice_length)?;
459
+ /// response.send()?;
460
+ ///
461
+ /// # Ok(())
462
+ /// # }
463
+ /// ```
431
464
pub fn loan_slice (
432
465
& self ,
433
466
slice_len : usize ,
@@ -445,6 +478,41 @@ impl<
445
478
ResponseHeader : Debug + ZeroCopySend ,
446
479
> ActiveRequest < Service , RequestPayload , RequestHeader , [ ResponsePayload ] , ResponseHeader >
447
480
{
481
+ /// Loans/allocates a [`ResponseMutUninit`] from the underlying data segment of the
482
+ /// [`Server`](crate::port::server::Server).
483
+ /// The user has to initialize the payload before it can be sent.
484
+ ///
485
+ /// On failure it returns [`LoanError`] describing the failure.
486
+ ///
487
+ /// # Example
488
+ ///
489
+ /// ```
490
+ /// use iceoryx2::prelude::*;
491
+ /// # fn main() -> Result<(), Box<dyn core::error::Error>> {
492
+ /// # let node = NodeBuilder::new().create::<ipc::Service>()?;
493
+ /// #
494
+ /// # let service = node.service_builder(&"Whatever6".try_into()?)
495
+ /// # .request_response::<u64, [usize]>()
496
+ /// # .open_or_create()?;
497
+ /// #
498
+ /// # let client = service.client_builder().create()?;
499
+ /// let server = service.server_builder()
500
+ /// .initial_max_slice_len(32)
501
+ /// .create()?;
502
+ /// # let pending_response = client.send_copy(0)?;
503
+ /// let active_request = server.receive()?.unwrap();
504
+ ///
505
+ /// let slice_length = 13;
506
+ /// let mut response = active_request.loan_slice_uninit(slice_length)?;
507
+ /// for element in response.payload_mut() {
508
+ /// element.write(1234);
509
+ /// }
510
+ /// let response = unsafe { response.assume_init() };
511
+ /// response.send()?;
512
+ ///
513
+ /// # Ok(())
514
+ /// # }
515
+ /// ```
448
516
pub fn loan_slice_uninit (
449
517
& self ,
450
518
slice_len : usize ,
0 commit comments