Skip to content

Commit 1145cba

Browse files
committed
[#690] Add documentation for response mut uninit
1 parent e05d7ac commit 1145cba

File tree

2 files changed

+89
-5
lines changed

2 files changed

+89
-5
lines changed

iceoryx2/src/request_mut_uninit.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ impl<
246246
/// #
247247
/// let service = node
248248
/// .service_builder(&"My/Funk/ServiceName".try_into()?)
249-
/// .request_response::<[u64], u64>()
249+
/// .request_response::<[usize], u64>()
250250
/// .open_or_create()?;
251251
///
252252
/// let client = service.client_builder()
@@ -255,10 +255,7 @@ impl<
255255
///
256256
/// let slice_length = 13;
257257
/// let mut request = client.loan_slice_uninit(slice_length)?;
258-
/// for element in request.payload_mut() {
259-
/// element.write(1234);
260-
/// }
261-
/// let request = unsafe { request.assume_init() };
258+
/// let request = request.write_from_fn(|index| index + 123);
262259
///
263260
/// let pending_response = request.send()?;
264261
///

iceoryx2/src/response_mut_uninit.rs

+87
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,72 @@ impl<
299299
ResponseHeader: Debug + ZeroCopySend,
300300
> ResponseMutUninit<Service, [MaybeUninit<ResponsePayload>], ResponseHeader>
301301
{
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+
/// ```
302336
pub unsafe fn assume_init(self) -> ResponseMut<Service, [ResponsePayload], ResponseHeader> {
303337
// the transmute is not nice but safe since MaybeUninit is #[repr(transparent)] to the inner type
304338
core::mem::transmute(self.response)
305339
}
306340

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+
/// ```
307368
pub fn write_from_fn<F: FnMut(usize) -> ResponsePayload>(
308369
mut self,
309370
mut initializer: F,
@@ -323,6 +384,32 @@ impl<
323384
ResponseHeader: Debug + ZeroCopySend,
324385
> ResponseMutUninit<Service, [MaybeUninit<ResponsePayload>], ResponseHeader>
325386
{
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+
/// ```
326413
pub fn write_from_slice(
327414
mut self,
328415
value: &[ResponsePayload],

0 commit comments

Comments
 (0)