1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_fuchsia_metrics_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct MetricEventLoggerFactoryCreateMetricEventLoggerRequest {
16 pub project_spec: ProjectSpec,
17 pub logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
18}
19
20impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
21 for MetricEventLoggerFactoryCreateMetricEventLoggerRequest
22{
23}
24
25#[derive(Debug, PartialEq)]
26pub struct MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest {
27 pub project_spec: ProjectSpec,
28 pub experiment_ids: Vec<u32>,
29 pub logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
30}
31
32impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
33 for MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest
34{
35}
36
37#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
38pub struct MetricEventLoggerMarker;
39
40impl fidl::endpoints::ProtocolMarker for MetricEventLoggerMarker {
41 type Proxy = MetricEventLoggerProxy;
42 type RequestStream = MetricEventLoggerRequestStream;
43 #[cfg(target_os = "fuchsia")]
44 type SynchronousProxy = MetricEventLoggerSynchronousProxy;
45
46 const DEBUG_NAME: &'static str = "(anonymous) MetricEventLogger";
47}
48pub type MetricEventLoggerLogOccurrenceResult = Result<(), Error>;
49pub type MetricEventLoggerLogIntegerResult = Result<(), Error>;
50pub type MetricEventLoggerLogIntegerHistogramResult = Result<(), Error>;
51pub type MetricEventLoggerLogStringResult = Result<(), Error>;
52pub type MetricEventLoggerLogMetricEventsResult = Result<(), Error>;
53
54pub trait MetricEventLoggerProxyInterface: Send + Sync {
55 type LogOccurrenceResponseFut: std::future::Future<Output = Result<MetricEventLoggerLogOccurrenceResult, fidl::Error>>
56 + Send;
57 fn r#log_occurrence(
58 &self,
59 metric_id: u32,
60 count: u64,
61 event_codes: &[u32],
62 ) -> Self::LogOccurrenceResponseFut;
63 type LogIntegerResponseFut: std::future::Future<Output = Result<MetricEventLoggerLogIntegerResult, fidl::Error>>
64 + Send;
65 fn r#log_integer(
66 &self,
67 metric_id: u32,
68 value: i64,
69 event_codes: &[u32],
70 ) -> Self::LogIntegerResponseFut;
71 type LogIntegerHistogramResponseFut: std::future::Future<
72 Output = Result<MetricEventLoggerLogIntegerHistogramResult, fidl::Error>,
73 > + Send;
74 fn r#log_integer_histogram(
75 &self,
76 metric_id: u32,
77 histogram: &[HistogramBucket],
78 event_codes: &[u32],
79 ) -> Self::LogIntegerHistogramResponseFut;
80 type LogStringResponseFut: std::future::Future<Output = Result<MetricEventLoggerLogStringResult, fidl::Error>>
81 + Send;
82 fn r#log_string(
83 &self,
84 metric_id: u32,
85 string_value: &str,
86 event_codes: &[u32],
87 ) -> Self::LogStringResponseFut;
88 type LogMetricEventsResponseFut: std::future::Future<Output = Result<MetricEventLoggerLogMetricEventsResult, fidl::Error>>
89 + Send;
90 fn r#log_metric_events(&self, events: &[MetricEvent]) -> Self::LogMetricEventsResponseFut;
91}
92#[derive(Debug)]
93#[cfg(target_os = "fuchsia")]
94pub struct MetricEventLoggerSynchronousProxy {
95 client: fidl::client::sync::Client,
96}
97
98#[cfg(target_os = "fuchsia")]
99impl fidl::endpoints::SynchronousProxy for MetricEventLoggerSynchronousProxy {
100 type Proxy = MetricEventLoggerProxy;
101 type Protocol = MetricEventLoggerMarker;
102
103 fn from_channel(inner: fidl::Channel) -> Self {
104 Self::new(inner)
105 }
106
107 fn into_channel(self) -> fidl::Channel {
108 self.client.into_channel()
109 }
110
111 fn as_channel(&self) -> &fidl::Channel {
112 self.client.as_channel()
113 }
114}
115
116#[cfg(target_os = "fuchsia")]
117impl MetricEventLoggerSynchronousProxy {
118 pub fn new(channel: fidl::Channel) -> Self {
119 Self { client: fidl::client::sync::Client::new(channel) }
120 }
121
122 pub fn into_channel(self) -> fidl::Channel {
123 self.client.into_channel()
124 }
125
126 pub fn wait_for_event(
129 &self,
130 deadline: zx::MonotonicInstant,
131 ) -> Result<MetricEventLoggerEvent, fidl::Error> {
132 MetricEventLoggerEvent::decode(
133 self.client.wait_for_event::<MetricEventLoggerMarker>(deadline)?,
134 )
135 }
136
137 pub fn r#log_occurrence(
148 &self,
149 mut metric_id: u32,
150 mut count: u64,
151 mut event_codes: &[u32],
152 ___deadline: zx::MonotonicInstant,
153 ) -> Result<MetricEventLoggerLogOccurrenceResult, fidl::Error> {
154 let _response = self.client.send_query::<
155 MetricEventLoggerLogOccurrenceRequest,
156 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
157 MetricEventLoggerMarker,
158 >(
159 (metric_id, count, event_codes,),
160 0x26308985ae2bb3ac,
161 fidl::encoding::DynamicFlags::empty(),
162 ___deadline,
163 )?;
164 Ok(_response.map(|x| x))
165 }
166
167 pub fn r#log_integer(
177 &self,
178 mut metric_id: u32,
179 mut value: i64,
180 mut event_codes: &[u32],
181 ___deadline: zx::MonotonicInstant,
182 ) -> Result<MetricEventLoggerLogIntegerResult, fidl::Error> {
183 let _response = self.client.send_query::<
184 MetricEventLoggerLogIntegerRequest,
185 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
186 MetricEventLoggerMarker,
187 >(
188 (metric_id, value, event_codes,),
189 0x5d453303a88bd552,
190 fidl::encoding::DynamicFlags::empty(),
191 ___deadline,
192 )?;
193 Ok(_response.map(|x| x))
194 }
195
196 pub fn r#log_integer_histogram(
207 &self,
208 mut metric_id: u32,
209 mut histogram: &[HistogramBucket],
210 mut event_codes: &[u32],
211 ___deadline: zx::MonotonicInstant,
212 ) -> Result<MetricEventLoggerLogIntegerHistogramResult, fidl::Error> {
213 let _response = self.client.send_query::<
214 MetricEventLoggerLogIntegerHistogramRequest,
215 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
216 MetricEventLoggerMarker,
217 >(
218 (metric_id, histogram, event_codes,),
219 0x79ac8a6bc06a01c0,
220 fidl::encoding::DynamicFlags::empty(),
221 ___deadline,
222 )?;
223 Ok(_response.map(|x| x))
224 }
225
226 pub fn r#log_string(
236 &self,
237 mut metric_id: u32,
238 mut string_value: &str,
239 mut event_codes: &[u32],
240 ___deadline: zx::MonotonicInstant,
241 ) -> Result<MetricEventLoggerLogStringResult, fidl::Error> {
242 let _response = self.client.send_query::<
243 MetricEventLoggerLogStringRequest,
244 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
245 MetricEventLoggerMarker,
246 >(
247 (metric_id, string_value, event_codes,),
248 0x1611efbdf6ac8300,
249 fidl::encoding::DynamicFlags::empty(),
250 ___deadline,
251 )?;
252 Ok(_response.map(|x| x))
253 }
254
255 pub fn r#log_metric_events(
258 &self,
259 mut events: &[MetricEvent],
260 ___deadline: zx::MonotonicInstant,
261 ) -> Result<MetricEventLoggerLogMetricEventsResult, fidl::Error> {
262 let _response = self.client.send_query::<
263 MetricEventLoggerLogMetricEventsRequest,
264 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
265 MetricEventLoggerMarker,
266 >(
267 (events,),
268 0x4d8c26bb74820c6b,
269 fidl::encoding::DynamicFlags::empty(),
270 ___deadline,
271 )?;
272 Ok(_response.map(|x| x))
273 }
274}
275
276#[cfg(target_os = "fuchsia")]
277impl From<MetricEventLoggerSynchronousProxy> for zx::NullableHandle {
278 fn from(value: MetricEventLoggerSynchronousProxy) -> Self {
279 value.into_channel().into()
280 }
281}
282
283#[cfg(target_os = "fuchsia")]
284impl From<fidl::Channel> for MetricEventLoggerSynchronousProxy {
285 fn from(value: fidl::Channel) -> Self {
286 Self::new(value)
287 }
288}
289
290#[cfg(target_os = "fuchsia")]
291impl fidl::endpoints::FromClient for MetricEventLoggerSynchronousProxy {
292 type Protocol = MetricEventLoggerMarker;
293
294 fn from_client(value: fidl::endpoints::ClientEnd<MetricEventLoggerMarker>) -> Self {
295 Self::new(value.into_channel())
296 }
297}
298
299#[derive(Debug, Clone)]
300pub struct MetricEventLoggerProxy {
301 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
302}
303
304impl fidl::endpoints::Proxy for MetricEventLoggerProxy {
305 type Protocol = MetricEventLoggerMarker;
306
307 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
308 Self::new(inner)
309 }
310
311 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
312 self.client.into_channel().map_err(|client| Self { client })
313 }
314
315 fn as_channel(&self) -> &::fidl::AsyncChannel {
316 self.client.as_channel()
317 }
318}
319
320impl MetricEventLoggerProxy {
321 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
323 let protocol_name =
324 <MetricEventLoggerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
325 Self { client: fidl::client::Client::new(channel, protocol_name) }
326 }
327
328 pub fn take_event_stream(&self) -> MetricEventLoggerEventStream {
334 MetricEventLoggerEventStream { event_receiver: self.client.take_event_receiver() }
335 }
336
337 pub fn r#log_occurrence(
348 &self,
349 mut metric_id: u32,
350 mut count: u64,
351 mut event_codes: &[u32],
352 ) -> fidl::client::QueryResponseFut<
353 MetricEventLoggerLogOccurrenceResult,
354 fidl::encoding::DefaultFuchsiaResourceDialect,
355 > {
356 MetricEventLoggerProxyInterface::r#log_occurrence(self, metric_id, count, event_codes)
357 }
358
359 pub fn r#log_integer(
369 &self,
370 mut metric_id: u32,
371 mut value: i64,
372 mut event_codes: &[u32],
373 ) -> fidl::client::QueryResponseFut<
374 MetricEventLoggerLogIntegerResult,
375 fidl::encoding::DefaultFuchsiaResourceDialect,
376 > {
377 MetricEventLoggerProxyInterface::r#log_integer(self, metric_id, value, event_codes)
378 }
379
380 pub fn r#log_integer_histogram(
391 &self,
392 mut metric_id: u32,
393 mut histogram: &[HistogramBucket],
394 mut event_codes: &[u32],
395 ) -> fidl::client::QueryResponseFut<
396 MetricEventLoggerLogIntegerHistogramResult,
397 fidl::encoding::DefaultFuchsiaResourceDialect,
398 > {
399 MetricEventLoggerProxyInterface::r#log_integer_histogram(
400 self,
401 metric_id,
402 histogram,
403 event_codes,
404 )
405 }
406
407 pub fn r#log_string(
417 &self,
418 mut metric_id: u32,
419 mut string_value: &str,
420 mut event_codes: &[u32],
421 ) -> fidl::client::QueryResponseFut<
422 MetricEventLoggerLogStringResult,
423 fidl::encoding::DefaultFuchsiaResourceDialect,
424 > {
425 MetricEventLoggerProxyInterface::r#log_string(self, metric_id, string_value, event_codes)
426 }
427
428 pub fn r#log_metric_events(
431 &self,
432 mut events: &[MetricEvent],
433 ) -> fidl::client::QueryResponseFut<
434 MetricEventLoggerLogMetricEventsResult,
435 fidl::encoding::DefaultFuchsiaResourceDialect,
436 > {
437 MetricEventLoggerProxyInterface::r#log_metric_events(self, events)
438 }
439}
440
441impl MetricEventLoggerProxyInterface for MetricEventLoggerProxy {
442 type LogOccurrenceResponseFut = fidl::client::QueryResponseFut<
443 MetricEventLoggerLogOccurrenceResult,
444 fidl::encoding::DefaultFuchsiaResourceDialect,
445 >;
446 fn r#log_occurrence(
447 &self,
448 mut metric_id: u32,
449 mut count: u64,
450 mut event_codes: &[u32],
451 ) -> Self::LogOccurrenceResponseFut {
452 fn _decode(
453 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
454 ) -> Result<MetricEventLoggerLogOccurrenceResult, fidl::Error> {
455 let _response = fidl::client::decode_transaction_body::<
456 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
457 fidl::encoding::DefaultFuchsiaResourceDialect,
458 0x26308985ae2bb3ac,
459 >(_buf?)?;
460 Ok(_response.map(|x| x))
461 }
462 self.client.send_query_and_decode::<
463 MetricEventLoggerLogOccurrenceRequest,
464 MetricEventLoggerLogOccurrenceResult,
465 >(
466 (metric_id, count, event_codes,),
467 0x26308985ae2bb3ac,
468 fidl::encoding::DynamicFlags::empty(),
469 _decode,
470 )
471 }
472
473 type LogIntegerResponseFut = fidl::client::QueryResponseFut<
474 MetricEventLoggerLogIntegerResult,
475 fidl::encoding::DefaultFuchsiaResourceDialect,
476 >;
477 fn r#log_integer(
478 &self,
479 mut metric_id: u32,
480 mut value: i64,
481 mut event_codes: &[u32],
482 ) -> Self::LogIntegerResponseFut {
483 fn _decode(
484 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
485 ) -> Result<MetricEventLoggerLogIntegerResult, fidl::Error> {
486 let _response = fidl::client::decode_transaction_body::<
487 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
488 fidl::encoding::DefaultFuchsiaResourceDialect,
489 0x5d453303a88bd552,
490 >(_buf?)?;
491 Ok(_response.map(|x| x))
492 }
493 self.client.send_query_and_decode::<
494 MetricEventLoggerLogIntegerRequest,
495 MetricEventLoggerLogIntegerResult,
496 >(
497 (metric_id, value, event_codes,),
498 0x5d453303a88bd552,
499 fidl::encoding::DynamicFlags::empty(),
500 _decode,
501 )
502 }
503
504 type LogIntegerHistogramResponseFut = fidl::client::QueryResponseFut<
505 MetricEventLoggerLogIntegerHistogramResult,
506 fidl::encoding::DefaultFuchsiaResourceDialect,
507 >;
508 fn r#log_integer_histogram(
509 &self,
510 mut metric_id: u32,
511 mut histogram: &[HistogramBucket],
512 mut event_codes: &[u32],
513 ) -> Self::LogIntegerHistogramResponseFut {
514 fn _decode(
515 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
516 ) -> Result<MetricEventLoggerLogIntegerHistogramResult, fidl::Error> {
517 let _response = fidl::client::decode_transaction_body::<
518 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
519 fidl::encoding::DefaultFuchsiaResourceDialect,
520 0x79ac8a6bc06a01c0,
521 >(_buf?)?;
522 Ok(_response.map(|x| x))
523 }
524 self.client.send_query_and_decode::<
525 MetricEventLoggerLogIntegerHistogramRequest,
526 MetricEventLoggerLogIntegerHistogramResult,
527 >(
528 (metric_id, histogram, event_codes,),
529 0x79ac8a6bc06a01c0,
530 fidl::encoding::DynamicFlags::empty(),
531 _decode,
532 )
533 }
534
535 type LogStringResponseFut = fidl::client::QueryResponseFut<
536 MetricEventLoggerLogStringResult,
537 fidl::encoding::DefaultFuchsiaResourceDialect,
538 >;
539 fn r#log_string(
540 &self,
541 mut metric_id: u32,
542 mut string_value: &str,
543 mut event_codes: &[u32],
544 ) -> Self::LogStringResponseFut {
545 fn _decode(
546 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
547 ) -> Result<MetricEventLoggerLogStringResult, fidl::Error> {
548 let _response = fidl::client::decode_transaction_body::<
549 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
550 fidl::encoding::DefaultFuchsiaResourceDialect,
551 0x1611efbdf6ac8300,
552 >(_buf?)?;
553 Ok(_response.map(|x| x))
554 }
555 self.client.send_query_and_decode::<
556 MetricEventLoggerLogStringRequest,
557 MetricEventLoggerLogStringResult,
558 >(
559 (metric_id, string_value, event_codes,),
560 0x1611efbdf6ac8300,
561 fidl::encoding::DynamicFlags::empty(),
562 _decode,
563 )
564 }
565
566 type LogMetricEventsResponseFut = fidl::client::QueryResponseFut<
567 MetricEventLoggerLogMetricEventsResult,
568 fidl::encoding::DefaultFuchsiaResourceDialect,
569 >;
570 fn r#log_metric_events(&self, mut events: &[MetricEvent]) -> Self::LogMetricEventsResponseFut {
571 fn _decode(
572 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
573 ) -> Result<MetricEventLoggerLogMetricEventsResult, fidl::Error> {
574 let _response = fidl::client::decode_transaction_body::<
575 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
576 fidl::encoding::DefaultFuchsiaResourceDialect,
577 0x4d8c26bb74820c6b,
578 >(_buf?)?;
579 Ok(_response.map(|x| x))
580 }
581 self.client.send_query_and_decode::<
582 MetricEventLoggerLogMetricEventsRequest,
583 MetricEventLoggerLogMetricEventsResult,
584 >(
585 (events,),
586 0x4d8c26bb74820c6b,
587 fidl::encoding::DynamicFlags::empty(),
588 _decode,
589 )
590 }
591}
592
593pub struct MetricEventLoggerEventStream {
594 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
595}
596
597impl std::marker::Unpin for MetricEventLoggerEventStream {}
598
599impl futures::stream::FusedStream for MetricEventLoggerEventStream {
600 fn is_terminated(&self) -> bool {
601 self.event_receiver.is_terminated()
602 }
603}
604
605impl futures::Stream for MetricEventLoggerEventStream {
606 type Item = Result<MetricEventLoggerEvent, fidl::Error>;
607
608 fn poll_next(
609 mut self: std::pin::Pin<&mut Self>,
610 cx: &mut std::task::Context<'_>,
611 ) -> std::task::Poll<Option<Self::Item>> {
612 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
613 &mut self.event_receiver,
614 cx
615 )?) {
616 Some(buf) => std::task::Poll::Ready(Some(MetricEventLoggerEvent::decode(buf))),
617 None => std::task::Poll::Ready(None),
618 }
619 }
620}
621
622#[derive(Debug)]
623pub enum MetricEventLoggerEvent {}
624
625impl MetricEventLoggerEvent {
626 fn decode(
628 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
629 ) -> Result<MetricEventLoggerEvent, fidl::Error> {
630 let (bytes, _handles) = buf.split_mut();
631 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
632 debug_assert_eq!(tx_header.tx_id, 0);
633 match tx_header.ordinal {
634 _ => Err(fidl::Error::UnknownOrdinal {
635 ordinal: tx_header.ordinal,
636 protocol_name:
637 <MetricEventLoggerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
638 }),
639 }
640 }
641}
642
643pub struct MetricEventLoggerRequestStream {
645 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
646 is_terminated: bool,
647}
648
649impl std::marker::Unpin for MetricEventLoggerRequestStream {}
650
651impl futures::stream::FusedStream for MetricEventLoggerRequestStream {
652 fn is_terminated(&self) -> bool {
653 self.is_terminated
654 }
655}
656
657impl fidl::endpoints::RequestStream for MetricEventLoggerRequestStream {
658 type Protocol = MetricEventLoggerMarker;
659 type ControlHandle = MetricEventLoggerControlHandle;
660
661 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
662 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
663 }
664
665 fn control_handle(&self) -> Self::ControlHandle {
666 MetricEventLoggerControlHandle { inner: self.inner.clone() }
667 }
668
669 fn into_inner(
670 self,
671 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
672 {
673 (self.inner, self.is_terminated)
674 }
675
676 fn from_inner(
677 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
678 is_terminated: bool,
679 ) -> Self {
680 Self { inner, is_terminated }
681 }
682}
683
684impl futures::Stream for MetricEventLoggerRequestStream {
685 type Item = Result<MetricEventLoggerRequest, fidl::Error>;
686
687 fn poll_next(
688 mut self: std::pin::Pin<&mut Self>,
689 cx: &mut std::task::Context<'_>,
690 ) -> std::task::Poll<Option<Self::Item>> {
691 let this = &mut *self;
692 if this.inner.check_shutdown(cx) {
693 this.is_terminated = true;
694 return std::task::Poll::Ready(None);
695 }
696 if this.is_terminated {
697 panic!("polled MetricEventLoggerRequestStream after completion");
698 }
699 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
700 |bytes, handles| {
701 match this.inner.channel().read_etc(cx, bytes, handles) {
702 std::task::Poll::Ready(Ok(())) => {}
703 std::task::Poll::Pending => return std::task::Poll::Pending,
704 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
705 this.is_terminated = true;
706 return std::task::Poll::Ready(None);
707 }
708 std::task::Poll::Ready(Err(e)) => {
709 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
710 e.into(),
711 ))));
712 }
713 }
714
715 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
717
718 std::task::Poll::Ready(Some(match header.ordinal {
719 0x26308985ae2bb3ac => {
720 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
721 let mut req = fidl::new_empty!(
722 MetricEventLoggerLogOccurrenceRequest,
723 fidl::encoding::DefaultFuchsiaResourceDialect
724 );
725 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MetricEventLoggerLogOccurrenceRequest>(&header, _body_bytes, handles, &mut req)?;
726 let control_handle =
727 MetricEventLoggerControlHandle { inner: this.inner.clone() };
728 Ok(MetricEventLoggerRequest::LogOccurrence {
729 metric_id: req.metric_id,
730 count: req.count,
731 event_codes: req.event_codes,
732
733 responder: MetricEventLoggerLogOccurrenceResponder {
734 control_handle: std::mem::ManuallyDrop::new(control_handle),
735 tx_id: header.tx_id,
736 },
737 })
738 }
739 0x5d453303a88bd552 => {
740 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
741 let mut req = fidl::new_empty!(
742 MetricEventLoggerLogIntegerRequest,
743 fidl::encoding::DefaultFuchsiaResourceDialect
744 );
745 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MetricEventLoggerLogIntegerRequest>(&header, _body_bytes, handles, &mut req)?;
746 let control_handle =
747 MetricEventLoggerControlHandle { inner: this.inner.clone() };
748 Ok(MetricEventLoggerRequest::LogInteger {
749 metric_id: req.metric_id,
750 value: req.value,
751 event_codes: req.event_codes,
752
753 responder: MetricEventLoggerLogIntegerResponder {
754 control_handle: std::mem::ManuallyDrop::new(control_handle),
755 tx_id: header.tx_id,
756 },
757 })
758 }
759 0x79ac8a6bc06a01c0 => {
760 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
761 let mut req = fidl::new_empty!(
762 MetricEventLoggerLogIntegerHistogramRequest,
763 fidl::encoding::DefaultFuchsiaResourceDialect
764 );
765 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MetricEventLoggerLogIntegerHistogramRequest>(&header, _body_bytes, handles, &mut req)?;
766 let control_handle =
767 MetricEventLoggerControlHandle { inner: this.inner.clone() };
768 Ok(MetricEventLoggerRequest::LogIntegerHistogram {
769 metric_id: req.metric_id,
770 histogram: req.histogram,
771 event_codes: req.event_codes,
772
773 responder: MetricEventLoggerLogIntegerHistogramResponder {
774 control_handle: std::mem::ManuallyDrop::new(control_handle),
775 tx_id: header.tx_id,
776 },
777 })
778 }
779 0x1611efbdf6ac8300 => {
780 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
781 let mut req = fidl::new_empty!(
782 MetricEventLoggerLogStringRequest,
783 fidl::encoding::DefaultFuchsiaResourceDialect
784 );
785 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MetricEventLoggerLogStringRequest>(&header, _body_bytes, handles, &mut req)?;
786 let control_handle =
787 MetricEventLoggerControlHandle { inner: this.inner.clone() };
788 Ok(MetricEventLoggerRequest::LogString {
789 metric_id: req.metric_id,
790 string_value: req.string_value,
791 event_codes: req.event_codes,
792
793 responder: MetricEventLoggerLogStringResponder {
794 control_handle: std::mem::ManuallyDrop::new(control_handle),
795 tx_id: header.tx_id,
796 },
797 })
798 }
799 0x4d8c26bb74820c6b => {
800 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
801 let mut req = fidl::new_empty!(
802 MetricEventLoggerLogMetricEventsRequest,
803 fidl::encoding::DefaultFuchsiaResourceDialect
804 );
805 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MetricEventLoggerLogMetricEventsRequest>(&header, _body_bytes, handles, &mut req)?;
806 let control_handle =
807 MetricEventLoggerControlHandle { inner: this.inner.clone() };
808 Ok(MetricEventLoggerRequest::LogMetricEvents {
809 events: req.events,
810
811 responder: MetricEventLoggerLogMetricEventsResponder {
812 control_handle: std::mem::ManuallyDrop::new(control_handle),
813 tx_id: header.tx_id,
814 },
815 })
816 }
817 _ => Err(fidl::Error::UnknownOrdinal {
818 ordinal: header.ordinal,
819 protocol_name:
820 <MetricEventLoggerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
821 }),
822 }))
823 },
824 )
825 }
826}
827
828#[derive(Debug)]
830pub enum MetricEventLoggerRequest {
831 LogOccurrence {
842 metric_id: u32,
843 count: u64,
844 event_codes: Vec<u32>,
845 responder: MetricEventLoggerLogOccurrenceResponder,
846 },
847 LogInteger {
857 metric_id: u32,
858 value: i64,
859 event_codes: Vec<u32>,
860 responder: MetricEventLoggerLogIntegerResponder,
861 },
862 LogIntegerHistogram {
873 metric_id: u32,
874 histogram: Vec<HistogramBucket>,
875 event_codes: Vec<u32>,
876 responder: MetricEventLoggerLogIntegerHistogramResponder,
877 },
878 LogString {
888 metric_id: u32,
889 string_value: String,
890 event_codes: Vec<u32>,
891 responder: MetricEventLoggerLogStringResponder,
892 },
893 LogMetricEvents {
896 events: Vec<MetricEvent>,
897 responder: MetricEventLoggerLogMetricEventsResponder,
898 },
899}
900
901impl MetricEventLoggerRequest {
902 #[allow(irrefutable_let_patterns)]
903 pub fn into_log_occurrence(
904 self,
905 ) -> Option<(u32, u64, Vec<u32>, MetricEventLoggerLogOccurrenceResponder)> {
906 if let MetricEventLoggerRequest::LogOccurrence {
907 metric_id,
908 count,
909 event_codes,
910 responder,
911 } = self
912 {
913 Some((metric_id, count, event_codes, responder))
914 } else {
915 None
916 }
917 }
918
919 #[allow(irrefutable_let_patterns)]
920 pub fn into_log_integer(
921 self,
922 ) -> Option<(u32, i64, Vec<u32>, MetricEventLoggerLogIntegerResponder)> {
923 if let MetricEventLoggerRequest::LogInteger { metric_id, value, event_codes, responder } =
924 self
925 {
926 Some((metric_id, value, event_codes, responder))
927 } else {
928 None
929 }
930 }
931
932 #[allow(irrefutable_let_patterns)]
933 pub fn into_log_integer_histogram(
934 self,
935 ) -> Option<(u32, Vec<HistogramBucket>, Vec<u32>, MetricEventLoggerLogIntegerHistogramResponder)>
936 {
937 if let MetricEventLoggerRequest::LogIntegerHistogram {
938 metric_id,
939 histogram,
940 event_codes,
941 responder,
942 } = self
943 {
944 Some((metric_id, histogram, event_codes, responder))
945 } else {
946 None
947 }
948 }
949
950 #[allow(irrefutable_let_patterns)]
951 pub fn into_log_string(
952 self,
953 ) -> Option<(u32, String, Vec<u32>, MetricEventLoggerLogStringResponder)> {
954 if let MetricEventLoggerRequest::LogString {
955 metric_id,
956 string_value,
957 event_codes,
958 responder,
959 } = self
960 {
961 Some((metric_id, string_value, event_codes, responder))
962 } else {
963 None
964 }
965 }
966
967 #[allow(irrefutable_let_patterns)]
968 pub fn into_log_metric_events(
969 self,
970 ) -> Option<(Vec<MetricEvent>, MetricEventLoggerLogMetricEventsResponder)> {
971 if let MetricEventLoggerRequest::LogMetricEvents { events, responder } = self {
972 Some((events, responder))
973 } else {
974 None
975 }
976 }
977
978 pub fn method_name(&self) -> &'static str {
980 match *self {
981 MetricEventLoggerRequest::LogOccurrence { .. } => "log_occurrence",
982 MetricEventLoggerRequest::LogInteger { .. } => "log_integer",
983 MetricEventLoggerRequest::LogIntegerHistogram { .. } => "log_integer_histogram",
984 MetricEventLoggerRequest::LogString { .. } => "log_string",
985 MetricEventLoggerRequest::LogMetricEvents { .. } => "log_metric_events",
986 }
987 }
988}
989
990#[derive(Debug, Clone)]
991pub struct MetricEventLoggerControlHandle {
992 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
993}
994
995impl MetricEventLoggerControlHandle {
996 pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
997 self.inner.shutdown_with_epitaph(status.into())
998 }
999}
1000
1001impl fidl::endpoints::ControlHandle for MetricEventLoggerControlHandle {
1002 fn shutdown(&self) {
1003 self.inner.shutdown()
1004 }
1005
1006 fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1007 self.inner.shutdown_with_epitaph(status)
1008 }
1009
1010 fn is_closed(&self) -> bool {
1011 self.inner.channel().is_closed()
1012 }
1013 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1014 self.inner.channel().on_closed()
1015 }
1016
1017 #[cfg(target_os = "fuchsia")]
1018 fn signal_peer(
1019 &self,
1020 clear_mask: zx::Signals,
1021 set_mask: zx::Signals,
1022 ) -> Result<(), zx_status::Status> {
1023 use fidl::Peered;
1024 self.inner.channel().signal_peer(clear_mask, set_mask)
1025 }
1026}
1027
1028impl MetricEventLoggerControlHandle {}
1029
1030#[must_use = "FIDL methods require a response to be sent"]
1031#[derive(Debug)]
1032pub struct MetricEventLoggerLogOccurrenceResponder {
1033 control_handle: std::mem::ManuallyDrop<MetricEventLoggerControlHandle>,
1034 tx_id: u32,
1035}
1036
1037impl std::ops::Drop for MetricEventLoggerLogOccurrenceResponder {
1041 fn drop(&mut self) {
1042 self.control_handle.shutdown();
1043 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1045 }
1046}
1047
1048impl fidl::endpoints::Responder for MetricEventLoggerLogOccurrenceResponder {
1049 type ControlHandle = MetricEventLoggerControlHandle;
1050
1051 fn control_handle(&self) -> &MetricEventLoggerControlHandle {
1052 &self.control_handle
1053 }
1054
1055 fn drop_without_shutdown(mut self) {
1056 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1058 std::mem::forget(self);
1060 }
1061}
1062
1063impl MetricEventLoggerLogOccurrenceResponder {
1064 pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1068 let _result = self.send_raw(result);
1069 if _result.is_err() {
1070 self.control_handle.shutdown();
1071 }
1072 self.drop_without_shutdown();
1073 _result
1074 }
1075
1076 pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1078 let _result = self.send_raw(result);
1079 self.drop_without_shutdown();
1080 _result
1081 }
1082
1083 fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1084 self.control_handle
1085 .inner
1086 .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
1087 result,
1088 self.tx_id,
1089 0x26308985ae2bb3ac,
1090 fidl::encoding::DynamicFlags::empty(),
1091 )
1092 }
1093}
1094
1095#[must_use = "FIDL methods require a response to be sent"]
1096#[derive(Debug)]
1097pub struct MetricEventLoggerLogIntegerResponder {
1098 control_handle: std::mem::ManuallyDrop<MetricEventLoggerControlHandle>,
1099 tx_id: u32,
1100}
1101
1102impl std::ops::Drop for MetricEventLoggerLogIntegerResponder {
1106 fn drop(&mut self) {
1107 self.control_handle.shutdown();
1108 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1110 }
1111}
1112
1113impl fidl::endpoints::Responder for MetricEventLoggerLogIntegerResponder {
1114 type ControlHandle = MetricEventLoggerControlHandle;
1115
1116 fn control_handle(&self) -> &MetricEventLoggerControlHandle {
1117 &self.control_handle
1118 }
1119
1120 fn drop_without_shutdown(mut self) {
1121 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1123 std::mem::forget(self);
1125 }
1126}
1127
1128impl MetricEventLoggerLogIntegerResponder {
1129 pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1133 let _result = self.send_raw(result);
1134 if _result.is_err() {
1135 self.control_handle.shutdown();
1136 }
1137 self.drop_without_shutdown();
1138 _result
1139 }
1140
1141 pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1143 let _result = self.send_raw(result);
1144 self.drop_without_shutdown();
1145 _result
1146 }
1147
1148 fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1149 self.control_handle
1150 .inner
1151 .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
1152 result,
1153 self.tx_id,
1154 0x5d453303a88bd552,
1155 fidl::encoding::DynamicFlags::empty(),
1156 )
1157 }
1158}
1159
1160#[must_use = "FIDL methods require a response to be sent"]
1161#[derive(Debug)]
1162pub struct MetricEventLoggerLogIntegerHistogramResponder {
1163 control_handle: std::mem::ManuallyDrop<MetricEventLoggerControlHandle>,
1164 tx_id: u32,
1165}
1166
1167impl std::ops::Drop for MetricEventLoggerLogIntegerHistogramResponder {
1171 fn drop(&mut self) {
1172 self.control_handle.shutdown();
1173 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1175 }
1176}
1177
1178impl fidl::endpoints::Responder for MetricEventLoggerLogIntegerHistogramResponder {
1179 type ControlHandle = MetricEventLoggerControlHandle;
1180
1181 fn control_handle(&self) -> &MetricEventLoggerControlHandle {
1182 &self.control_handle
1183 }
1184
1185 fn drop_without_shutdown(mut self) {
1186 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1188 std::mem::forget(self);
1190 }
1191}
1192
1193impl MetricEventLoggerLogIntegerHistogramResponder {
1194 pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1198 let _result = self.send_raw(result);
1199 if _result.is_err() {
1200 self.control_handle.shutdown();
1201 }
1202 self.drop_without_shutdown();
1203 _result
1204 }
1205
1206 pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1208 let _result = self.send_raw(result);
1209 self.drop_without_shutdown();
1210 _result
1211 }
1212
1213 fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1214 self.control_handle
1215 .inner
1216 .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
1217 result,
1218 self.tx_id,
1219 0x79ac8a6bc06a01c0,
1220 fidl::encoding::DynamicFlags::empty(),
1221 )
1222 }
1223}
1224
1225#[must_use = "FIDL methods require a response to be sent"]
1226#[derive(Debug)]
1227pub struct MetricEventLoggerLogStringResponder {
1228 control_handle: std::mem::ManuallyDrop<MetricEventLoggerControlHandle>,
1229 tx_id: u32,
1230}
1231
1232impl std::ops::Drop for MetricEventLoggerLogStringResponder {
1236 fn drop(&mut self) {
1237 self.control_handle.shutdown();
1238 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1240 }
1241}
1242
1243impl fidl::endpoints::Responder for MetricEventLoggerLogStringResponder {
1244 type ControlHandle = MetricEventLoggerControlHandle;
1245
1246 fn control_handle(&self) -> &MetricEventLoggerControlHandle {
1247 &self.control_handle
1248 }
1249
1250 fn drop_without_shutdown(mut self) {
1251 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1253 std::mem::forget(self);
1255 }
1256}
1257
1258impl MetricEventLoggerLogStringResponder {
1259 pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1263 let _result = self.send_raw(result);
1264 if _result.is_err() {
1265 self.control_handle.shutdown();
1266 }
1267 self.drop_without_shutdown();
1268 _result
1269 }
1270
1271 pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1273 let _result = self.send_raw(result);
1274 self.drop_without_shutdown();
1275 _result
1276 }
1277
1278 fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1279 self.control_handle
1280 .inner
1281 .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
1282 result,
1283 self.tx_id,
1284 0x1611efbdf6ac8300,
1285 fidl::encoding::DynamicFlags::empty(),
1286 )
1287 }
1288}
1289
1290#[must_use = "FIDL methods require a response to be sent"]
1291#[derive(Debug)]
1292pub struct MetricEventLoggerLogMetricEventsResponder {
1293 control_handle: std::mem::ManuallyDrop<MetricEventLoggerControlHandle>,
1294 tx_id: u32,
1295}
1296
1297impl std::ops::Drop for MetricEventLoggerLogMetricEventsResponder {
1301 fn drop(&mut self) {
1302 self.control_handle.shutdown();
1303 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1305 }
1306}
1307
1308impl fidl::endpoints::Responder for MetricEventLoggerLogMetricEventsResponder {
1309 type ControlHandle = MetricEventLoggerControlHandle;
1310
1311 fn control_handle(&self) -> &MetricEventLoggerControlHandle {
1312 &self.control_handle
1313 }
1314
1315 fn drop_without_shutdown(mut self) {
1316 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1318 std::mem::forget(self);
1320 }
1321}
1322
1323impl MetricEventLoggerLogMetricEventsResponder {
1324 pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1328 let _result = self.send_raw(result);
1329 if _result.is_err() {
1330 self.control_handle.shutdown();
1331 }
1332 self.drop_without_shutdown();
1333 _result
1334 }
1335
1336 pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1338 let _result = self.send_raw(result);
1339 self.drop_without_shutdown();
1340 _result
1341 }
1342
1343 fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1344 self.control_handle
1345 .inner
1346 .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
1347 result,
1348 self.tx_id,
1349 0x4d8c26bb74820c6b,
1350 fidl::encoding::DynamicFlags::empty(),
1351 )
1352 }
1353}
1354
1355#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1356pub struct MetricEventLoggerFactoryMarker;
1357
1358impl fidl::endpoints::ProtocolMarker for MetricEventLoggerFactoryMarker {
1359 type Proxy = MetricEventLoggerFactoryProxy;
1360 type RequestStream = MetricEventLoggerFactoryRequestStream;
1361 #[cfg(target_os = "fuchsia")]
1362 type SynchronousProxy = MetricEventLoggerFactorySynchronousProxy;
1363
1364 const DEBUG_NAME: &'static str = "fuchsia.metrics.MetricEventLoggerFactory";
1365}
1366impl fidl::endpoints::DiscoverableProtocolMarker for MetricEventLoggerFactoryMarker {}
1367pub type MetricEventLoggerFactoryCreateMetricEventLoggerResult = Result<(), Error>;
1368pub type MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResult = Result<(), Error>;
1369
1370pub trait MetricEventLoggerFactoryProxyInterface: Send + Sync {
1371 type CreateMetricEventLoggerResponseFut: std::future::Future<
1372 Output = Result<MetricEventLoggerFactoryCreateMetricEventLoggerResult, fidl::Error>,
1373 > + Send;
1374 fn r#create_metric_event_logger(
1375 &self,
1376 project_spec: &ProjectSpec,
1377 logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1378 ) -> Self::CreateMetricEventLoggerResponseFut;
1379 type CreateMetricEventLoggerWithExperimentsResponseFut: std::future::Future<
1380 Output = Result<
1381 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResult,
1382 fidl::Error,
1383 >,
1384 > + Send;
1385 fn r#create_metric_event_logger_with_experiments(
1386 &self,
1387 project_spec: &ProjectSpec,
1388 experiment_ids: &[u32],
1389 logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1390 ) -> Self::CreateMetricEventLoggerWithExperimentsResponseFut;
1391}
1392#[derive(Debug)]
1393#[cfg(target_os = "fuchsia")]
1394pub struct MetricEventLoggerFactorySynchronousProxy {
1395 client: fidl::client::sync::Client,
1396}
1397
1398#[cfg(target_os = "fuchsia")]
1399impl fidl::endpoints::SynchronousProxy for MetricEventLoggerFactorySynchronousProxy {
1400 type Proxy = MetricEventLoggerFactoryProxy;
1401 type Protocol = MetricEventLoggerFactoryMarker;
1402
1403 fn from_channel(inner: fidl::Channel) -> Self {
1404 Self::new(inner)
1405 }
1406
1407 fn into_channel(self) -> fidl::Channel {
1408 self.client.into_channel()
1409 }
1410
1411 fn as_channel(&self) -> &fidl::Channel {
1412 self.client.as_channel()
1413 }
1414}
1415
1416#[cfg(target_os = "fuchsia")]
1417impl MetricEventLoggerFactorySynchronousProxy {
1418 pub fn new(channel: fidl::Channel) -> Self {
1419 Self { client: fidl::client::sync::Client::new(channel) }
1420 }
1421
1422 pub fn into_channel(self) -> fidl::Channel {
1423 self.client.into_channel()
1424 }
1425
1426 pub fn wait_for_event(
1429 &self,
1430 deadline: zx::MonotonicInstant,
1431 ) -> Result<MetricEventLoggerFactoryEvent, fidl::Error> {
1432 MetricEventLoggerFactoryEvent::decode(
1433 self.client.wait_for_event::<MetricEventLoggerFactoryMarker>(deadline)?,
1434 )
1435 }
1436
1437 pub fn r#create_metric_event_logger(
1439 &self,
1440 mut project_spec: &ProjectSpec,
1441 mut logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1442 ___deadline: zx::MonotonicInstant,
1443 ) -> Result<MetricEventLoggerFactoryCreateMetricEventLoggerResult, fidl::Error> {
1444 let _response = self.client.send_query::<
1445 MetricEventLoggerFactoryCreateMetricEventLoggerRequest,
1446 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1447 MetricEventLoggerFactoryMarker,
1448 >(
1449 (project_spec, logger,),
1450 0xd6cf51cee5039fe,
1451 fidl::encoding::DynamicFlags::empty(),
1452 ___deadline,
1453 )?;
1454 Ok(_response.map(|x| x))
1455 }
1456
1457 pub fn r#create_metric_event_logger_with_experiments(
1466 &self,
1467 mut project_spec: &ProjectSpec,
1468 mut experiment_ids: &[u32],
1469 mut logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1470 ___deadline: zx::MonotonicInstant,
1471 ) -> Result<MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResult, fidl::Error>
1472 {
1473 let _response = self.client.send_query::<
1474 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest,
1475 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1476 MetricEventLoggerFactoryMarker,
1477 >(
1478 (project_spec, experiment_ids, logger,),
1479 0x7f1f745ef7bf48fa,
1480 fidl::encoding::DynamicFlags::empty(),
1481 ___deadline,
1482 )?;
1483 Ok(_response.map(|x| x))
1484 }
1485}
1486
1487#[cfg(target_os = "fuchsia")]
1488impl From<MetricEventLoggerFactorySynchronousProxy> for zx::NullableHandle {
1489 fn from(value: MetricEventLoggerFactorySynchronousProxy) -> Self {
1490 value.into_channel().into()
1491 }
1492}
1493
1494#[cfg(target_os = "fuchsia")]
1495impl From<fidl::Channel> for MetricEventLoggerFactorySynchronousProxy {
1496 fn from(value: fidl::Channel) -> Self {
1497 Self::new(value)
1498 }
1499}
1500
1501#[cfg(target_os = "fuchsia")]
1502impl fidl::endpoints::FromClient for MetricEventLoggerFactorySynchronousProxy {
1503 type Protocol = MetricEventLoggerFactoryMarker;
1504
1505 fn from_client(value: fidl::endpoints::ClientEnd<MetricEventLoggerFactoryMarker>) -> Self {
1506 Self::new(value.into_channel())
1507 }
1508}
1509
1510#[derive(Debug, Clone)]
1511pub struct MetricEventLoggerFactoryProxy {
1512 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1513}
1514
1515impl fidl::endpoints::Proxy for MetricEventLoggerFactoryProxy {
1516 type Protocol = MetricEventLoggerFactoryMarker;
1517
1518 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1519 Self::new(inner)
1520 }
1521
1522 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1523 self.client.into_channel().map_err(|client| Self { client })
1524 }
1525
1526 fn as_channel(&self) -> &::fidl::AsyncChannel {
1527 self.client.as_channel()
1528 }
1529}
1530
1531impl MetricEventLoggerFactoryProxy {
1532 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1534 let protocol_name =
1535 <MetricEventLoggerFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1536 Self { client: fidl::client::Client::new(channel, protocol_name) }
1537 }
1538
1539 pub fn take_event_stream(&self) -> MetricEventLoggerFactoryEventStream {
1545 MetricEventLoggerFactoryEventStream { event_receiver: self.client.take_event_receiver() }
1546 }
1547
1548 pub fn r#create_metric_event_logger(
1550 &self,
1551 mut project_spec: &ProjectSpec,
1552 mut logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1553 ) -> fidl::client::QueryResponseFut<
1554 MetricEventLoggerFactoryCreateMetricEventLoggerResult,
1555 fidl::encoding::DefaultFuchsiaResourceDialect,
1556 > {
1557 MetricEventLoggerFactoryProxyInterface::r#create_metric_event_logger(
1558 self,
1559 project_spec,
1560 logger,
1561 )
1562 }
1563
1564 pub fn r#create_metric_event_logger_with_experiments(
1573 &self,
1574 mut project_spec: &ProjectSpec,
1575 mut experiment_ids: &[u32],
1576 mut logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1577 ) -> fidl::client::QueryResponseFut<
1578 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResult,
1579 fidl::encoding::DefaultFuchsiaResourceDialect,
1580 > {
1581 MetricEventLoggerFactoryProxyInterface::r#create_metric_event_logger_with_experiments(
1582 self,
1583 project_spec,
1584 experiment_ids,
1585 logger,
1586 )
1587 }
1588}
1589
1590impl MetricEventLoggerFactoryProxyInterface for MetricEventLoggerFactoryProxy {
1591 type CreateMetricEventLoggerResponseFut = fidl::client::QueryResponseFut<
1592 MetricEventLoggerFactoryCreateMetricEventLoggerResult,
1593 fidl::encoding::DefaultFuchsiaResourceDialect,
1594 >;
1595 fn r#create_metric_event_logger(
1596 &self,
1597 mut project_spec: &ProjectSpec,
1598 mut logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1599 ) -> Self::CreateMetricEventLoggerResponseFut {
1600 fn _decode(
1601 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1602 ) -> Result<MetricEventLoggerFactoryCreateMetricEventLoggerResult, fidl::Error> {
1603 let _response = fidl::client::decode_transaction_body::<
1604 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1605 fidl::encoding::DefaultFuchsiaResourceDialect,
1606 0xd6cf51cee5039fe,
1607 >(_buf?)?;
1608 Ok(_response.map(|x| x))
1609 }
1610 self.client.send_query_and_decode::<
1611 MetricEventLoggerFactoryCreateMetricEventLoggerRequest,
1612 MetricEventLoggerFactoryCreateMetricEventLoggerResult,
1613 >(
1614 (project_spec, logger,),
1615 0xd6cf51cee5039fe,
1616 fidl::encoding::DynamicFlags::empty(),
1617 _decode,
1618 )
1619 }
1620
1621 type CreateMetricEventLoggerWithExperimentsResponseFut = fidl::client::QueryResponseFut<
1622 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResult,
1623 fidl::encoding::DefaultFuchsiaResourceDialect,
1624 >;
1625 fn r#create_metric_event_logger_with_experiments(
1626 &self,
1627 mut project_spec: &ProjectSpec,
1628 mut experiment_ids: &[u32],
1629 mut logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1630 ) -> Self::CreateMetricEventLoggerWithExperimentsResponseFut {
1631 fn _decode(
1632 mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1633 ) -> Result<MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResult, fidl::Error>
1634 {
1635 let _response = fidl::client::decode_transaction_body::<
1636 fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1637 fidl::encoding::DefaultFuchsiaResourceDialect,
1638 0x7f1f745ef7bf48fa,
1639 >(_buf?)?;
1640 Ok(_response.map(|x| x))
1641 }
1642 self.client.send_query_and_decode::<
1643 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest,
1644 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResult,
1645 >(
1646 (project_spec, experiment_ids, logger,),
1647 0x7f1f745ef7bf48fa,
1648 fidl::encoding::DynamicFlags::empty(),
1649 _decode,
1650 )
1651 }
1652}
1653
1654pub struct MetricEventLoggerFactoryEventStream {
1655 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1656}
1657
1658impl std::marker::Unpin for MetricEventLoggerFactoryEventStream {}
1659
1660impl futures::stream::FusedStream for MetricEventLoggerFactoryEventStream {
1661 fn is_terminated(&self) -> bool {
1662 self.event_receiver.is_terminated()
1663 }
1664}
1665
1666impl futures::Stream for MetricEventLoggerFactoryEventStream {
1667 type Item = Result<MetricEventLoggerFactoryEvent, fidl::Error>;
1668
1669 fn poll_next(
1670 mut self: std::pin::Pin<&mut Self>,
1671 cx: &mut std::task::Context<'_>,
1672 ) -> std::task::Poll<Option<Self::Item>> {
1673 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1674 &mut self.event_receiver,
1675 cx
1676 )?) {
1677 Some(buf) => std::task::Poll::Ready(Some(MetricEventLoggerFactoryEvent::decode(buf))),
1678 None => std::task::Poll::Ready(None),
1679 }
1680 }
1681}
1682
1683#[derive(Debug)]
1684pub enum MetricEventLoggerFactoryEvent {}
1685
1686impl MetricEventLoggerFactoryEvent {
1687 fn decode(
1689 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1690 ) -> Result<MetricEventLoggerFactoryEvent, fidl::Error> {
1691 let (bytes, _handles) = buf.split_mut();
1692 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1693 debug_assert_eq!(tx_header.tx_id, 0);
1694 match tx_header.ordinal {
1695 _ => Err(fidl::Error::UnknownOrdinal {
1696 ordinal: tx_header.ordinal,
1697 protocol_name:
1698 <MetricEventLoggerFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1699 }),
1700 }
1701 }
1702}
1703
1704pub struct MetricEventLoggerFactoryRequestStream {
1706 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1707 is_terminated: bool,
1708}
1709
1710impl std::marker::Unpin for MetricEventLoggerFactoryRequestStream {}
1711
1712impl futures::stream::FusedStream for MetricEventLoggerFactoryRequestStream {
1713 fn is_terminated(&self) -> bool {
1714 self.is_terminated
1715 }
1716}
1717
1718impl fidl::endpoints::RequestStream for MetricEventLoggerFactoryRequestStream {
1719 type Protocol = MetricEventLoggerFactoryMarker;
1720 type ControlHandle = MetricEventLoggerFactoryControlHandle;
1721
1722 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1723 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1724 }
1725
1726 fn control_handle(&self) -> Self::ControlHandle {
1727 MetricEventLoggerFactoryControlHandle { inner: self.inner.clone() }
1728 }
1729
1730 fn into_inner(
1731 self,
1732 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1733 {
1734 (self.inner, self.is_terminated)
1735 }
1736
1737 fn from_inner(
1738 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1739 is_terminated: bool,
1740 ) -> Self {
1741 Self { inner, is_terminated }
1742 }
1743}
1744
1745impl futures::Stream for MetricEventLoggerFactoryRequestStream {
1746 type Item = Result<MetricEventLoggerFactoryRequest, fidl::Error>;
1747
1748 fn poll_next(
1749 mut self: std::pin::Pin<&mut Self>,
1750 cx: &mut std::task::Context<'_>,
1751 ) -> std::task::Poll<Option<Self::Item>> {
1752 let this = &mut *self;
1753 if this.inner.check_shutdown(cx) {
1754 this.is_terminated = true;
1755 return std::task::Poll::Ready(None);
1756 }
1757 if this.is_terminated {
1758 panic!("polled MetricEventLoggerFactoryRequestStream after completion");
1759 }
1760 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1761 |bytes, handles| {
1762 match this.inner.channel().read_etc(cx, bytes, handles) {
1763 std::task::Poll::Ready(Ok(())) => {}
1764 std::task::Poll::Pending => return std::task::Poll::Pending,
1765 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1766 this.is_terminated = true;
1767 return std::task::Poll::Ready(None);
1768 }
1769 std::task::Poll::Ready(Err(e)) => {
1770 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1771 e.into(),
1772 ))));
1773 }
1774 }
1775
1776 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1778
1779 std::task::Poll::Ready(Some(match header.ordinal {
1780 0xd6cf51cee5039fe => {
1781 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1782 let mut req = fidl::new_empty!(MetricEventLoggerFactoryCreateMetricEventLoggerRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
1783 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MetricEventLoggerFactoryCreateMetricEventLoggerRequest>(&header, _body_bytes, handles, &mut req)?;
1784 let control_handle = MetricEventLoggerFactoryControlHandle {
1785 inner: this.inner.clone(),
1786 };
1787 Ok(MetricEventLoggerFactoryRequest::CreateMetricEventLogger {project_spec: req.project_spec,
1788logger: req.logger,
1789
1790 responder: MetricEventLoggerFactoryCreateMetricEventLoggerResponder {
1791 control_handle: std::mem::ManuallyDrop::new(control_handle),
1792 tx_id: header.tx_id,
1793 },
1794 })
1795 }
1796 0x7f1f745ef7bf48fa => {
1797 header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1798 let mut req = fidl::new_empty!(MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
1799 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest>(&header, _body_bytes, handles, &mut req)?;
1800 let control_handle = MetricEventLoggerFactoryControlHandle {
1801 inner: this.inner.clone(),
1802 };
1803 Ok(MetricEventLoggerFactoryRequest::CreateMetricEventLoggerWithExperiments {project_spec: req.project_spec,
1804experiment_ids: req.experiment_ids,
1805logger: req.logger,
1806
1807 responder: MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResponder {
1808 control_handle: std::mem::ManuallyDrop::new(control_handle),
1809 tx_id: header.tx_id,
1810 },
1811 })
1812 }
1813 _ => Err(fidl::Error::UnknownOrdinal {
1814 ordinal: header.ordinal,
1815 protocol_name: <MetricEventLoggerFactoryMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1816 }),
1817 }))
1818 },
1819 )
1820 }
1821}
1822
1823#[derive(Debug)]
1825pub enum MetricEventLoggerFactoryRequest {
1826 CreateMetricEventLogger {
1828 project_spec: ProjectSpec,
1829 logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1830 responder: MetricEventLoggerFactoryCreateMetricEventLoggerResponder,
1831 },
1832 CreateMetricEventLoggerWithExperiments {
1841 project_spec: ProjectSpec,
1842 experiment_ids: Vec<u32>,
1843 logger: fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1844 responder: MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResponder,
1845 },
1846}
1847
1848impl MetricEventLoggerFactoryRequest {
1849 #[allow(irrefutable_let_patterns)]
1850 pub fn into_create_metric_event_logger(
1851 self,
1852 ) -> Option<(
1853 ProjectSpec,
1854 fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1855 MetricEventLoggerFactoryCreateMetricEventLoggerResponder,
1856 )> {
1857 if let MetricEventLoggerFactoryRequest::CreateMetricEventLogger {
1858 project_spec,
1859 logger,
1860 responder,
1861 } = self
1862 {
1863 Some((project_spec, logger, responder))
1864 } else {
1865 None
1866 }
1867 }
1868
1869 #[allow(irrefutable_let_patterns)]
1870 pub fn into_create_metric_event_logger_with_experiments(
1871 self,
1872 ) -> Option<(
1873 ProjectSpec,
1874 Vec<u32>,
1875 fidl::endpoints::ServerEnd<MetricEventLoggerMarker>,
1876 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResponder,
1877 )> {
1878 if let MetricEventLoggerFactoryRequest::CreateMetricEventLoggerWithExperiments {
1879 project_spec,
1880 experiment_ids,
1881 logger,
1882 responder,
1883 } = self
1884 {
1885 Some((project_spec, experiment_ids, logger, responder))
1886 } else {
1887 None
1888 }
1889 }
1890
1891 pub fn method_name(&self) -> &'static str {
1893 match *self {
1894 MetricEventLoggerFactoryRequest::CreateMetricEventLogger { .. } => {
1895 "create_metric_event_logger"
1896 }
1897 MetricEventLoggerFactoryRequest::CreateMetricEventLoggerWithExperiments { .. } => {
1898 "create_metric_event_logger_with_experiments"
1899 }
1900 }
1901 }
1902}
1903
1904#[derive(Debug, Clone)]
1905pub struct MetricEventLoggerFactoryControlHandle {
1906 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1907}
1908
1909impl MetricEventLoggerFactoryControlHandle {
1910 pub fn shutdown_with_epitaph(&self, status: impl Into<fidl::Epitaph>) {
1911 self.inner.shutdown_with_epitaph(status.into())
1912 }
1913}
1914
1915impl fidl::endpoints::ControlHandle for MetricEventLoggerFactoryControlHandle {
1916 fn shutdown(&self) {
1917 self.inner.shutdown()
1918 }
1919
1920 fn shutdown_with_epitaph(&self, status: fidl::Epitaph) {
1921 self.inner.shutdown_with_epitaph(status)
1922 }
1923
1924 fn is_closed(&self) -> bool {
1925 self.inner.channel().is_closed()
1926 }
1927 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1928 self.inner.channel().on_closed()
1929 }
1930
1931 #[cfg(target_os = "fuchsia")]
1932 fn signal_peer(
1933 &self,
1934 clear_mask: zx::Signals,
1935 set_mask: zx::Signals,
1936 ) -> Result<(), zx_status::Status> {
1937 use fidl::Peered;
1938 self.inner.channel().signal_peer(clear_mask, set_mask)
1939 }
1940}
1941
1942impl MetricEventLoggerFactoryControlHandle {}
1943
1944#[must_use = "FIDL methods require a response to be sent"]
1945#[derive(Debug)]
1946pub struct MetricEventLoggerFactoryCreateMetricEventLoggerResponder {
1947 control_handle: std::mem::ManuallyDrop<MetricEventLoggerFactoryControlHandle>,
1948 tx_id: u32,
1949}
1950
1951impl std::ops::Drop for MetricEventLoggerFactoryCreateMetricEventLoggerResponder {
1955 fn drop(&mut self) {
1956 self.control_handle.shutdown();
1957 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1959 }
1960}
1961
1962impl fidl::endpoints::Responder for MetricEventLoggerFactoryCreateMetricEventLoggerResponder {
1963 type ControlHandle = MetricEventLoggerFactoryControlHandle;
1964
1965 fn control_handle(&self) -> &MetricEventLoggerFactoryControlHandle {
1966 &self.control_handle
1967 }
1968
1969 fn drop_without_shutdown(mut self) {
1970 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1972 std::mem::forget(self);
1974 }
1975}
1976
1977impl MetricEventLoggerFactoryCreateMetricEventLoggerResponder {
1978 pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1982 let _result = self.send_raw(result);
1983 if _result.is_err() {
1984 self.control_handle.shutdown();
1985 }
1986 self.drop_without_shutdown();
1987 _result
1988 }
1989
1990 pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1992 let _result = self.send_raw(result);
1993 self.drop_without_shutdown();
1994 _result
1995 }
1996
1997 fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
1998 self.control_handle
1999 .inner
2000 .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
2001 result,
2002 self.tx_id,
2003 0xd6cf51cee5039fe,
2004 fidl::encoding::DynamicFlags::empty(),
2005 )
2006 }
2007}
2008
2009#[must_use = "FIDL methods require a response to be sent"]
2010#[derive(Debug)]
2011pub struct MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResponder {
2012 control_handle: std::mem::ManuallyDrop<MetricEventLoggerFactoryControlHandle>,
2013 tx_id: u32,
2014}
2015
2016impl std::ops::Drop for MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResponder {
2020 fn drop(&mut self) {
2021 self.control_handle.shutdown();
2022 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2024 }
2025}
2026
2027impl fidl::endpoints::Responder
2028 for MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResponder
2029{
2030 type ControlHandle = MetricEventLoggerFactoryControlHandle;
2031
2032 fn control_handle(&self) -> &MetricEventLoggerFactoryControlHandle {
2033 &self.control_handle
2034 }
2035
2036 fn drop_without_shutdown(mut self) {
2037 unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2039 std::mem::forget(self);
2041 }
2042}
2043
2044impl MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsResponder {
2045 pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2049 let _result = self.send_raw(result);
2050 if _result.is_err() {
2051 self.control_handle.shutdown();
2052 }
2053 self.drop_without_shutdown();
2054 _result
2055 }
2056
2057 pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2059 let _result = self.send_raw(result);
2060 self.drop_without_shutdown();
2061 _result
2062 }
2063
2064 fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
2065 self.control_handle
2066 .inner
2067 .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
2068 result,
2069 self.tx_id,
2070 0x7f1f745ef7bf48fa,
2071 fidl::encoding::DynamicFlags::empty(),
2072 )
2073 }
2074}
2075
2076mod internal {
2077 use super::*;
2078
2079 impl fidl::encoding::ResourceTypeMarker for MetricEventLoggerFactoryCreateMetricEventLoggerRequest {
2080 type Borrowed<'a> = &'a mut Self;
2081 fn take_or_borrow<'a>(
2082 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2083 ) -> Self::Borrowed<'a> {
2084 value
2085 }
2086 }
2087
2088 unsafe impl fidl::encoding::TypeMarker for MetricEventLoggerFactoryCreateMetricEventLoggerRequest {
2089 type Owned = Self;
2090
2091 #[inline(always)]
2092 fn inline_align(_context: fidl::encoding::Context) -> usize {
2093 8
2094 }
2095
2096 #[inline(always)]
2097 fn inline_size(_context: fidl::encoding::Context) -> usize {
2098 24
2099 }
2100 }
2101
2102 unsafe impl
2103 fidl::encoding::Encode<
2104 MetricEventLoggerFactoryCreateMetricEventLoggerRequest,
2105 fidl::encoding::DefaultFuchsiaResourceDialect,
2106 > for &mut MetricEventLoggerFactoryCreateMetricEventLoggerRequest
2107 {
2108 #[inline]
2109 unsafe fn encode(
2110 self,
2111 encoder: &mut fidl::encoding::Encoder<
2112 '_,
2113 fidl::encoding::DefaultFuchsiaResourceDialect,
2114 >,
2115 offset: usize,
2116 _depth: fidl::encoding::Depth,
2117 ) -> fidl::Result<()> {
2118 encoder.debug_check_bounds::<MetricEventLoggerFactoryCreateMetricEventLoggerRequest>(
2119 offset,
2120 );
2121 fidl::encoding::Encode::<MetricEventLoggerFactoryCreateMetricEventLoggerRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
2123 (
2124 <ProjectSpec as fidl::encoding::ValueTypeMarker>::borrow(&self.project_spec),
2125 <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<MetricEventLoggerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.logger),
2126 ),
2127 encoder, offset, _depth
2128 )
2129 }
2130 }
2131 unsafe impl<
2132 T0: fidl::encoding::Encode<ProjectSpec, fidl::encoding::DefaultFuchsiaResourceDialect>,
2133 T1: fidl::encoding::Encode<
2134 fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<MetricEventLoggerMarker>>,
2135 fidl::encoding::DefaultFuchsiaResourceDialect,
2136 >,
2137 >
2138 fidl::encoding::Encode<
2139 MetricEventLoggerFactoryCreateMetricEventLoggerRequest,
2140 fidl::encoding::DefaultFuchsiaResourceDialect,
2141 > for (T0, T1)
2142 {
2143 #[inline]
2144 unsafe fn encode(
2145 self,
2146 encoder: &mut fidl::encoding::Encoder<
2147 '_,
2148 fidl::encoding::DefaultFuchsiaResourceDialect,
2149 >,
2150 offset: usize,
2151 depth: fidl::encoding::Depth,
2152 ) -> fidl::Result<()> {
2153 encoder.debug_check_bounds::<MetricEventLoggerFactoryCreateMetricEventLoggerRequest>(
2154 offset,
2155 );
2156 unsafe {
2159 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
2160 (ptr as *mut u64).write_unaligned(0);
2161 }
2162 self.0.encode(encoder, offset + 0, depth)?;
2164 self.1.encode(encoder, offset + 16, depth)?;
2165 Ok(())
2166 }
2167 }
2168
2169 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2170 for MetricEventLoggerFactoryCreateMetricEventLoggerRequest
2171 {
2172 #[inline(always)]
2173 fn new_empty() -> Self {
2174 Self {
2175 project_spec: fidl::new_empty!(
2176 ProjectSpec,
2177 fidl::encoding::DefaultFuchsiaResourceDialect
2178 ),
2179 logger: fidl::new_empty!(
2180 fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<MetricEventLoggerMarker>>,
2181 fidl::encoding::DefaultFuchsiaResourceDialect
2182 ),
2183 }
2184 }
2185
2186 #[inline]
2187 unsafe fn decode(
2188 &mut self,
2189 decoder: &mut fidl::encoding::Decoder<
2190 '_,
2191 fidl::encoding::DefaultFuchsiaResourceDialect,
2192 >,
2193 offset: usize,
2194 _depth: fidl::encoding::Depth,
2195 ) -> fidl::Result<()> {
2196 decoder.debug_check_bounds::<Self>(offset);
2197 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
2199 let padval = unsafe { (ptr as *const u64).read_unaligned() };
2200 let mask = 0xffffffff00000000u64;
2201 let maskedval = padval & mask;
2202 if maskedval != 0 {
2203 return Err(fidl::Error::NonZeroPadding {
2204 padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
2205 });
2206 }
2207 fidl::decode!(
2208 ProjectSpec,
2209 fidl::encoding::DefaultFuchsiaResourceDialect,
2210 &mut self.project_spec,
2211 decoder,
2212 offset + 0,
2213 _depth
2214 )?;
2215 fidl::decode!(
2216 fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<MetricEventLoggerMarker>>,
2217 fidl::encoding::DefaultFuchsiaResourceDialect,
2218 &mut self.logger,
2219 decoder,
2220 offset + 16,
2221 _depth
2222 )?;
2223 Ok(())
2224 }
2225 }
2226
2227 impl fidl::encoding::ResourceTypeMarker
2228 for MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest
2229 {
2230 type Borrowed<'a> = &'a mut Self;
2231 fn take_or_borrow<'a>(
2232 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
2233 ) -> Self::Borrowed<'a> {
2234 value
2235 }
2236 }
2237
2238 unsafe impl fidl::encoding::TypeMarker
2239 for MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest
2240 {
2241 type Owned = Self;
2242
2243 #[inline(always)]
2244 fn inline_align(_context: fidl::encoding::Context) -> usize {
2245 8
2246 }
2247
2248 #[inline(always)]
2249 fn inline_size(_context: fidl::encoding::Context) -> usize {
2250 40
2251 }
2252 }
2253
2254 unsafe impl
2255 fidl::encoding::Encode<
2256 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest,
2257 fidl::encoding::DefaultFuchsiaResourceDialect,
2258 > for &mut MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest
2259 {
2260 #[inline]
2261 unsafe fn encode(
2262 self,
2263 encoder: &mut fidl::encoding::Encoder<
2264 '_,
2265 fidl::encoding::DefaultFuchsiaResourceDialect,
2266 >,
2267 offset: usize,
2268 _depth: fidl::encoding::Depth,
2269 ) -> fidl::Result<()> {
2270 encoder.debug_check_bounds::<MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest>(offset);
2271 fidl::encoding::Encode::<MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
2273 (
2274 <ProjectSpec as fidl::encoding::ValueTypeMarker>::borrow(&self.project_spec),
2275 <fidl::encoding::Vector<u32, 100> as fidl::encoding::ValueTypeMarker>::borrow(&self.experiment_ids),
2276 <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<MetricEventLoggerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.logger),
2277 ),
2278 encoder, offset, _depth
2279 )
2280 }
2281 }
2282 unsafe impl<
2283 T0: fidl::encoding::Encode<ProjectSpec, fidl::encoding::DefaultFuchsiaResourceDialect>,
2284 T1: fidl::encoding::Encode<
2285 fidl::encoding::Vector<u32, 100>,
2286 fidl::encoding::DefaultFuchsiaResourceDialect,
2287 >,
2288 T2: fidl::encoding::Encode<
2289 fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<MetricEventLoggerMarker>>,
2290 fidl::encoding::DefaultFuchsiaResourceDialect,
2291 >,
2292 >
2293 fidl::encoding::Encode<
2294 MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest,
2295 fidl::encoding::DefaultFuchsiaResourceDialect,
2296 > for (T0, T1, T2)
2297 {
2298 #[inline]
2299 unsafe fn encode(
2300 self,
2301 encoder: &mut fidl::encoding::Encoder<
2302 '_,
2303 fidl::encoding::DefaultFuchsiaResourceDialect,
2304 >,
2305 offset: usize,
2306 depth: fidl::encoding::Depth,
2307 ) -> fidl::Result<()> {
2308 encoder.debug_check_bounds::<MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest>(offset);
2309 unsafe {
2312 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
2313 (ptr as *mut u64).write_unaligned(0);
2314 }
2315 self.0.encode(encoder, offset + 0, depth)?;
2317 self.1.encode(encoder, offset + 16, depth)?;
2318 self.2.encode(encoder, offset + 32, depth)?;
2319 Ok(())
2320 }
2321 }
2322
2323 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
2324 for MetricEventLoggerFactoryCreateMetricEventLoggerWithExperimentsRequest
2325 {
2326 #[inline(always)]
2327 fn new_empty() -> Self {
2328 Self {
2329 project_spec: fidl::new_empty!(
2330 ProjectSpec,
2331 fidl::encoding::DefaultFuchsiaResourceDialect
2332 ),
2333 experiment_ids: fidl::new_empty!(fidl::encoding::Vector<u32, 100>, fidl::encoding::DefaultFuchsiaResourceDialect),
2334 logger: fidl::new_empty!(
2335 fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<MetricEventLoggerMarker>>,
2336 fidl::encoding::DefaultFuchsiaResourceDialect
2337 ),
2338 }
2339 }
2340
2341 #[inline]
2342 unsafe fn decode(
2343 &mut self,
2344 decoder: &mut fidl::encoding::Decoder<
2345 '_,
2346 fidl::encoding::DefaultFuchsiaResourceDialect,
2347 >,
2348 offset: usize,
2349 _depth: fidl::encoding::Depth,
2350 ) -> fidl::Result<()> {
2351 decoder.debug_check_bounds::<Self>(offset);
2352 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
2354 let padval = unsafe { (ptr as *const u64).read_unaligned() };
2355 let mask = 0xffffffff00000000u64;
2356 let maskedval = padval & mask;
2357 if maskedval != 0 {
2358 return Err(fidl::Error::NonZeroPadding {
2359 padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
2360 });
2361 }
2362 fidl::decode!(
2363 ProjectSpec,
2364 fidl::encoding::DefaultFuchsiaResourceDialect,
2365 &mut self.project_spec,
2366 decoder,
2367 offset + 0,
2368 _depth
2369 )?;
2370 fidl::decode!(fidl::encoding::Vector<u32, 100>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.experiment_ids, decoder, offset + 16, _depth)?;
2371 fidl::decode!(
2372 fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<MetricEventLoggerMarker>>,
2373 fidl::encoding::DefaultFuchsiaResourceDialect,
2374 &mut self.logger,
2375 decoder,
2376 offset + 32,
2377 _depth
2378 )?;
2379 Ok(())
2380 }
2381 }
2382}