Skip to content

Commit 805507c

Browse files
Rust::com Error Enums Optimization
* Updated Example app * Producer Builder error returning update
1 parent 089746e commit 805507c

3 files changed

Lines changed: 18 additions & 18 deletions

File tree

score/mw/com/example/com-api-example/basic-consumer-producer.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -115,18 +115,18 @@ fn create_consumer<R: Runtime>(runtime: &R, service_id: InstanceSpecifier) -> Ve
115115
runtime.find_service::<VehicleInterface>(FindServiceSpecifier::Specific(service_id));
116116
let available_service_instances = consumer_discovery
117117
.get_available_instances()
118-
.unwrap_or_else(|e| panic!("{:?}", e));
118+
.expect("Failed to get available service instances");
119119

120120
// Select service instance at specific handle_index
121121
let handle_index = 0; // or any index you need from vector of instances
122122
let consumer_builder = available_service_instances
123123
.into_iter()
124124
.nth(handle_index)
125-
.unwrap();
125+
.expect("Failed to get consumer builder at specified handle index");
126126

127127
consumer_builder
128128
.build()
129-
.unwrap_or_else(|e| panic!("{:?}", e))
129+
.expect("Failed to build consumer instance")
130130
}
131131

132132
#[allow(dead_code)]
@@ -140,16 +140,16 @@ async fn create_consumer_async<R: Runtime>(
140140
let available_service_instances = consumer_discovery
141141
.get_available_instances_async()
142142
.await
143-
.unwrap();
143+
.expect("Failed to get available service instances asynchronously");
144144

145145
// Select service instance at specific handle_index
146146
let handle_index = 0; // or any index you need from vector of instances
147147
let consumer_builder = available_service_instances
148148
.into_iter()
149149
.nth(handle_index)
150-
.unwrap();
150+
.expect("Failed to get consumer builder at specified handle index");
151151

152-
consumer_builder.build().unwrap()
152+
consumer_builder.build().expect("Failed to build consumer instance")
153153
}
154154

155155
// Create a producer for the specified service identifier
@@ -160,18 +160,16 @@ fn create_producer<R: Runtime>(
160160
let producer_builder = runtime.producer_builder::<VehicleInterface>(service_id);
161161
let producer = producer_builder
162162
.build()
163-
.unwrap_or_else(|e| panic!("{:?}", e));
164-
producer.offer().unwrap_or_else(|e| panic!("{:?}", e))
163+
.expect("Failed to build producer instance");
164+
producer.offer().expect("Failed to offer producer instance")
165165
}
166166

167167
// Run the example with the specified runtime
168168
fn run_with_runtime<R: Runtime>(name: &str, runtime: &R) {
169169
println!("\n=== Running with {name} runtime ===");
170170

171-
let service_id = match InstanceSpecifier::new("/Vehicle/Service1/Instance") {
172-
Ok(specifier) => specifier,
173-
Err(e) => panic!("{:?}", e),
174-
};
171+
let service_id = InstanceSpecifier::new("/Vehicle/Service1/Instance")
172+
.expect("Failed to create InstanceSpecifier");
175173
let producer = create_producer(runtime, service_id.clone());
176174
let consumer = create_consumer(runtime, service_id);
177175
let monitor = VehicleMonitor::new(consumer, producer).unwrap();

score/mw/com/impl/rust/com-api/com-api-runtime-lola/consumer.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ use core::future::Future;
3232
use core::marker::PhantomData;
3333
use core::mem::ManuallyDrop;
3434
use core::ops::{Deref, DerefMut};
35+
use core::panic;
3536
use futures::task::{AtomicWaker, Context, Poll};
3637
use std::cmp::Ordering;
3738
use std::fmt::Debug;
@@ -595,11 +596,10 @@ impl<'a, T: CommData> Future for ReceiveFuture<'a, T> {
595596
if self.total_received >= new_samples {
596597
//event_guard will be dropped here, allowing new receive calls to access the proxy event
597598
self.event_guard = None;
598-
return Poll::Ready(
599-
self.scratch
600-
.take()
601-
.ok_or(Error::ReceiveError(ReceiveFailedReason::BufferUnavailable)),
602-
);
599+
return Poll::Ready(Ok(self
600+
.scratch
601+
.take()
602+
.expect("SampleContainer is not available when returning Future result")));
603603
}
604604
// Have some samples but not enough yet, wait for more via waker
605605
Poll::Pending
@@ -659,6 +659,7 @@ where
659659

660660
fn get_available_instances(&self) -> Result<Self::ServiceEnumerator> {
661661
//If ANY Support is added in Lola, then we need to return all available instances
662+
//Once FFI layer error handling is in place (SWP-253124), we should convert this error to a proper FFI error instead of using map_err here
662663
let instance_specifier_lola =
663664
mw_com::InstanceSpecifier::try_from(self.instance_specifier.as_ref())
664665
.map_err(|_| Error::ServiceError(ServiceFailedReason::InstanceSpecifierInvalid))?;
@@ -692,6 +693,7 @@ where
692693
let instance_specifier = self.instance_specifier.clone();
693694

694695
// Convert to Lola InstanceSpecifier early
696+
//Once FFI layer error handling is in place (SWP-253124), we should convert this error to a proper FFI error instead of using map_err here
695697
let instance_specifier_lola =
696698
mw_com::InstanceSpecifier::try_from(instance_specifier.as_ref())
697699
.map_err(|_| Error::ServiceError(ServiceFailedReason::InstanceSpecifierInvalid));

score/mw/com/impl/rust/com-api/com-api-runtime-lola/producer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,7 @@ impl<I: Interface> ProducerBuilder<I, LolaRuntimeImpl> for SampleProducerBuilder
444444

445445
impl<I: Interface> Builder<I::Producer<LolaRuntimeImpl>> for SampleProducerBuilder<I> {
446446
fn build(self) -> Result<I::Producer<LolaRuntimeImpl>> {
447+
//Once FFI layer error handling is in place (SWP-253124), we should convert this error to a proper FFI error instead of using map_err here
447448
let instance_specifier_runtime = mw_com::InstanceSpecifier::try_from(
448449
self.instance_specifier.as_ref(),
449450
)
@@ -458,7 +459,6 @@ impl<I: Interface> Builder<I::Producer<LolaRuntimeImpl>> for SampleProducerBuild
458459
};
459460

460461
I::Producer::new(instance_info)
461-
.map_err(|_| Error::ProducerError(ProducerFailedReason::BuilderCreationFailed))
462462
}
463463
}
464464

0 commit comments

Comments
 (0)