Skip to content

Commit e05d7ac

Browse files
committed
[eclipse-iceoryx#690] Add documentation for request mut uninit
1 parent 34cca2b commit e05d7ac

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

iceoryx2/src/request_mut_uninit.rs

+98
Original file line numberDiff line numberDiff line change
@@ -188,13 +188,83 @@ impl<
188188
ResponseHeader,
189189
>
190190
{
191+
/// When the payload is manually populated by using
192+
/// [`RequestMutUninit::payload_mut()`], then this function can be used
193+
/// to convert it into the initialized [`RequestMut`] version.
194+
///
195+
/// # Example
196+
///
197+
/// ```
198+
/// use iceoryx2::prelude::*;
199+
///
200+
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
201+
/// # let node = NodeBuilder::new().create::<ipc::Service>()?;
202+
/// #
203+
/// let service = node
204+
/// .service_builder(&"My/Funk/ServiceName".try_into()?)
205+
/// .request_response::<[u64], u64>()
206+
/// .open_or_create()?;
207+
///
208+
/// let client = service.client_builder()
209+
/// .initial_max_slice_len(32)
210+
/// .create()?;
211+
///
212+
/// let slice_length = 13;
213+
/// let mut request = client.loan_slice_uninit(slice_length)?;
214+
/// for element in request.payload_mut() {
215+
/// element.write(1234);
216+
/// }
217+
/// // we have written the payload, initialize the request
218+
/// let request = unsafe { request.assume_init() };
219+
///
220+
/// let pending_response = request.send()?;
221+
///
222+
/// # Ok(())
223+
/// # }
224+
/// ```
225+
/// # Safety
226+
///
227+
/// The caller must ensure that [`core::mem::MaybeUninit<Payload>`] really is initialized.
228+
/// Sending the content when it is not fully initialized causes immediate undefined behavior.
191229
pub unsafe fn assume_init(
192230
self,
193231
) -> RequestMut<Service, [RequestPayload], RequestHeader, ResponsePayload, ResponseHeader> {
194232
// the transmute is not nice but safe since MaybeUninit is #[repr(transparent)] to the inner type
195233
core::mem::transmute(self.request)
196234
}
197235

236+
/// Writes the payload to the [`RequestMutUninit`] and labels the [`RequestMutUninit`] as
237+
/// initialized
238+
///
239+
/// # Example
240+
///
241+
/// ```
242+
/// use iceoryx2::prelude::*;
243+
///
244+
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
245+
/// # let node = NodeBuilder::new().create::<ipc::Service>()?;
246+
/// #
247+
/// let service = node
248+
/// .service_builder(&"My/Funk/ServiceName".try_into()?)
249+
/// .request_response::<[u64], u64>()
250+
/// .open_or_create()?;
251+
///
252+
/// let client = service.client_builder()
253+
/// .initial_max_slice_len(32)
254+
/// .create()?;
255+
///
256+
/// let slice_length = 13;
257+
/// 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() };
262+
///
263+
/// let pending_response = request.send()?;
264+
///
265+
/// # Ok(())
266+
/// # }
267+
/// ```
198268
pub fn write_from_fn<F: FnMut(usize) -> RequestPayload>(
199269
mut self,
200270
mut initializer: F,
@@ -223,6 +293,34 @@ impl<
223293
ResponseHeader,
224294
>
225295
{
296+
/// Writes the payload by mem copying the provided slice into the [`RequestMutUninit`].
297+
///
298+
/// # Example
299+
///
300+
/// ```
301+
/// use iceoryx2::prelude::*;
302+
///
303+
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
304+
/// # let node = NodeBuilder::new().create::<ipc::Service>()?;
305+
/// #
306+
/// let service = node
307+
/// .service_builder(&"My/Funk/ServiceName".try_into()?)
308+
/// .request_response::<[u64], u64>()
309+
/// .open_or_create()?;
310+
///
311+
/// let client = service.client_builder()
312+
/// .initial_max_slice_len(32)
313+
/// .create()?;
314+
///
315+
/// let slice_length = 3;
316+
/// let mut request = client.loan_slice_uninit(slice_length)?;
317+
/// let request = request.write_from_slice(&vec![1,2,3]);
318+
///
319+
/// let pending_response = request.send()?;
320+
///
321+
/// # Ok(())
322+
/// # }
323+
/// ```
226324
pub fn write_from_slice(
227325
mut self,
228326
value: &[RequestPayload],

0 commit comments

Comments
 (0)