Skip to content

Commit 62bf2f6

Browse files
committed
[#690] Add documentation for server, pending response and active request
1 parent 1145cba commit 62bf2f6

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed

iceoryx2/src/active_request.rs

+68
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,39 @@ impl<
428428
ResponseHeader: Debug + ZeroCopySend,
429429
> ActiveRequest<Service, RequestPayload, RequestHeader, [ResponsePayload], ResponseHeader>
430430
{
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+
/// ```
431464
pub fn loan_slice(
432465
&self,
433466
slice_len: usize,
@@ -445,6 +478,41 @@ impl<
445478
ResponseHeader: Debug + ZeroCopySend,
446479
> ActiveRequest<Service, RequestPayload, RequestHeader, [ResponsePayload], ResponseHeader>
447480
{
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+
/// ```
448516
pub fn loan_slice_uninit(
449517
&self,
450518
slice_len: usize,

iceoryx2/src/pending_response.rs

+30
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,36 @@ impl<
300300
ResponseHeader: Debug + ZeroCopySend,
301301
> PendingResponse<Service, RequestPayload, RequestHeader, [ResponsePayload], ResponseHeader>
302302
{
303+
/// Receives a [`Response`] from one of the [`Server`](crate::port::server::Server)s that
304+
/// received the [`RequestMut`].
305+
///
306+
/// # Example
307+
///
308+
/// ```
309+
/// use iceoryx2::prelude::*;
310+
///
311+
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
312+
/// # let node = NodeBuilder::new().create::<ipc::Service>()?;
313+
/// #
314+
/// # let service = node
315+
/// # .service_builder(&"My/Funk/ServiceName".try_into()?)
316+
/// # .request_response::<u64, [usize]>()
317+
/// # .open_or_create()?;
318+
/// #
319+
/// # let client = service.client_builder().create()?;
320+
///
321+
/// # let request = client.loan_uninit()?;
322+
/// # let request = request.write_payload(0);
323+
///
324+
/// let pending_response = request.send()?;
325+
///
326+
/// if let Some(response) = pending_response.receive()? {
327+
/// println!("received response: {:?}", response);
328+
/// }
329+
///
330+
/// # Ok(())
331+
/// # }
332+
/// ```
303333
pub fn receive(
304334
&self,
305335
) -> Result<Option<Response<Service, [ResponsePayload], ResponseHeader>>, ReceiveError> {

iceoryx2/src/port/server.rs

+28
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,33 @@ impl<
543543
}
544544
}
545545

546+
/// Receives a [`RequestMut`](crate::request_mut::RequestMut) that was sent by a
547+
/// [`Client`](crate::port::client::Client) and returns an [`ActiveRequest`] which
548+
/// can be used to respond.
549+
/// If no [`RequestMut`](crate::request_mut::RequestMut)s were received it
550+
/// returns [`None`].
551+
///
552+
/// # Example
553+
///
554+
/// ```
555+
/// use iceoryx2::prelude::*;
556+
///
557+
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
558+
/// # let node = NodeBuilder::new().create::<ipc::Service>()?;
559+
/// #
560+
/// let service = node
561+
/// .service_builder(&"My/Funk/ServiceName".try_into()?)
562+
/// .request_response::<[u64], u64>()
563+
/// .open_or_create()?;
564+
///
565+
/// let server = service.server_builder().create()?;
566+
///
567+
/// while let Some(active_request) = server.receive()? {
568+
/// println!("received request: {:?}", active_request);
569+
/// }
570+
/// # Ok(())
571+
/// # }
572+
/// ```
546573
pub fn receive(
547574
&self,
548575
) -> Result<
@@ -596,6 +623,7 @@ impl<
596623
ResponseHeader: Debug + ZeroCopySend,
597624
> Server<Service, [CustomPayloadMarker], RequestHeader, ResponsePayload, ResponseHeader>
598625
{
626+
#[doc(hidden)]
599627
pub unsafe fn receive_custom_payload(
600628
&self,
601629
) -> Result<

0 commit comments

Comments
 (0)