@@ -61,6 +61,7 @@ use crate::{
61
61
request_mut_uninit:: RequestMutUninit ,
62
62
service:: {
63
63
self ,
64
+ builder:: publish_subscribe:: CustomPayloadMarker ,
64
65
dynamic_config:: request_response:: { ClientDetails , ServerDetails } ,
65
66
naming_scheme:: data_segment_name,
66
67
port_factory:: client:: { ClientCreateError , PortFactoryClient } ,
@@ -249,9 +250,9 @@ impl<Service: service::Service> ClientSharedState<Service> {
249
250
#[ derive( Debug ) ]
250
251
pub struct Client <
251
252
Service : service:: Service ,
252
- RequestPayload : Debug + ZeroCopySend ,
253
+ RequestPayload : Debug + ZeroCopySend + ? Sized ,
253
254
RequestHeader : Debug + ZeroCopySend ,
254
- ResponsePayload : Debug + ZeroCopySend ,
255
+ ResponsePayload : Debug + ZeroCopySend + ? Sized ,
255
256
ResponseHeader : Debug + ZeroCopySend ,
256
257
> {
257
258
client_port_id : UniqueClientId ,
@@ -265,9 +266,9 @@ pub struct Client<
265
266
266
267
impl <
267
268
Service : service:: Service ,
268
- RequestPayload : Debug + ZeroCopySend ,
269
+ RequestPayload : Debug + ZeroCopySend + ? Sized ,
269
270
RequestHeader : Debug + ZeroCopySend ,
270
- ResponsePayload : Debug + ZeroCopySend ,
271
+ ResponsePayload : Debug + ZeroCopySend + ? Sized ,
271
272
ResponseHeader : Debug + ZeroCopySend ,
272
273
> Client < Service , RequestPayload , RequestHeader , ResponsePayload , ResponseHeader >
273
274
{
@@ -440,7 +441,19 @@ impl<
440
441
. request_sender
441
442
. unable_to_deliver_strategy
442
443
}
444
+ }
443
445
446
+ ////////////////////////
447
+ // BEGIN: typed API
448
+ ////////////////////////
449
+ impl <
450
+ Service : service:: Service ,
451
+ RequestPayload : Debug + ZeroCopySend ,
452
+ RequestHeader : Debug + ZeroCopySend ,
453
+ ResponsePayload : Debug + ZeroCopySend + ?Sized ,
454
+ ResponseHeader : Debug + ZeroCopySend ,
455
+ > Client < Service , RequestPayload , RequestHeader , ResponsePayload , ResponseHeader >
456
+ {
444
457
/// Acquires an [`RequestMutUninit`] to store payload. This API shall be used
445
458
/// by default to avoid unnecessary copies.
446
459
///
@@ -585,7 +598,7 @@ impl<
585
598
Service : service:: Service ,
586
599
RequestPayload : Debug + Default + ZeroCopySend ,
587
600
RequestHeader : Debug + ZeroCopySend ,
588
- ResponsePayload : Debug + ZeroCopySend ,
601
+ ResponsePayload : Debug + ZeroCopySend + ? Sized ,
589
602
ResponseHeader : Debug + ZeroCopySend ,
590
603
> Client < Service , RequestPayload , RequestHeader , ResponsePayload , ResponseHeader >
591
604
{
@@ -627,3 +640,75 @@ impl<
627
640
Ok ( self . loan_uninit ( ) ?. write_payload ( RequestPayload :: default ( ) ) )
628
641
}
629
642
}
643
+
644
+ ////////////////////////
645
+ // END: typed API
646
+ ////////////////////////
647
+
648
+ ////////////////////////
649
+ // BEGIN: sliced API
650
+ ////////////////////////
651
+ impl <
652
+ Service : service:: Service ,
653
+ RequestPayload : Default + Debug + ZeroCopySend ,
654
+ RequestHeader : Debug + ZeroCopySend ,
655
+ ResponsePayload : Debug + ZeroCopySend + ?Sized ,
656
+ ResponseHeader : Debug + ZeroCopySend ,
657
+ > Client < Service , [ RequestPayload ] , RequestHeader , ResponsePayload , ResponseHeader >
658
+ {
659
+ pub fn loan_slice (
660
+ & self ,
661
+ number_of_elements : usize ,
662
+ ) -> Result <
663
+ RequestMut < Service , [ RequestPayload ] , RequestHeader , ResponsePayload , ResponseHeader > ,
664
+ LoanError ,
665
+ > {
666
+ todo ! ( )
667
+ }
668
+ }
669
+
670
+ impl <
671
+ Service : service:: Service ,
672
+ RequestPayload : Debug + ZeroCopySend ,
673
+ RequestHeader : Debug + ZeroCopySend ,
674
+ ResponsePayload : Debug + ZeroCopySend + ?Sized ,
675
+ ResponseHeader : Debug + ZeroCopySend ,
676
+ > Client < Service , [ RequestPayload ] , RequestHeader , ResponsePayload , ResponseHeader >
677
+ {
678
+ pub fn loan_slice_uninit (
679
+ & self ,
680
+ number_of_elements : usize ,
681
+ ) -> Result <
682
+ RequestMut < Service , [ RequestPayload ] , RequestHeader , ResponsePayload , ResponseHeader > ,
683
+ LoanError ,
684
+ > {
685
+ todo ! ( )
686
+ }
687
+ }
688
+
689
+ impl <
690
+ Service : service:: Service ,
691
+ RequestHeader : Debug + ZeroCopySend ,
692
+ ResponseHeader : Debug + ZeroCopySend ,
693
+ > Client < Service , [ CustomPayloadMarker ] , RequestHeader , [ CustomPayloadMarker ] , ResponseHeader >
694
+ {
695
+ #[ doc( hidden) ]
696
+ pub fn loan_custom_payload (
697
+ & self ,
698
+ number_of_elements : usize ,
699
+ ) -> Result <
700
+ RequestMut <
701
+ Service ,
702
+ [ CustomPayloadMarker ] ,
703
+ RequestHeader ,
704
+ [ CustomPayloadMarker ] ,
705
+ ResponseHeader ,
706
+ > ,
707
+ LoanError ,
708
+ > {
709
+ todo ! ( )
710
+ }
711
+ }
712
+ ////////////////////////
713
+ // END: sliced API
714
+ ////////////////////////
0 commit comments