mav_sdk/grpc/
mavsdk.rpc.telemetry.rs

1#[derive(Clone, PartialEq, ::prost::Message)]
2pub struct SubscribePositionRequest {}
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct PositionResponse {
5    /// The next position
6    #[prost(message, optional, tag = "1")]
7    pub position: ::core::option::Option<Position>,
8}
9#[derive(Clone, PartialEq, ::prost::Message)]
10pub struct SubscribeHomeRequest {}
11#[derive(Clone, PartialEq, ::prost::Message)]
12pub struct HomeResponse {
13    /// The next home position
14    #[prost(message, optional, tag = "1")]
15    pub home: ::core::option::Option<Position>,
16}
17#[derive(Clone, PartialEq, ::prost::Message)]
18pub struct SubscribeInAirRequest {}
19#[derive(Clone, PartialEq, ::prost::Message)]
20pub struct InAirResponse {
21    /// The next 'in-air' state
22    #[prost(bool, tag = "1")]
23    pub is_in_air: bool,
24}
25#[derive(Clone, PartialEq, ::prost::Message)]
26pub struct SubscribeLandedStateRequest {}
27#[derive(Clone, PartialEq, ::prost::Message)]
28pub struct LandedStateResponse {
29    /// The next 'landed' state
30    #[prost(enumeration = "LandedState", tag = "1")]
31    pub landed_state: i32,
32}
33#[derive(Clone, PartialEq, ::prost::Message)]
34pub struct SubscribeArmedRequest {}
35#[derive(Clone, PartialEq, ::prost::Message)]
36pub struct ArmedResponse {
37    /// The next 'armed' state
38    #[prost(bool, tag = "1")]
39    pub is_armed: bool,
40}
41#[derive(Clone, PartialEq, ::prost::Message)]
42pub struct SubscribeAttitudeQuaternionRequest {}
43#[derive(Clone, PartialEq, ::prost::Message)]
44pub struct AttitudeQuaternionResponse {
45    /// The next attitude (quaternion)
46    #[prost(message, optional, tag = "1")]
47    pub attitude_quaternion: ::core::option::Option<Quaternion>,
48}
49#[derive(Clone, PartialEq, ::prost::Message)]
50pub struct SubscribeAttitudeEulerRequest {}
51#[derive(Clone, PartialEq, ::prost::Message)]
52pub struct AttitudeEulerResponse {
53    /// The next attitude (Euler)
54    #[prost(message, optional, tag = "1")]
55    pub attitude_euler: ::core::option::Option<EulerAngle>,
56}
57#[derive(Clone, PartialEq, ::prost::Message)]
58pub struct SubscribeAttitudeAngularVelocityBodyRequest {}
59#[derive(Clone, PartialEq, ::prost::Message)]
60pub struct AttitudeAngularVelocityBodyResponse {
61    /// The next angular velocity (rad/s)
62    #[prost(message, optional, tag = "1")]
63    pub attitude_angular_velocity_body: ::core::option::Option<AngularVelocityBody>,
64}
65#[derive(Clone, PartialEq, ::prost::Message)]
66pub struct SubscribeCameraAttitudeQuaternionRequest {}
67#[derive(Clone, PartialEq, ::prost::Message)]
68pub struct CameraAttitudeQuaternionResponse {
69    /// The next camera attitude (quaternion)
70    #[prost(message, optional, tag = "1")]
71    pub attitude_quaternion: ::core::option::Option<Quaternion>,
72}
73#[derive(Clone, PartialEq, ::prost::Message)]
74pub struct SubscribeCameraAttitudeEulerRequest {}
75#[derive(Clone, PartialEq, ::prost::Message)]
76pub struct CameraAttitudeEulerResponse {
77    /// The next camera attitude (Euler)
78    #[prost(message, optional, tag = "1")]
79    pub attitude_euler: ::core::option::Option<EulerAngle>,
80}
81#[derive(Clone, PartialEq, ::prost::Message)]
82pub struct SubscribeVelocityNedRequest {}
83#[derive(Clone, PartialEq, ::prost::Message)]
84pub struct VelocityNedResponse {
85    /// The next velocity (NED)
86    #[prost(message, optional, tag = "1")]
87    pub velocity_ned: ::core::option::Option<VelocityNed>,
88}
89#[derive(Clone, PartialEq, ::prost::Message)]
90pub struct SubscribeGpsInfoRequest {}
91#[derive(Clone, PartialEq, ::prost::Message)]
92pub struct GpsInfoResponse {
93    /// The next 'GPS info' state
94    #[prost(message, optional, tag = "1")]
95    pub gps_info: ::core::option::Option<GpsInfo>,
96}
97#[derive(Clone, PartialEq, ::prost::Message)]
98pub struct SubscribeBatteryRequest {}
99#[derive(Clone, PartialEq, ::prost::Message)]
100pub struct BatteryResponse {
101    /// The next 'battery' state
102    #[prost(message, optional, tag = "1")]
103    pub battery: ::core::option::Option<Battery>,
104}
105#[derive(Clone, PartialEq, ::prost::Message)]
106pub struct SubscribeFlightModeRequest {}
107#[derive(Clone, PartialEq, ::prost::Message)]
108pub struct FlightModeResponse {
109    /// The next flight mode
110    #[prost(enumeration = "FlightMode", tag = "1")]
111    pub flight_mode: i32,
112}
113#[derive(Clone, PartialEq, ::prost::Message)]
114pub struct SubscribeHealthRequest {}
115#[derive(Clone, PartialEq, ::prost::Message)]
116pub struct HealthResponse {
117    /// The next 'health' state
118    #[prost(message, optional, tag = "1")]
119    pub health: ::core::option::Option<Health>,
120}
121#[derive(Clone, PartialEq, ::prost::Message)]
122pub struct SubscribeRcStatusRequest {}
123#[derive(Clone, PartialEq, ::prost::Message)]
124pub struct RcStatusResponse {
125    /// The next RC status
126    #[prost(message, optional, tag = "1")]
127    pub rc_status: ::core::option::Option<RcStatus>,
128}
129#[derive(Clone, PartialEq, ::prost::Message)]
130pub struct SubscribeStatusTextRequest {}
131#[derive(Clone, PartialEq, ::prost::Message)]
132pub struct StatusTextResponse {
133    /// The next 'status text'
134    #[prost(message, optional, tag = "1")]
135    pub status_text: ::core::option::Option<StatusText>,
136}
137#[derive(Clone, PartialEq, ::prost::Message)]
138pub struct SubscribeActuatorControlTargetRequest {}
139#[derive(Clone, PartialEq, ::prost::Message)]
140pub struct ActuatorControlTargetResponse {
141    /// The next actuator control target
142    #[prost(message, optional, tag = "1")]
143    pub actuator_control_target: ::core::option::Option<ActuatorControlTarget>,
144}
145#[derive(Clone, PartialEq, ::prost::Message)]
146pub struct SubscribeActuatorOutputStatusRequest {}
147#[derive(Clone, PartialEq, ::prost::Message)]
148pub struct ActuatorOutputStatusResponse {
149    /// The next actuator output status
150    #[prost(message, optional, tag = "1")]
151    pub actuator_output_status: ::core::option::Option<ActuatorOutputStatus>,
152}
153#[derive(Clone, PartialEq, ::prost::Message)]
154pub struct SubscribeOdometryRequest {}
155#[derive(Clone, PartialEq, ::prost::Message)]
156pub struct OdometryResponse {
157    /// The next odometry status
158    #[prost(message, optional, tag = "1")]
159    pub odometry: ::core::option::Option<Odometry>,
160}
161#[derive(Clone, PartialEq, ::prost::Message)]
162pub struct SubscribePositionVelocityNedRequest {}
163#[derive(Clone, PartialEq, ::prost::Message)]
164pub struct PositionVelocityNedResponse {
165    /// The next position and velocity status
166    #[prost(message, optional, tag = "1")]
167    pub position_velocity_ned: ::core::option::Option<PositionVelocityNed>,
168}
169#[derive(Clone, PartialEq, ::prost::Message)]
170pub struct SubscribeGroundTruthRequest {}
171#[derive(Clone, PartialEq, ::prost::Message)]
172pub struct GroundTruthResponse {
173    /// Ground truth position information available in simulation
174    #[prost(message, optional, tag = "1")]
175    pub ground_truth: ::core::option::Option<GroundTruth>,
176}
177#[derive(Clone, PartialEq, ::prost::Message)]
178pub struct SubscribeFixedwingMetricsRequest {}
179#[derive(Clone, PartialEq, ::prost::Message)]
180pub struct FixedwingMetricsResponse {
181    /// The next fixedwing metrics
182    #[prost(message, optional, tag = "1")]
183    pub fixedwing_metrics: ::core::option::Option<FixedwingMetrics>,
184}
185#[derive(Clone, PartialEq, ::prost::Message)]
186pub struct SubscribeImuRequest {}
187#[derive(Clone, PartialEq, ::prost::Message)]
188pub struct ImuResponse {
189    /// The next IMU status
190    #[prost(message, optional, tag = "1")]
191    pub imu: ::core::option::Option<Imu>,
192}
193#[derive(Clone, PartialEq, ::prost::Message)]
194pub struct SubscribeHealthAllOkRequest {}
195#[derive(Clone, PartialEq, ::prost::Message)]
196pub struct HealthAllOkResponse {
197    /// The next 'health all ok' status
198    #[prost(bool, tag = "1")]
199    pub is_health_all_ok: bool,
200}
201#[derive(Clone, PartialEq, ::prost::Message)]
202pub struct SubscribeUnixEpochTimeRequest {}
203#[derive(Clone, PartialEq, ::prost::Message)]
204pub struct UnixEpochTimeResponse {
205    /// The next 'unix epoch time' status
206    #[prost(uint64, tag = "1")]
207    pub time_us: u64,
208}
209#[derive(Clone, PartialEq, ::prost::Message)]
210pub struct SubscribeDistanceSensorRequest {}
211#[derive(Clone, PartialEq, ::prost::Message)]
212pub struct DistanceSensorResponse {
213    /// The next Distance Sensor status
214    #[prost(message, optional, tag = "1")]
215    pub distance_sensor: ::core::option::Option<DistanceSensor>,
216}
217#[derive(Clone, PartialEq, ::prost::Message)]
218pub struct SetRatePositionRequest {
219    /// The requested rate (in Hertz)
220    #[prost(double, tag = "1")]
221    pub rate_hz: f64,
222}
223#[derive(Clone, PartialEq, ::prost::Message)]
224pub struct SetRatePositionResponse {
225    #[prost(message, optional, tag = "1")]
226    pub telemetry_result: ::core::option::Option<TelemetryResult>,
227}
228#[derive(Clone, PartialEq, ::prost::Message)]
229pub struct SetRateHomeRequest {
230    /// The requested rate (in Hertz)
231    #[prost(double, tag = "1")]
232    pub rate_hz: f64,
233}
234#[derive(Clone, PartialEq, ::prost::Message)]
235pub struct SetRateHomeResponse {
236    #[prost(message, optional, tag = "1")]
237    pub telemetry_result: ::core::option::Option<TelemetryResult>,
238}
239#[derive(Clone, PartialEq, ::prost::Message)]
240pub struct SetRateInAirRequest {
241    /// The requested rate (in Hertz)
242    #[prost(double, tag = "1")]
243    pub rate_hz: f64,
244}
245#[derive(Clone, PartialEq, ::prost::Message)]
246pub struct SetRateInAirResponse {
247    #[prost(message, optional, tag = "1")]
248    pub telemetry_result: ::core::option::Option<TelemetryResult>,
249}
250#[derive(Clone, PartialEq, ::prost::Message)]
251pub struct SetRateLandedStateRequest {
252    /// The requested rate (in Hertz)
253    #[prost(double, tag = "1")]
254    pub rate_hz: f64,
255}
256#[derive(Clone, PartialEq, ::prost::Message)]
257pub struct SetRateLandedStateResponse {
258    #[prost(message, optional, tag = "1")]
259    pub telemetry_result: ::core::option::Option<TelemetryResult>,
260}
261#[derive(Clone, PartialEq, ::prost::Message)]
262pub struct SetRateAttitudeRequest {
263    /// The requested rate (in Hertz)
264    #[prost(double, tag = "1")]
265    pub rate_hz: f64,
266}
267#[derive(Clone, PartialEq, ::prost::Message)]
268pub struct SetRateAttitudeResponse {
269    #[prost(message, optional, tag = "1")]
270    pub telemetry_result: ::core::option::Option<TelemetryResult>,
271}
272#[derive(Clone, PartialEq, ::prost::Message)]
273pub struct SetRateAttitudeAngularVelocityBodyRequest {
274    /// The requested rate (in Hertz)
275    #[prost(double, tag = "1")]
276    pub rate_hz: f64,
277}
278#[derive(Clone, PartialEq, ::prost::Message)]
279pub struct SetRateAttitudeAngularVelocityBodyResponse {
280    #[prost(message, optional, tag = "1")]
281    pub telemetry_result: ::core::option::Option<TelemetryResult>,
282}
283#[derive(Clone, PartialEq, ::prost::Message)]
284pub struct SetRateCameraAttitudeQuaternionRequest {
285    /// The requested rate (in Hertz)
286    #[prost(double, tag = "1")]
287    pub rate_hz: f64,
288}
289#[derive(Clone, PartialEq, ::prost::Message)]
290pub struct SetRateCameraAttitudeQuaternionResponse {
291    #[prost(message, optional, tag = "1")]
292    pub telemetry_result: ::core::option::Option<TelemetryResult>,
293}
294#[derive(Clone, PartialEq, ::prost::Message)]
295pub struct SetRateCameraAttitudeRequest {
296    /// The requested rate (in Hertz)
297    #[prost(double, tag = "1")]
298    pub rate_hz: f64,
299}
300#[derive(Clone, PartialEq, ::prost::Message)]
301pub struct SetRateCameraAttitudeResponse {
302    #[prost(message, optional, tag = "1")]
303    pub telemetry_result: ::core::option::Option<TelemetryResult>,
304}
305#[derive(Clone, PartialEq, ::prost::Message)]
306pub struct SetRateVelocityNedRequest {
307    /// The requested rate (in Hertz)
308    #[prost(double, tag = "1")]
309    pub rate_hz: f64,
310}
311#[derive(Clone, PartialEq, ::prost::Message)]
312pub struct SetRateVelocityNedResponse {
313    #[prost(message, optional, tag = "1")]
314    pub telemetry_result: ::core::option::Option<TelemetryResult>,
315}
316#[derive(Clone, PartialEq, ::prost::Message)]
317pub struct SetRateGpsInfoRequest {
318    /// The requested rate (in Hertz)
319    #[prost(double, tag = "1")]
320    pub rate_hz: f64,
321}
322#[derive(Clone, PartialEq, ::prost::Message)]
323pub struct SetRateGpsInfoResponse {
324    #[prost(message, optional, tag = "1")]
325    pub telemetry_result: ::core::option::Option<TelemetryResult>,
326}
327#[derive(Clone, PartialEq, ::prost::Message)]
328pub struct SetRateBatteryRequest {
329    /// The requested rate (in Hertz)
330    #[prost(double, tag = "1")]
331    pub rate_hz: f64,
332}
333#[derive(Clone, PartialEq, ::prost::Message)]
334pub struct SetRateBatteryResponse {
335    #[prost(message, optional, tag = "1")]
336    pub telemetry_result: ::core::option::Option<TelemetryResult>,
337}
338#[derive(Clone, PartialEq, ::prost::Message)]
339pub struct SetRateRcStatusRequest {
340    /// The requested rate (in Hertz)
341    #[prost(double, tag = "1")]
342    pub rate_hz: f64,
343}
344#[derive(Clone, PartialEq, ::prost::Message)]
345pub struct SetRateRcStatusResponse {
346    #[prost(message, optional, tag = "1")]
347    pub telemetry_result: ::core::option::Option<TelemetryResult>,
348}
349#[derive(Clone, PartialEq, ::prost::Message)]
350pub struct SetRateActuatorControlTargetRequest {
351    /// The requested rate (in Hertz)
352    #[prost(double, tag = "1")]
353    pub rate_hz: f64,
354}
355#[derive(Clone, PartialEq, ::prost::Message)]
356pub struct SetRateActuatorControlTargetResponse {
357    #[prost(message, optional, tag = "1")]
358    pub telemetry_result: ::core::option::Option<TelemetryResult>,
359}
360#[derive(Clone, PartialEq, ::prost::Message)]
361pub struct SetRateActuatorOutputStatusRequest {
362    /// The requested rate (in Hertz)
363    #[prost(double, tag = "1")]
364    pub rate_hz: f64,
365}
366#[derive(Clone, PartialEq, ::prost::Message)]
367pub struct SetRateActuatorOutputStatusResponse {
368    #[prost(message, optional, tag = "1")]
369    pub telemetry_result: ::core::option::Option<TelemetryResult>,
370}
371#[derive(Clone, PartialEq, ::prost::Message)]
372pub struct SetRateOdometryRequest {
373    /// The requested rate (in Hertz)
374    #[prost(double, tag = "1")]
375    pub rate_hz: f64,
376}
377#[derive(Clone, PartialEq, ::prost::Message)]
378pub struct SetRateOdometryResponse {
379    #[prost(message, optional, tag = "1")]
380    pub telemetry_result: ::core::option::Option<TelemetryResult>,
381}
382#[derive(Clone, PartialEq, ::prost::Message)]
383pub struct SetRatePositionVelocityNedRequest {
384    /// The requested rate (in Hertz)
385    #[prost(double, tag = "1")]
386    pub rate_hz: f64,
387}
388#[derive(Clone, PartialEq, ::prost::Message)]
389pub struct SetRatePositionVelocityNedResponse {
390    #[prost(message, optional, tag = "1")]
391    pub telemetry_result: ::core::option::Option<TelemetryResult>,
392}
393#[derive(Clone, PartialEq, ::prost::Message)]
394pub struct SetRateGroundTruthRequest {
395    /// The requested rate (in Hertz)
396    #[prost(double, tag = "1")]
397    pub rate_hz: f64,
398}
399#[derive(Clone, PartialEq, ::prost::Message)]
400pub struct SetRateGroundTruthResponse {
401    #[prost(message, optional, tag = "1")]
402    pub telemetry_result: ::core::option::Option<TelemetryResult>,
403}
404#[derive(Clone, PartialEq, ::prost::Message)]
405pub struct SetRateFixedwingMetricsRequest {
406    /// The requested rate (in Hertz)
407    #[prost(double, tag = "1")]
408    pub rate_hz: f64,
409}
410#[derive(Clone, PartialEq, ::prost::Message)]
411pub struct SetRateFixedwingMetricsResponse {
412    #[prost(message, optional, tag = "1")]
413    pub telemetry_result: ::core::option::Option<TelemetryResult>,
414}
415#[derive(Clone, PartialEq, ::prost::Message)]
416pub struct SetRateImuRequest {
417    /// The requested rate (in Hertz)
418    #[prost(double, tag = "1")]
419    pub rate_hz: f64,
420}
421#[derive(Clone, PartialEq, ::prost::Message)]
422pub struct SetRateImuResponse {
423    #[prost(message, optional, tag = "1")]
424    pub telemetry_result: ::core::option::Option<TelemetryResult>,
425}
426#[derive(Clone, PartialEq, ::prost::Message)]
427pub struct SetRateUnixEpochTimeRequest {
428    /// The requested rate (in Hertz)
429    #[prost(double, tag = "1")]
430    pub rate_hz: f64,
431}
432#[derive(Clone, PartialEq, ::prost::Message)]
433pub struct SetRateUnixEpochTimeResponse {
434    #[prost(message, optional, tag = "1")]
435    pub telemetry_result: ::core::option::Option<TelemetryResult>,
436}
437#[derive(Clone, PartialEq, ::prost::Message)]
438pub struct SetRateDistanceSensorRequest {
439    /// The requested rate (in Hertz)
440    #[prost(double, tag = "1")]
441    pub rate_hz: f64,
442}
443#[derive(Clone, PartialEq, ::prost::Message)]
444pub struct SetRateDistanceSensorResponse {
445    #[prost(message, optional, tag = "1")]
446    pub telemetry_result: ::core::option::Option<TelemetryResult>,
447}
448#[derive(Clone, PartialEq, ::prost::Message)]
449pub struct GetGpsGlobalOriginRequest {}
450#[derive(Clone, PartialEq, ::prost::Message)]
451pub struct GetGpsGlobalOriginResponse {
452    #[prost(message, optional, tag = "1")]
453    pub telemetry_result: ::core::option::Option<TelemetryResult>,
454    #[prost(message, optional, tag = "2")]
455    pub gps_global_origin: ::core::option::Option<GpsGlobalOrigin>,
456}
457/// Position type in global coordinates.
458#[derive(Clone, PartialEq, ::prost::Message)]
459pub struct Position {
460    /// Latitude in degrees (range: -90 to +90)
461    #[prost(double, tag = "1")]
462    pub latitude_deg: f64,
463    /// Longitude in degrees (range: -180 to +180)
464    #[prost(double, tag = "2")]
465    pub longitude_deg: f64,
466    /// Altitude AMSL (above mean sea level) in metres
467    #[prost(float, tag = "3")]
468    pub absolute_altitude_m: f32,
469    /// Altitude relative to takeoff altitude in metres
470    #[prost(float, tag = "4")]
471    pub relative_altitude_m: f32,
472}
473///
474/// Quaternion type.
475///
476/// All rotations and axis systems follow the right-hand rule.
477/// The Hamilton quaternion product definition is used.
478/// A zero-rotation quaternion is represented by (1,0,0,0).
479/// The quaternion could also be written as w + xi + yj + zk.
480///
481/// For more info see: https://en.wikipedia.org/wiki/Quaternion
482#[derive(Clone, PartialEq, ::prost::Message)]
483pub struct Quaternion {
484    /// Quaternion entry 0, also denoted as a
485    #[prost(float, tag = "1")]
486    pub w: f32,
487    /// Quaternion entry 1, also denoted as b
488    #[prost(float, tag = "2")]
489    pub x: f32,
490    /// Quaternion entry 2, also denoted as c
491    #[prost(float, tag = "3")]
492    pub y: f32,
493    /// Quaternion entry 3, also denoted as d
494    #[prost(float, tag = "4")]
495    pub z: f32,
496}
497///
498/// Euler angle type.
499///
500/// All rotations and axis systems follow the right-hand rule.
501/// The Euler angles follow the convention of a 3-2-1 intrinsic Tait-Bryan rotation sequence.
502///
503/// For more info see https://en.wikipedia.org/wiki/Euler_angles
504#[derive(Clone, PartialEq, ::prost::Message)]
505pub struct EulerAngle {
506    /// Roll angle in degrees, positive is banking to the right
507    #[prost(float, tag = "1")]
508    pub roll_deg: f32,
509    /// Pitch angle in degrees, positive is pitching nose up
510    #[prost(float, tag = "2")]
511    pub pitch_deg: f32,
512    /// Yaw angle in degrees, positive is clock-wise seen from above
513    #[prost(float, tag = "3")]
514    pub yaw_deg: f32,
515}
516/// Angular velocity type.
517#[derive(Clone, PartialEq, ::prost::Message)]
518pub struct AngularVelocityBody {
519    /// Roll angular velocity
520    #[prost(float, tag = "1")]
521    pub roll_rad_s: f32,
522    /// Pitch angular velocity
523    #[prost(float, tag = "2")]
524    pub pitch_rad_s: f32,
525    /// Yaw angular velocity
526    #[prost(float, tag = "3")]
527    pub yaw_rad_s: f32,
528}
529/// GPS information type.
530#[derive(Clone, PartialEq, ::prost::Message)]
531pub struct GpsInfo {
532    /// Number of visible satellites in use
533    #[prost(int32, tag = "1")]
534    pub num_satellites: i32,
535    /// Fix type
536    #[prost(enumeration = "FixType", tag = "2")]
537    pub fix_type: i32,
538}
539/// Battery type.
540#[derive(Clone, PartialEq, ::prost::Message)]
541pub struct Battery {
542    /// Voltage in volts
543    #[prost(float, tag = "1")]
544    pub voltage_v: f32,
545    /// Estimated battery remaining (range: 0.0 to 1.0)
546    #[prost(float, tag = "2")]
547    pub remaining_percent: f32,
548}
549/// Health type.
550#[derive(Clone, PartialEq, ::prost::Message)]
551pub struct Health {
552    /// True if the gyrometer is calibrated
553    #[prost(bool, tag = "1")]
554    pub is_gyrometer_calibration_ok: bool,
555    /// True if the accelerometer is calibrated
556    #[prost(bool, tag = "2")]
557    pub is_accelerometer_calibration_ok: bool,
558    /// True if the magnetometer is calibrated
559    #[prost(bool, tag = "3")]
560    pub is_magnetometer_calibration_ok: bool,
561    /// True if the vehicle has a valid level calibration
562    #[prost(bool, tag = "4")]
563    pub is_level_calibration_ok: bool,
564    /// True if the local position estimate is good enough to fly in 'position control' mode
565    #[prost(bool, tag = "5")]
566    pub is_local_position_ok: bool,
567    /// True if the global position estimate is good enough to fly in 'position control' mode
568    #[prost(bool, tag = "6")]
569    pub is_global_position_ok: bool,
570    /// True if the home position has been initialized properly
571    #[prost(bool, tag = "7")]
572    pub is_home_position_ok: bool,
573}
574/// Remote control status type.
575#[derive(Clone, PartialEq, ::prost::Message)]
576pub struct RcStatus {
577    /// True if an RC signal has been available once
578    #[prost(bool, tag = "1")]
579    pub was_available_once: bool,
580    /// True if the RC signal is available now
581    #[prost(bool, tag = "2")]
582    pub is_available: bool,
583    /// Signal strength (range: 0 to 100)
584    #[prost(float, tag = "3")]
585    pub signal_strength_percent: f32,
586}
587/// StatusText information type.
588#[derive(Clone, PartialEq, ::prost::Message)]
589pub struct StatusText {
590    /// Message type
591    #[prost(enumeration = "StatusTextType", tag = "1")]
592    pub r#type: i32,
593    /// MAVLink status message
594    #[prost(string, tag = "2")]
595    pub text: ::prost::alloc::string::String,
596}
597/// Actuator control target type.
598#[derive(Clone, PartialEq, ::prost::Message)]
599pub struct ActuatorControlTarget {
600    /// An actuator control group is e.g. 'attitude' for the core flight controls, or 'gimbal' for a payload.
601    #[prost(int32, tag = "1")]
602    pub group: i32,
603    /// Controls normed from -1 to 1, where 0 is neutral position.
604    #[prost(float, repeated, tag = "2")]
605    pub controls: ::prost::alloc::vec::Vec<f32>,
606}
607/// Actuator output status type.
608#[derive(Clone, PartialEq, ::prost::Message)]
609pub struct ActuatorOutputStatus {
610    /// Active outputs
611    #[prost(uint32, tag = "1")]
612    pub active: u32,
613    /// Servo/motor output values
614    #[prost(float, repeated, tag = "2")]
615    pub actuator: ::prost::alloc::vec::Vec<f32>,
616}
617///
618/// Covariance type.
619///
620/// Row-major representation of a 6x6 cross-covariance matrix
621/// upper right triangle.
622/// Set first to NaN if unknown.
623#[derive(Clone, PartialEq, ::prost::Message)]
624pub struct Covariance {
625    /// Representation of a covariance matrix.
626    #[prost(float, repeated, tag = "1")]
627    pub covariance_matrix: ::prost::alloc::vec::Vec<f32>,
628}
629/// Velocity type, represented in the Body (X Y Z) frame and in metres/second.
630#[derive(Clone, PartialEq, ::prost::Message)]
631pub struct VelocityBody {
632    /// Velocity in X in metres/second
633    #[prost(float, tag = "1")]
634    pub x_m_s: f32,
635    /// Velocity in Y in metres/second
636    #[prost(float, tag = "2")]
637    pub y_m_s: f32,
638    /// Velocity in Z in metres/second
639    #[prost(float, tag = "3")]
640    pub z_m_s: f32,
641}
642/// Position type, represented in the Body (X Y Z) frame
643#[derive(Clone, PartialEq, ::prost::Message)]
644pub struct PositionBody {
645    /// X Position in metres.
646    #[prost(float, tag = "1")]
647    pub x_m: f32,
648    /// Y Position in metres.
649    #[prost(float, tag = "2")]
650    pub y_m: f32,
651    /// Z Position in metres.
652    #[prost(float, tag = "3")]
653    pub z_m: f32,
654}
655/// Odometry message type.
656#[derive(Clone, PartialEq, ::prost::Message)]
657pub struct Odometry {
658    /// Timestamp (0 to use Backend timestamp).
659    #[prost(uint64, tag = "1")]
660    pub time_usec: u64,
661    /// Coordinate frame of reference for the pose data.
662    #[prost(enumeration = "odometry::MavFrame", tag = "2")]
663    pub frame_id: i32,
664    /// Coordinate frame of reference for the velocity in free space (twist) data.
665    #[prost(enumeration = "odometry::MavFrame", tag = "3")]
666    pub child_frame_id: i32,
667    /// Position.
668    #[prost(message, optional, tag = "4")]
669    pub position_body: ::core::option::Option<PositionBody>,
670    /// Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation).
671    #[prost(message, optional, tag = "5")]
672    pub q: ::core::option::Option<Quaternion>,
673    /// Linear velocity (m/s).
674    #[prost(message, optional, tag = "6")]
675    pub velocity_body: ::core::option::Option<VelocityBody>,
676    /// Angular velocity (rad/s).
677    #[prost(message, optional, tag = "7")]
678    pub angular_velocity_body: ::core::option::Option<AngularVelocityBody>,
679    /// Pose cross-covariance matrix.
680    #[prost(message, optional, tag = "8")]
681    pub pose_covariance: ::core::option::Option<Covariance>,
682    /// Velocity cross-covariance matrix.
683    #[prost(message, optional, tag = "9")]
684    pub velocity_covariance: ::core::option::Option<Covariance>,
685}
686/// Nested message and enum types in `Odometry`.
687pub mod odometry {
688    /// Mavlink frame id
689    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
690    #[repr(i32)]
691    pub enum MavFrame {
692        /// Frame is undefined.
693        Undef = 0,
694        /// Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.
695        BodyNed = 8,
696        /// Odometry local coordinate frame of data given by a vision estimation system, Z-down (x: north, y: east, z: down).
697        VisionNed = 16,
698        /// Odometry local coordinate frame of data given by an estimator running onboard the vehicle, Z-down (x: north, y: east, z: down).
699        EstimNed = 18,
700    }
701}
702/// DistanceSensor message type.
703#[derive(Clone, PartialEq, ::prost::Message)]
704pub struct DistanceSensor {
705    /// Minimum distance the sensor can measure, NaN if unknown.
706    #[prost(float, tag = "1")]
707    pub minimum_distance_m: f32,
708    /// Maximum distance the sensor can measure, NaN if unknown.
709    #[prost(float, tag = "2")]
710    pub maximum_distance_m: f32,
711    /// Current distance reading, NaN if unknown.
712    #[prost(float, tag = "3")]
713    pub current_distance_m: f32,
714}
715/// PositionNed message type.
716#[derive(Clone, PartialEq, ::prost::Message)]
717pub struct PositionNed {
718    /// Position along north direction in metres
719    #[prost(float, tag = "1")]
720    pub north_m: f32,
721    /// Position along east direction in metres
722    #[prost(float, tag = "2")]
723    pub east_m: f32,
724    /// Position along down direction in metres
725    #[prost(float, tag = "3")]
726    pub down_m: f32,
727}
728/// VelocityNed message type.
729#[derive(Clone, PartialEq, ::prost::Message)]
730pub struct VelocityNed {
731    /// Velocity along north direction in metres per second
732    #[prost(float, tag = "1")]
733    pub north_m_s: f32,
734    /// Velocity along east direction in metres per second
735    #[prost(float, tag = "2")]
736    pub east_m_s: f32,
737    /// Velocity along down direction in metres per second
738    #[prost(float, tag = "3")]
739    pub down_m_s: f32,
740}
741/// PositionVelocityNed message type.
742#[derive(Clone, PartialEq, ::prost::Message)]
743pub struct PositionVelocityNed {
744    /// Position (NED)
745    #[prost(message, optional, tag = "1")]
746    pub position: ::core::option::Option<PositionNed>,
747    /// Velocity (NED)
748    #[prost(message, optional, tag = "2")]
749    pub velocity: ::core::option::Option<VelocityNed>,
750}
751/// GroundTruth message type.
752#[derive(Clone, PartialEq, ::prost::Message)]
753pub struct GroundTruth {
754    /// Latitude in degrees (range: -90 to +90)
755    #[prost(double, tag = "1")]
756    pub latitude_deg: f64,
757    /// Longitude in degrees (range: -180 to 180)
758    #[prost(double, tag = "2")]
759    pub longitude_deg: f64,
760    /// Altitude AMSL (above mean sea level) in metres
761    #[prost(float, tag = "3")]
762    pub absolute_altitude_m: f32,
763}
764/// FixedwingMetrics message type.
765#[derive(Clone, PartialEq, ::prost::Message)]
766pub struct FixedwingMetrics {
767    /// Current indicated airspeed (IAS) in metres per second
768    #[prost(float, tag = "1")]
769    pub airspeed_m_s: f32,
770    /// Current throttle setting (0 to 100)
771    #[prost(float, tag = "2")]
772    pub throttle_percentage: f32,
773    /// Current climb rate in metres per second
774    #[prost(float, tag = "3")]
775    pub climb_rate_m_s: f32,
776}
777/// AccelerationFrd message type.
778#[derive(Clone, PartialEq, ::prost::Message)]
779pub struct AccelerationFrd {
780    /// Acceleration in forward direction in metres per second^2
781    #[prost(float, tag = "1")]
782    pub forward_m_s2: f32,
783    /// Acceleration in right direction in metres per second^2
784    #[prost(float, tag = "2")]
785    pub right_m_s2: f32,
786    /// Acceleration in down direction in metres per second^2
787    #[prost(float, tag = "3")]
788    pub down_m_s2: f32,
789}
790/// AngularVelocityFrd message type.
791#[derive(Clone, PartialEq, ::prost::Message)]
792pub struct AngularVelocityFrd {
793    /// Angular velocity in forward direction in radians per second
794    #[prost(float, tag = "1")]
795    pub forward_rad_s: f32,
796    /// Angular velocity in right direction in radians per second
797    #[prost(float, tag = "2")]
798    pub right_rad_s: f32,
799    /// Angular velocity in Down direction in radians per second
800    #[prost(float, tag = "3")]
801    pub down_rad_s: f32,
802}
803/// MagneticFieldFrd message type.
804#[derive(Clone, PartialEq, ::prost::Message)]
805pub struct MagneticFieldFrd {
806    /// Magnetic field in forward direction measured in Gauss
807    #[prost(float, tag = "1")]
808    pub forward_gauss: f32,
809    /// Magnetic field in East direction measured in Gauss
810    #[prost(float, tag = "2")]
811    pub right_gauss: f32,
812    /// Magnetic field in Down direction measured in Gauss
813    #[prost(float, tag = "3")]
814    pub down_gauss: f32,
815}
816/// Imu message type.
817#[derive(Clone, PartialEq, ::prost::Message)]
818pub struct Imu {
819    /// Acceleration
820    #[prost(message, optional, tag = "1")]
821    pub acceleration_frd: ::core::option::Option<AccelerationFrd>,
822    /// Angular velocity
823    #[prost(message, optional, tag = "2")]
824    pub angular_velocity_frd: ::core::option::Option<AngularVelocityFrd>,
825    /// Magnetic field
826    #[prost(message, optional, tag = "3")]
827    pub magnetic_field_frd: ::core::option::Option<MagneticFieldFrd>,
828    /// Temperature
829    #[prost(float, tag = "4")]
830    pub temperature_degc: f32,
831}
832/// Gps global origin type.
833#[derive(Clone, PartialEq, ::prost::Message)]
834pub struct GpsGlobalOrigin {
835    /// Latitude of the origin
836    #[prost(double, tag = "1")]
837    pub latitude_deg: f64,
838    /// Longitude of the origin
839    #[prost(double, tag = "2")]
840    pub longitude_deg: f64,
841    /// Altitude AMSL (above mean sea level) in metres
842    #[prost(float, tag = "3")]
843    pub altitude_m: f32,
844}
845/// Result type.
846#[derive(Clone, PartialEq, ::prost::Message)]
847pub struct TelemetryResult {
848    /// Result enum value
849    #[prost(enumeration = "telemetry_result::Result", tag = "1")]
850    pub result: i32,
851    /// Human-readable English string describing the result
852    #[prost(string, tag = "2")]
853    pub result_str: ::prost::alloc::string::String,
854}
855/// Nested message and enum types in `TelemetryResult`.
856pub mod telemetry_result {
857    /// Possible results returned for telemetry requests.
858    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
859    #[repr(i32)]
860    pub enum Result {
861        /// Unknown result
862        Unknown = 0,
863        /// Success: the telemetry command was accepted by the vehicle
864        Success = 1,
865        /// No system connected
866        NoSystem = 2,
867        /// Connection error
868        ConnectionError = 3,
869        /// Vehicle is busy
870        Busy = 4,
871        /// Command refused by vehicle
872        CommandDenied = 5,
873        /// Request timed out
874        Timeout = 6,
875    }
876}
877/// GPS fix type.
878#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
879#[repr(i32)]
880pub enum FixType {
881    /// No GPS connected
882    NoGps = 0,
883    /// No position information, GPS is connected
884    NoFix = 1,
885    /// 2D position
886    Fix2d = 2,
887    /// 3D position
888    Fix3d = 3,
889    /// DGPS/SBAS aided 3D position
890    FixDgps = 4,
891    /// RTK float, 3D position
892    RtkFloat = 5,
893    /// RTK Fixed, 3D position
894    RtkFixed = 6,
895}
896///
897/// Flight modes.
898///
899/// For more information about flight modes, check out
900/// https://docs.px4.io/master/en/config/flight_mode.html.
901#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
902#[repr(i32)]
903pub enum FlightMode {
904    /// Mode not known
905    Unknown = 0,
906    /// Armed and ready to take off
907    Ready = 1,
908    /// Taking off
909    Takeoff = 2,
910    /// Holding (hovering in place (or circling for fixed-wing vehicles)
911    Hold = 3,
912    /// In mission
913    Mission = 4,
914    /// Returning to launch position (then landing)
915    ReturnToLaunch = 5,
916    /// Landing
917    Land = 6,
918    /// In 'offboard' mode
919    Offboard = 7,
920    /// In 'follow-me' mode
921    FollowMe = 8,
922    /// In 'Manual' mode
923    Manual = 9,
924    /// In 'Altitude Control' mode
925    Altctl = 10,
926    /// In 'Position Control' mode
927    Posctl = 11,
928    /// In 'Acro' mode
929    Acro = 12,
930    /// In 'Stabilize' mode
931    Stabilized = 13,
932    /// In 'Rattitude' mode
933    Rattitude = 14,
934}
935/// Status types.
936#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
937#[repr(i32)]
938pub enum StatusTextType {
939    /// Debug
940    Debug = 0,
941    /// Information
942    Info = 1,
943    /// Notice
944    Notice = 2,
945    /// Warning
946    Warning = 3,
947    /// Error
948    Error = 4,
949    /// Critical
950    Critical = 5,
951    /// Alert
952    Alert = 6,
953    /// Emergency
954    Emergency = 7,
955}
956/// Landed State enumeration.
957#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
958#[repr(i32)]
959pub enum LandedState {
960    /// Landed state is unknown
961    Unknown = 0,
962    /// The vehicle is on the ground
963    OnGround = 1,
964    /// The vehicle is in the air
965    InAir = 2,
966    /// The vehicle is taking off
967    TakingOff = 3,
968    /// The vehicle is landing
969    Landing = 4,
970}
971#[doc = r" Generated client implementations."]
972pub mod telemetry_service_client {
973    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
974    use tonic::codegen::*;
975    #[doc = ""]
976    #[doc = " Allow users to get vehicle telemetry and state information"]
977    #[doc = " (e.g. battery, GPS, RC connection, flight mode etc.) and set telemetry update rates."]
978    #[derive(Debug, Clone)]
979    pub struct TelemetryServiceClient<T> {
980        inner: tonic::client::Grpc<T>,
981    }
982    impl TelemetryServiceClient<tonic::transport::Channel> {
983        #[doc = r" Attempt to create a new client by connecting to a given endpoint."]
984        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
985        where
986            D: std::convert::TryInto<tonic::transport::Endpoint>,
987            D::Error: Into<StdError>,
988        {
989            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
990            Ok(Self::new(conn))
991        }
992    }
993    impl<T> TelemetryServiceClient<T>
994    where
995        T: tonic::client::GrpcService<tonic::body::BoxBody>,
996        T::ResponseBody: Body + Send + Sync + 'static,
997        T::Error: Into<StdError>,
998        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
999    {
1000        pub fn new(inner: T) -> Self {
1001            let inner = tonic::client::Grpc::new(inner);
1002            Self { inner }
1003        }
1004        pub fn with_interceptor<F>(
1005            inner: T,
1006            interceptor: F,
1007        ) -> TelemetryServiceClient<InterceptedService<T, F>>
1008        where
1009            F: tonic::service::Interceptor,
1010            T: tonic::codegen::Service<
1011                http::Request<tonic::body::BoxBody>,
1012                Response = http::Response<
1013                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
1014                >,
1015            >,
1016            <T as tonic::codegen::Service<http::Request<tonic::body::BoxBody>>>::Error:
1017                Into<StdError> + Send + Sync,
1018        {
1019            TelemetryServiceClient::new(InterceptedService::new(inner, interceptor))
1020        }
1021        #[doc = r" Compress requests with `gzip`."]
1022        #[doc = r""]
1023        #[doc = r" This requires the server to support it otherwise it might respond with an"]
1024        #[doc = r" error."]
1025        pub fn send_gzip(mut self) -> Self {
1026            self.inner = self.inner.send_gzip();
1027            self
1028        }
1029        #[doc = r" Enable decompressing responses with `gzip`."]
1030        pub fn accept_gzip(mut self) -> Self {
1031            self.inner = self.inner.accept_gzip();
1032            self
1033        }
1034        #[doc = " Subscribe to 'position' updates."]
1035        pub async fn subscribe_position(
1036            &mut self,
1037            request: impl tonic::IntoRequest<super::SubscribePositionRequest>,
1038        ) -> Result<tonic::Response<tonic::codec::Streaming<super::PositionResponse>>, tonic::Status>
1039        {
1040            self.inner.ready().await.map_err(|e| {
1041                tonic::Status::new(
1042                    tonic::Code::Unknown,
1043                    format!("Service was not ready: {}", e.into()),
1044                )
1045            })?;
1046            let codec = tonic::codec::ProstCodec::default();
1047            let path = http::uri::PathAndQuery::from_static(
1048                "/mavsdk.rpc.telemetry.TelemetryService/SubscribePosition",
1049            );
1050            self.inner
1051                .server_streaming(request.into_request(), path, codec)
1052                .await
1053        }
1054        #[doc = " Subscribe to 'home position' updates."]
1055        pub async fn subscribe_home(
1056            &mut self,
1057            request: impl tonic::IntoRequest<super::SubscribeHomeRequest>,
1058        ) -> Result<tonic::Response<tonic::codec::Streaming<super::HomeResponse>>, tonic::Status>
1059        {
1060            self.inner.ready().await.map_err(|e| {
1061                tonic::Status::new(
1062                    tonic::Code::Unknown,
1063                    format!("Service was not ready: {}", e.into()),
1064                )
1065            })?;
1066            let codec = tonic::codec::ProstCodec::default();
1067            let path = http::uri::PathAndQuery::from_static(
1068                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeHome",
1069            );
1070            self.inner
1071                .server_streaming(request.into_request(), path, codec)
1072                .await
1073        }
1074        #[doc = " Subscribe to in-air updates."]
1075        pub async fn subscribe_in_air(
1076            &mut self,
1077            request: impl tonic::IntoRequest<super::SubscribeInAirRequest>,
1078        ) -> Result<tonic::Response<tonic::codec::Streaming<super::InAirResponse>>, tonic::Status>
1079        {
1080            self.inner.ready().await.map_err(|e| {
1081                tonic::Status::new(
1082                    tonic::Code::Unknown,
1083                    format!("Service was not ready: {}", e.into()),
1084                )
1085            })?;
1086            let codec = tonic::codec::ProstCodec::default();
1087            let path = http::uri::PathAndQuery::from_static(
1088                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeInAir",
1089            );
1090            self.inner
1091                .server_streaming(request.into_request(), path, codec)
1092                .await
1093        }
1094        #[doc = " Subscribe to landed state updates"]
1095        pub async fn subscribe_landed_state(
1096            &mut self,
1097            request: impl tonic::IntoRequest<super::SubscribeLandedStateRequest>,
1098        ) -> Result<
1099            tonic::Response<tonic::codec::Streaming<super::LandedStateResponse>>,
1100            tonic::Status,
1101        > {
1102            self.inner.ready().await.map_err(|e| {
1103                tonic::Status::new(
1104                    tonic::Code::Unknown,
1105                    format!("Service was not ready: {}", e.into()),
1106                )
1107            })?;
1108            let codec = tonic::codec::ProstCodec::default();
1109            let path = http::uri::PathAndQuery::from_static(
1110                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeLandedState",
1111            );
1112            self.inner
1113                .server_streaming(request.into_request(), path, codec)
1114                .await
1115        }
1116        #[doc = " Subscribe to armed updates."]
1117        pub async fn subscribe_armed(
1118            &mut self,
1119            request: impl tonic::IntoRequest<super::SubscribeArmedRequest>,
1120        ) -> Result<tonic::Response<tonic::codec::Streaming<super::ArmedResponse>>, tonic::Status>
1121        {
1122            self.inner.ready().await.map_err(|e| {
1123                tonic::Status::new(
1124                    tonic::Code::Unknown,
1125                    format!("Service was not ready: {}", e.into()),
1126                )
1127            })?;
1128            let codec = tonic::codec::ProstCodec::default();
1129            let path = http::uri::PathAndQuery::from_static(
1130                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeArmed",
1131            );
1132            self.inner
1133                .server_streaming(request.into_request(), path, codec)
1134                .await
1135        }
1136        #[doc = " Subscribe to 'attitude' updates (quaternion)."]
1137        pub async fn subscribe_attitude_quaternion(
1138            &mut self,
1139            request: impl tonic::IntoRequest<super::SubscribeAttitudeQuaternionRequest>,
1140        ) -> Result<
1141            tonic::Response<tonic::codec::Streaming<super::AttitudeQuaternionResponse>>,
1142            tonic::Status,
1143        > {
1144            self.inner.ready().await.map_err(|e| {
1145                tonic::Status::new(
1146                    tonic::Code::Unknown,
1147                    format!("Service was not ready: {}", e.into()),
1148                )
1149            })?;
1150            let codec = tonic::codec::ProstCodec::default();
1151            let path = http::uri::PathAndQuery::from_static(
1152                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeAttitudeQuaternion",
1153            );
1154            self.inner
1155                .server_streaming(request.into_request(), path, codec)
1156                .await
1157        }
1158        #[doc = " Subscribe to 'attitude' updates (Euler)."]
1159        pub async fn subscribe_attitude_euler(
1160            &mut self,
1161            request: impl tonic::IntoRequest<super::SubscribeAttitudeEulerRequest>,
1162        ) -> Result<
1163            tonic::Response<tonic::codec::Streaming<super::AttitudeEulerResponse>>,
1164            tonic::Status,
1165        > {
1166            self.inner.ready().await.map_err(|e| {
1167                tonic::Status::new(
1168                    tonic::Code::Unknown,
1169                    format!("Service was not ready: {}", e.into()),
1170                )
1171            })?;
1172            let codec = tonic::codec::ProstCodec::default();
1173            let path = http::uri::PathAndQuery::from_static(
1174                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeAttitudeEuler",
1175            );
1176            self.inner
1177                .server_streaming(request.into_request(), path, codec)
1178                .await
1179        }
1180        #[doc = " Subscribe to 'attitude' updates (angular velocity)"]
1181        pub async fn subscribe_attitude_angular_velocity_body(
1182            &mut self,
1183            request: impl tonic::IntoRequest<super::SubscribeAttitudeAngularVelocityBodyRequest>,
1184        ) -> Result<
1185            tonic::Response<tonic::codec::Streaming<super::AttitudeAngularVelocityBodyResponse>>,
1186            tonic::Status,
1187        > {
1188            self.inner.ready().await.map_err(|e| {
1189                tonic::Status::new(
1190                    tonic::Code::Unknown,
1191                    format!("Service was not ready: {}", e.into()),
1192                )
1193            })?;
1194            let codec = tonic::codec::ProstCodec::default();
1195            let path = http::uri::PathAndQuery::from_static(
1196                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeAttitudeAngularVelocityBody",
1197            );
1198            self.inner
1199                .server_streaming(request.into_request(), path, codec)
1200                .await
1201        }
1202        #[doc = " Subscribe to 'camera attitude' updates (quaternion)."]
1203        pub async fn subscribe_camera_attitude_quaternion(
1204            &mut self,
1205            request: impl tonic::IntoRequest<super::SubscribeCameraAttitudeQuaternionRequest>,
1206        ) -> Result<
1207            tonic::Response<tonic::codec::Streaming<super::CameraAttitudeQuaternionResponse>>,
1208            tonic::Status,
1209        > {
1210            self.inner.ready().await.map_err(|e| {
1211                tonic::Status::new(
1212                    tonic::Code::Unknown,
1213                    format!("Service was not ready: {}", e.into()),
1214                )
1215            })?;
1216            let codec = tonic::codec::ProstCodec::default();
1217            let path = http::uri::PathAndQuery::from_static(
1218                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeCameraAttitudeQuaternion",
1219            );
1220            self.inner
1221                .server_streaming(request.into_request(), path, codec)
1222                .await
1223        }
1224        #[doc = " Subscribe to 'camera attitude' updates (Euler)."]
1225        pub async fn subscribe_camera_attitude_euler(
1226            &mut self,
1227            request: impl tonic::IntoRequest<super::SubscribeCameraAttitudeEulerRequest>,
1228        ) -> Result<
1229            tonic::Response<tonic::codec::Streaming<super::CameraAttitudeEulerResponse>>,
1230            tonic::Status,
1231        > {
1232            self.inner.ready().await.map_err(|e| {
1233                tonic::Status::new(
1234                    tonic::Code::Unknown,
1235                    format!("Service was not ready: {}", e.into()),
1236                )
1237            })?;
1238            let codec = tonic::codec::ProstCodec::default();
1239            let path = http::uri::PathAndQuery::from_static(
1240                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeCameraAttitudeEuler",
1241            );
1242            self.inner
1243                .server_streaming(request.into_request(), path, codec)
1244                .await
1245        }
1246        #[doc = " Subscribe to 'ground speed' updates (NED)."]
1247        pub async fn subscribe_velocity_ned(
1248            &mut self,
1249            request: impl tonic::IntoRequest<super::SubscribeVelocityNedRequest>,
1250        ) -> Result<
1251            tonic::Response<tonic::codec::Streaming<super::VelocityNedResponse>>,
1252            tonic::Status,
1253        > {
1254            self.inner.ready().await.map_err(|e| {
1255                tonic::Status::new(
1256                    tonic::Code::Unknown,
1257                    format!("Service was not ready: {}", e.into()),
1258                )
1259            })?;
1260            let codec = tonic::codec::ProstCodec::default();
1261            let path = http::uri::PathAndQuery::from_static(
1262                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeVelocityNed",
1263            );
1264            self.inner
1265                .server_streaming(request.into_request(), path, codec)
1266                .await
1267        }
1268        #[doc = " Subscribe to 'GPS info' updates."]
1269        pub async fn subscribe_gps_info(
1270            &mut self,
1271            request: impl tonic::IntoRequest<super::SubscribeGpsInfoRequest>,
1272        ) -> Result<tonic::Response<tonic::codec::Streaming<super::GpsInfoResponse>>, tonic::Status>
1273        {
1274            self.inner.ready().await.map_err(|e| {
1275                tonic::Status::new(
1276                    tonic::Code::Unknown,
1277                    format!("Service was not ready: {}", e.into()),
1278                )
1279            })?;
1280            let codec = tonic::codec::ProstCodec::default();
1281            let path = http::uri::PathAndQuery::from_static(
1282                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeGpsInfo",
1283            );
1284            self.inner
1285                .server_streaming(request.into_request(), path, codec)
1286                .await
1287        }
1288        #[doc = " Subscribe to 'battery' updates."]
1289        pub async fn subscribe_battery(
1290            &mut self,
1291            request: impl tonic::IntoRequest<super::SubscribeBatteryRequest>,
1292        ) -> Result<tonic::Response<tonic::codec::Streaming<super::BatteryResponse>>, tonic::Status>
1293        {
1294            self.inner.ready().await.map_err(|e| {
1295                tonic::Status::new(
1296                    tonic::Code::Unknown,
1297                    format!("Service was not ready: {}", e.into()),
1298                )
1299            })?;
1300            let codec = tonic::codec::ProstCodec::default();
1301            let path = http::uri::PathAndQuery::from_static(
1302                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeBattery",
1303            );
1304            self.inner
1305                .server_streaming(request.into_request(), path, codec)
1306                .await
1307        }
1308        #[doc = " Subscribe to 'flight mode' updates."]
1309        pub async fn subscribe_flight_mode(
1310            &mut self,
1311            request: impl tonic::IntoRequest<super::SubscribeFlightModeRequest>,
1312        ) -> Result<
1313            tonic::Response<tonic::codec::Streaming<super::FlightModeResponse>>,
1314            tonic::Status,
1315        > {
1316            self.inner.ready().await.map_err(|e| {
1317                tonic::Status::new(
1318                    tonic::Code::Unknown,
1319                    format!("Service was not ready: {}", e.into()),
1320                )
1321            })?;
1322            let codec = tonic::codec::ProstCodec::default();
1323            let path = http::uri::PathAndQuery::from_static(
1324                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeFlightMode",
1325            );
1326            self.inner
1327                .server_streaming(request.into_request(), path, codec)
1328                .await
1329        }
1330        #[doc = " Subscribe to 'health' updates."]
1331        pub async fn subscribe_health(
1332            &mut self,
1333            request: impl tonic::IntoRequest<super::SubscribeHealthRequest>,
1334        ) -> Result<tonic::Response<tonic::codec::Streaming<super::HealthResponse>>, tonic::Status>
1335        {
1336            self.inner.ready().await.map_err(|e| {
1337                tonic::Status::new(
1338                    tonic::Code::Unknown,
1339                    format!("Service was not ready: {}", e.into()),
1340                )
1341            })?;
1342            let codec = tonic::codec::ProstCodec::default();
1343            let path = http::uri::PathAndQuery::from_static(
1344                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeHealth",
1345            );
1346            self.inner
1347                .server_streaming(request.into_request(), path, codec)
1348                .await
1349        }
1350        #[doc = " Subscribe to 'RC status' updates."]
1351        pub async fn subscribe_rc_status(
1352            &mut self,
1353            request: impl tonic::IntoRequest<super::SubscribeRcStatusRequest>,
1354        ) -> Result<tonic::Response<tonic::codec::Streaming<super::RcStatusResponse>>, tonic::Status>
1355        {
1356            self.inner.ready().await.map_err(|e| {
1357                tonic::Status::new(
1358                    tonic::Code::Unknown,
1359                    format!("Service was not ready: {}", e.into()),
1360                )
1361            })?;
1362            let codec = tonic::codec::ProstCodec::default();
1363            let path = http::uri::PathAndQuery::from_static(
1364                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeRcStatus",
1365            );
1366            self.inner
1367                .server_streaming(request.into_request(), path, codec)
1368                .await
1369        }
1370        #[doc = " Subscribe to 'status text' updates."]
1371        pub async fn subscribe_status_text(
1372            &mut self,
1373            request: impl tonic::IntoRequest<super::SubscribeStatusTextRequest>,
1374        ) -> Result<
1375            tonic::Response<tonic::codec::Streaming<super::StatusTextResponse>>,
1376            tonic::Status,
1377        > {
1378            self.inner.ready().await.map_err(|e| {
1379                tonic::Status::new(
1380                    tonic::Code::Unknown,
1381                    format!("Service was not ready: {}", e.into()),
1382                )
1383            })?;
1384            let codec = tonic::codec::ProstCodec::default();
1385            let path = http::uri::PathAndQuery::from_static(
1386                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeStatusText",
1387            );
1388            self.inner
1389                .server_streaming(request.into_request(), path, codec)
1390                .await
1391        }
1392        #[doc = " Subscribe to 'actuator control target' updates."]
1393        pub async fn subscribe_actuator_control_target(
1394            &mut self,
1395            request: impl tonic::IntoRequest<super::SubscribeActuatorControlTargetRequest>,
1396        ) -> Result<
1397            tonic::Response<tonic::codec::Streaming<super::ActuatorControlTargetResponse>>,
1398            tonic::Status,
1399        > {
1400            self.inner.ready().await.map_err(|e| {
1401                tonic::Status::new(
1402                    tonic::Code::Unknown,
1403                    format!("Service was not ready: {}", e.into()),
1404                )
1405            })?;
1406            let codec = tonic::codec::ProstCodec::default();
1407            let path = http::uri::PathAndQuery::from_static(
1408                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeActuatorControlTarget",
1409            );
1410            self.inner
1411                .server_streaming(request.into_request(), path, codec)
1412                .await
1413        }
1414        #[doc = " Subscribe to 'actuator output status' updates."]
1415        pub async fn subscribe_actuator_output_status(
1416            &mut self,
1417            request: impl tonic::IntoRequest<super::SubscribeActuatorOutputStatusRequest>,
1418        ) -> Result<
1419            tonic::Response<tonic::codec::Streaming<super::ActuatorOutputStatusResponse>>,
1420            tonic::Status,
1421        > {
1422            self.inner.ready().await.map_err(|e| {
1423                tonic::Status::new(
1424                    tonic::Code::Unknown,
1425                    format!("Service was not ready: {}", e.into()),
1426                )
1427            })?;
1428            let codec = tonic::codec::ProstCodec::default();
1429            let path = http::uri::PathAndQuery::from_static(
1430                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeActuatorOutputStatus",
1431            );
1432            self.inner
1433                .server_streaming(request.into_request(), path, codec)
1434                .await
1435        }
1436        #[doc = " Subscribe to 'odometry' updates."]
1437        pub async fn subscribe_odometry(
1438            &mut self,
1439            request: impl tonic::IntoRequest<super::SubscribeOdometryRequest>,
1440        ) -> Result<tonic::Response<tonic::codec::Streaming<super::OdometryResponse>>, tonic::Status>
1441        {
1442            self.inner.ready().await.map_err(|e| {
1443                tonic::Status::new(
1444                    tonic::Code::Unknown,
1445                    format!("Service was not ready: {}", e.into()),
1446                )
1447            })?;
1448            let codec = tonic::codec::ProstCodec::default();
1449            let path = http::uri::PathAndQuery::from_static(
1450                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeOdometry",
1451            );
1452            self.inner
1453                .server_streaming(request.into_request(), path, codec)
1454                .await
1455        }
1456        #[doc = " Subscribe to 'position velocity' updates."]
1457        pub async fn subscribe_position_velocity_ned(
1458            &mut self,
1459            request: impl tonic::IntoRequest<super::SubscribePositionVelocityNedRequest>,
1460        ) -> Result<
1461            tonic::Response<tonic::codec::Streaming<super::PositionVelocityNedResponse>>,
1462            tonic::Status,
1463        > {
1464            self.inner.ready().await.map_err(|e| {
1465                tonic::Status::new(
1466                    tonic::Code::Unknown,
1467                    format!("Service was not ready: {}", e.into()),
1468                )
1469            })?;
1470            let codec = tonic::codec::ProstCodec::default();
1471            let path = http::uri::PathAndQuery::from_static(
1472                "/mavsdk.rpc.telemetry.TelemetryService/SubscribePositionVelocityNed",
1473            );
1474            self.inner
1475                .server_streaming(request.into_request(), path, codec)
1476                .await
1477        }
1478        #[doc = " Subscribe to 'ground truth' updates."]
1479        pub async fn subscribe_ground_truth(
1480            &mut self,
1481            request: impl tonic::IntoRequest<super::SubscribeGroundTruthRequest>,
1482        ) -> Result<
1483            tonic::Response<tonic::codec::Streaming<super::GroundTruthResponse>>,
1484            tonic::Status,
1485        > {
1486            self.inner.ready().await.map_err(|e| {
1487                tonic::Status::new(
1488                    tonic::Code::Unknown,
1489                    format!("Service was not ready: {}", e.into()),
1490                )
1491            })?;
1492            let codec = tonic::codec::ProstCodec::default();
1493            let path = http::uri::PathAndQuery::from_static(
1494                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeGroundTruth",
1495            );
1496            self.inner
1497                .server_streaming(request.into_request(), path, codec)
1498                .await
1499        }
1500        #[doc = " Subscribe to 'fixedwing metrics' updates."]
1501        pub async fn subscribe_fixedwing_metrics(
1502            &mut self,
1503            request: impl tonic::IntoRequest<super::SubscribeFixedwingMetricsRequest>,
1504        ) -> Result<
1505            tonic::Response<tonic::codec::Streaming<super::FixedwingMetricsResponse>>,
1506            tonic::Status,
1507        > {
1508            self.inner.ready().await.map_err(|e| {
1509                tonic::Status::new(
1510                    tonic::Code::Unknown,
1511                    format!("Service was not ready: {}", e.into()),
1512                )
1513            })?;
1514            let codec = tonic::codec::ProstCodec::default();
1515            let path = http::uri::PathAndQuery::from_static(
1516                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeFixedwingMetrics",
1517            );
1518            self.inner
1519                .server_streaming(request.into_request(), path, codec)
1520                .await
1521        }
1522        #[doc = " Subscribe to 'IMU' updates."]
1523        pub async fn subscribe_imu(
1524            &mut self,
1525            request: impl tonic::IntoRequest<super::SubscribeImuRequest>,
1526        ) -> Result<tonic::Response<tonic::codec::Streaming<super::ImuResponse>>, tonic::Status>
1527        {
1528            self.inner.ready().await.map_err(|e| {
1529                tonic::Status::new(
1530                    tonic::Code::Unknown,
1531                    format!("Service was not ready: {}", e.into()),
1532                )
1533            })?;
1534            let codec = tonic::codec::ProstCodec::default();
1535            let path = http::uri::PathAndQuery::from_static(
1536                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeImu",
1537            );
1538            self.inner
1539                .server_streaming(request.into_request(), path, codec)
1540                .await
1541        }
1542        #[doc = " Subscribe to 'HealthAllOk' updates."]
1543        pub async fn subscribe_health_all_ok(
1544            &mut self,
1545            request: impl tonic::IntoRequest<super::SubscribeHealthAllOkRequest>,
1546        ) -> Result<
1547            tonic::Response<tonic::codec::Streaming<super::HealthAllOkResponse>>,
1548            tonic::Status,
1549        > {
1550            self.inner.ready().await.map_err(|e| {
1551                tonic::Status::new(
1552                    tonic::Code::Unknown,
1553                    format!("Service was not ready: {}", e.into()),
1554                )
1555            })?;
1556            let codec = tonic::codec::ProstCodec::default();
1557            let path = http::uri::PathAndQuery::from_static(
1558                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeHealthAllOk",
1559            );
1560            self.inner
1561                .server_streaming(request.into_request(), path, codec)
1562                .await
1563        }
1564        #[doc = " Subscribe to 'unix epoch time' updates."]
1565        pub async fn subscribe_unix_epoch_time(
1566            &mut self,
1567            request: impl tonic::IntoRequest<super::SubscribeUnixEpochTimeRequest>,
1568        ) -> Result<
1569            tonic::Response<tonic::codec::Streaming<super::UnixEpochTimeResponse>>,
1570            tonic::Status,
1571        > {
1572            self.inner.ready().await.map_err(|e| {
1573                tonic::Status::new(
1574                    tonic::Code::Unknown,
1575                    format!("Service was not ready: {}", e.into()),
1576                )
1577            })?;
1578            let codec = tonic::codec::ProstCodec::default();
1579            let path = http::uri::PathAndQuery::from_static(
1580                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeUnixEpochTime",
1581            );
1582            self.inner
1583                .server_streaming(request.into_request(), path, codec)
1584                .await
1585        }
1586        #[doc = " Subscribe to 'Distance Sensor' updates."]
1587        pub async fn subscribe_distance_sensor(
1588            &mut self,
1589            request: impl tonic::IntoRequest<super::SubscribeDistanceSensorRequest>,
1590        ) -> Result<
1591            tonic::Response<tonic::codec::Streaming<super::DistanceSensorResponse>>,
1592            tonic::Status,
1593        > {
1594            self.inner.ready().await.map_err(|e| {
1595                tonic::Status::new(
1596                    tonic::Code::Unknown,
1597                    format!("Service was not ready: {}", e.into()),
1598                )
1599            })?;
1600            let codec = tonic::codec::ProstCodec::default();
1601            let path = http::uri::PathAndQuery::from_static(
1602                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeDistanceSensor",
1603            );
1604            self.inner
1605                .server_streaming(request.into_request(), path, codec)
1606                .await
1607        }
1608        #[doc = " Set rate to 'position' updates."]
1609        pub async fn set_rate_position(
1610            &mut self,
1611            request: impl tonic::IntoRequest<super::SetRatePositionRequest>,
1612        ) -> Result<tonic::Response<super::SetRatePositionResponse>, tonic::Status> {
1613            self.inner.ready().await.map_err(|e| {
1614                tonic::Status::new(
1615                    tonic::Code::Unknown,
1616                    format!("Service was not ready: {}", e.into()),
1617                )
1618            })?;
1619            let codec = tonic::codec::ProstCodec::default();
1620            let path = http::uri::PathAndQuery::from_static(
1621                "/mavsdk.rpc.telemetry.TelemetryService/SetRatePosition",
1622            );
1623            self.inner.unary(request.into_request(), path, codec).await
1624        }
1625        #[doc = " Set rate to 'home position' updates."]
1626        pub async fn set_rate_home(
1627            &mut self,
1628            request: impl tonic::IntoRequest<super::SetRateHomeRequest>,
1629        ) -> Result<tonic::Response<super::SetRateHomeResponse>, tonic::Status> {
1630            self.inner.ready().await.map_err(|e| {
1631                tonic::Status::new(
1632                    tonic::Code::Unknown,
1633                    format!("Service was not ready: {}", e.into()),
1634                )
1635            })?;
1636            let codec = tonic::codec::ProstCodec::default();
1637            let path = http::uri::PathAndQuery::from_static(
1638                "/mavsdk.rpc.telemetry.TelemetryService/SetRateHome",
1639            );
1640            self.inner.unary(request.into_request(), path, codec).await
1641        }
1642        #[doc = " Set rate to in-air updates."]
1643        pub async fn set_rate_in_air(
1644            &mut self,
1645            request: impl tonic::IntoRequest<super::SetRateInAirRequest>,
1646        ) -> Result<tonic::Response<super::SetRateInAirResponse>, tonic::Status> {
1647            self.inner.ready().await.map_err(|e| {
1648                tonic::Status::new(
1649                    tonic::Code::Unknown,
1650                    format!("Service was not ready: {}", e.into()),
1651                )
1652            })?;
1653            let codec = tonic::codec::ProstCodec::default();
1654            let path = http::uri::PathAndQuery::from_static(
1655                "/mavsdk.rpc.telemetry.TelemetryService/SetRateInAir",
1656            );
1657            self.inner.unary(request.into_request(), path, codec).await
1658        }
1659        #[doc = " Set rate to landed state updates"]
1660        pub async fn set_rate_landed_state(
1661            &mut self,
1662            request: impl tonic::IntoRequest<super::SetRateLandedStateRequest>,
1663        ) -> Result<tonic::Response<super::SetRateLandedStateResponse>, tonic::Status> {
1664            self.inner.ready().await.map_err(|e| {
1665                tonic::Status::new(
1666                    tonic::Code::Unknown,
1667                    format!("Service was not ready: {}", e.into()),
1668                )
1669            })?;
1670            let codec = tonic::codec::ProstCodec::default();
1671            let path = http::uri::PathAndQuery::from_static(
1672                "/mavsdk.rpc.telemetry.TelemetryService/SetRateLandedState",
1673            );
1674            self.inner.unary(request.into_request(), path, codec).await
1675        }
1676        #[doc = " Set rate to 'attitude' updates."]
1677        pub async fn set_rate_attitude(
1678            &mut self,
1679            request: impl tonic::IntoRequest<super::SetRateAttitudeRequest>,
1680        ) -> Result<tonic::Response<super::SetRateAttitudeResponse>, tonic::Status> {
1681            self.inner.ready().await.map_err(|e| {
1682                tonic::Status::new(
1683                    tonic::Code::Unknown,
1684                    format!("Service was not ready: {}", e.into()),
1685                )
1686            })?;
1687            let codec = tonic::codec::ProstCodec::default();
1688            let path = http::uri::PathAndQuery::from_static(
1689                "/mavsdk.rpc.telemetry.TelemetryService/SetRateAttitude",
1690            );
1691            self.inner.unary(request.into_request(), path, codec).await
1692        }
1693        #[doc = " Set rate of camera attitude updates."]
1694        pub async fn set_rate_camera_attitude(
1695            &mut self,
1696            request: impl tonic::IntoRequest<super::SetRateCameraAttitudeRequest>,
1697        ) -> Result<tonic::Response<super::SetRateCameraAttitudeResponse>, tonic::Status> {
1698            self.inner.ready().await.map_err(|e| {
1699                tonic::Status::new(
1700                    tonic::Code::Unknown,
1701                    format!("Service was not ready: {}", e.into()),
1702                )
1703            })?;
1704            let codec = tonic::codec::ProstCodec::default();
1705            let path = http::uri::PathAndQuery::from_static(
1706                "/mavsdk.rpc.telemetry.TelemetryService/SetRateCameraAttitude",
1707            );
1708            self.inner.unary(request.into_request(), path, codec).await
1709        }
1710        #[doc = " Set rate to 'ground speed' updates (NED)."]
1711        pub async fn set_rate_velocity_ned(
1712            &mut self,
1713            request: impl tonic::IntoRequest<super::SetRateVelocityNedRequest>,
1714        ) -> Result<tonic::Response<super::SetRateVelocityNedResponse>, tonic::Status> {
1715            self.inner.ready().await.map_err(|e| {
1716                tonic::Status::new(
1717                    tonic::Code::Unknown,
1718                    format!("Service was not ready: {}", e.into()),
1719                )
1720            })?;
1721            let codec = tonic::codec::ProstCodec::default();
1722            let path = http::uri::PathAndQuery::from_static(
1723                "/mavsdk.rpc.telemetry.TelemetryService/SetRateVelocityNed",
1724            );
1725            self.inner.unary(request.into_request(), path, codec).await
1726        }
1727        #[doc = " Set rate to 'GPS info' updates."]
1728        pub async fn set_rate_gps_info(
1729            &mut self,
1730            request: impl tonic::IntoRequest<super::SetRateGpsInfoRequest>,
1731        ) -> Result<tonic::Response<super::SetRateGpsInfoResponse>, tonic::Status> {
1732            self.inner.ready().await.map_err(|e| {
1733                tonic::Status::new(
1734                    tonic::Code::Unknown,
1735                    format!("Service was not ready: {}", e.into()),
1736                )
1737            })?;
1738            let codec = tonic::codec::ProstCodec::default();
1739            let path = http::uri::PathAndQuery::from_static(
1740                "/mavsdk.rpc.telemetry.TelemetryService/SetRateGpsInfo",
1741            );
1742            self.inner.unary(request.into_request(), path, codec).await
1743        }
1744        #[doc = " Set rate to 'battery' updates."]
1745        pub async fn set_rate_battery(
1746            &mut self,
1747            request: impl tonic::IntoRequest<super::SetRateBatteryRequest>,
1748        ) -> Result<tonic::Response<super::SetRateBatteryResponse>, tonic::Status> {
1749            self.inner.ready().await.map_err(|e| {
1750                tonic::Status::new(
1751                    tonic::Code::Unknown,
1752                    format!("Service was not ready: {}", e.into()),
1753                )
1754            })?;
1755            let codec = tonic::codec::ProstCodec::default();
1756            let path = http::uri::PathAndQuery::from_static(
1757                "/mavsdk.rpc.telemetry.TelemetryService/SetRateBattery",
1758            );
1759            self.inner.unary(request.into_request(), path, codec).await
1760        }
1761        #[doc = " Set rate to 'RC status' updates."]
1762        pub async fn set_rate_rc_status(
1763            &mut self,
1764            request: impl tonic::IntoRequest<super::SetRateRcStatusRequest>,
1765        ) -> Result<tonic::Response<super::SetRateRcStatusResponse>, tonic::Status> {
1766            self.inner.ready().await.map_err(|e| {
1767                tonic::Status::new(
1768                    tonic::Code::Unknown,
1769                    format!("Service was not ready: {}", e.into()),
1770                )
1771            })?;
1772            let codec = tonic::codec::ProstCodec::default();
1773            let path = http::uri::PathAndQuery::from_static(
1774                "/mavsdk.rpc.telemetry.TelemetryService/SetRateRcStatus",
1775            );
1776            self.inner.unary(request.into_request(), path, codec).await
1777        }
1778        #[doc = " Set rate to 'actuator control target' updates."]
1779        pub async fn set_rate_actuator_control_target(
1780            &mut self,
1781            request: impl tonic::IntoRequest<super::SetRateActuatorControlTargetRequest>,
1782        ) -> Result<tonic::Response<super::SetRateActuatorControlTargetResponse>, tonic::Status>
1783        {
1784            self.inner.ready().await.map_err(|e| {
1785                tonic::Status::new(
1786                    tonic::Code::Unknown,
1787                    format!("Service was not ready: {}", e.into()),
1788                )
1789            })?;
1790            let codec = tonic::codec::ProstCodec::default();
1791            let path = http::uri::PathAndQuery::from_static(
1792                "/mavsdk.rpc.telemetry.TelemetryService/SetRateActuatorControlTarget",
1793            );
1794            self.inner.unary(request.into_request(), path, codec).await
1795        }
1796        #[doc = " Set rate to 'actuator output status' updates."]
1797        pub async fn set_rate_actuator_output_status(
1798            &mut self,
1799            request: impl tonic::IntoRequest<super::SetRateActuatorOutputStatusRequest>,
1800        ) -> Result<tonic::Response<super::SetRateActuatorOutputStatusResponse>, tonic::Status>
1801        {
1802            self.inner.ready().await.map_err(|e| {
1803                tonic::Status::new(
1804                    tonic::Code::Unknown,
1805                    format!("Service was not ready: {}", e.into()),
1806                )
1807            })?;
1808            let codec = tonic::codec::ProstCodec::default();
1809            let path = http::uri::PathAndQuery::from_static(
1810                "/mavsdk.rpc.telemetry.TelemetryService/SetRateActuatorOutputStatus",
1811            );
1812            self.inner.unary(request.into_request(), path, codec).await
1813        }
1814        #[doc = " Set rate to 'odometry' updates."]
1815        pub async fn set_rate_odometry(
1816            &mut self,
1817            request: impl tonic::IntoRequest<super::SetRateOdometryRequest>,
1818        ) -> Result<tonic::Response<super::SetRateOdometryResponse>, tonic::Status> {
1819            self.inner.ready().await.map_err(|e| {
1820                tonic::Status::new(
1821                    tonic::Code::Unknown,
1822                    format!("Service was not ready: {}", e.into()),
1823                )
1824            })?;
1825            let codec = tonic::codec::ProstCodec::default();
1826            let path = http::uri::PathAndQuery::from_static(
1827                "/mavsdk.rpc.telemetry.TelemetryService/SetRateOdometry",
1828            );
1829            self.inner.unary(request.into_request(), path, codec).await
1830        }
1831        #[doc = " Set rate to 'position velocity' updates."]
1832        pub async fn set_rate_position_velocity_ned(
1833            &mut self,
1834            request: impl tonic::IntoRequest<super::SetRatePositionVelocityNedRequest>,
1835        ) -> Result<tonic::Response<super::SetRatePositionVelocityNedResponse>, tonic::Status>
1836        {
1837            self.inner.ready().await.map_err(|e| {
1838                tonic::Status::new(
1839                    tonic::Code::Unknown,
1840                    format!("Service was not ready: {}", e.into()),
1841                )
1842            })?;
1843            let codec = tonic::codec::ProstCodec::default();
1844            let path = http::uri::PathAndQuery::from_static(
1845                "/mavsdk.rpc.telemetry.TelemetryService/SetRatePositionVelocityNed",
1846            );
1847            self.inner.unary(request.into_request(), path, codec).await
1848        }
1849        #[doc = " Set rate to 'ground truth' updates."]
1850        pub async fn set_rate_ground_truth(
1851            &mut self,
1852            request: impl tonic::IntoRequest<super::SetRateGroundTruthRequest>,
1853        ) -> Result<tonic::Response<super::SetRateGroundTruthResponse>, tonic::Status> {
1854            self.inner.ready().await.map_err(|e| {
1855                tonic::Status::new(
1856                    tonic::Code::Unknown,
1857                    format!("Service was not ready: {}", e.into()),
1858                )
1859            })?;
1860            let codec = tonic::codec::ProstCodec::default();
1861            let path = http::uri::PathAndQuery::from_static(
1862                "/mavsdk.rpc.telemetry.TelemetryService/SetRateGroundTruth",
1863            );
1864            self.inner.unary(request.into_request(), path, codec).await
1865        }
1866        #[doc = " Set rate to 'fixedwing metrics' updates."]
1867        pub async fn set_rate_fixedwing_metrics(
1868            &mut self,
1869            request: impl tonic::IntoRequest<super::SetRateFixedwingMetricsRequest>,
1870        ) -> Result<tonic::Response<super::SetRateFixedwingMetricsResponse>, tonic::Status>
1871        {
1872            self.inner.ready().await.map_err(|e| {
1873                tonic::Status::new(
1874                    tonic::Code::Unknown,
1875                    format!("Service was not ready: {}", e.into()),
1876                )
1877            })?;
1878            let codec = tonic::codec::ProstCodec::default();
1879            let path = http::uri::PathAndQuery::from_static(
1880                "/mavsdk.rpc.telemetry.TelemetryService/SetRateFixedwingMetrics",
1881            );
1882            self.inner.unary(request.into_request(), path, codec).await
1883        }
1884        #[doc = " Set rate to 'IMU' updates."]
1885        pub async fn set_rate_imu(
1886            &mut self,
1887            request: impl tonic::IntoRequest<super::SetRateImuRequest>,
1888        ) -> Result<tonic::Response<super::SetRateImuResponse>, tonic::Status> {
1889            self.inner.ready().await.map_err(|e| {
1890                tonic::Status::new(
1891                    tonic::Code::Unknown,
1892                    format!("Service was not ready: {}", e.into()),
1893                )
1894            })?;
1895            let codec = tonic::codec::ProstCodec::default();
1896            let path = http::uri::PathAndQuery::from_static(
1897                "/mavsdk.rpc.telemetry.TelemetryService/SetRateImu",
1898            );
1899            self.inner.unary(request.into_request(), path, codec).await
1900        }
1901        #[doc = " Set rate to 'unix epoch time' updates."]
1902        pub async fn set_rate_unix_epoch_time(
1903            &mut self,
1904            request: impl tonic::IntoRequest<super::SetRateUnixEpochTimeRequest>,
1905        ) -> Result<tonic::Response<super::SetRateUnixEpochTimeResponse>, tonic::Status> {
1906            self.inner.ready().await.map_err(|e| {
1907                tonic::Status::new(
1908                    tonic::Code::Unknown,
1909                    format!("Service was not ready: {}", e.into()),
1910                )
1911            })?;
1912            let codec = tonic::codec::ProstCodec::default();
1913            let path = http::uri::PathAndQuery::from_static(
1914                "/mavsdk.rpc.telemetry.TelemetryService/SetRateUnixEpochTime",
1915            );
1916            self.inner.unary(request.into_request(), path, codec).await
1917        }
1918        #[doc = " Set rate to 'Distance Sensor' updates."]
1919        pub async fn set_rate_distance_sensor(
1920            &mut self,
1921            request: impl tonic::IntoRequest<super::SetRateDistanceSensorRequest>,
1922        ) -> Result<tonic::Response<super::SetRateDistanceSensorResponse>, tonic::Status> {
1923            self.inner.ready().await.map_err(|e| {
1924                tonic::Status::new(
1925                    tonic::Code::Unknown,
1926                    format!("Service was not ready: {}", e.into()),
1927                )
1928            })?;
1929            let codec = tonic::codec::ProstCodec::default();
1930            let path = http::uri::PathAndQuery::from_static(
1931                "/mavsdk.rpc.telemetry.TelemetryService/SetRateDistanceSensor",
1932            );
1933            self.inner.unary(request.into_request(), path, codec).await
1934        }
1935        #[doc = " Get the GPS location of where the estimator has been initialized."]
1936        pub async fn get_gps_global_origin(
1937            &mut self,
1938            request: impl tonic::IntoRequest<super::GetGpsGlobalOriginRequest>,
1939        ) -> Result<tonic::Response<super::GetGpsGlobalOriginResponse>, tonic::Status> {
1940            self.inner.ready().await.map_err(|e| {
1941                tonic::Status::new(
1942                    tonic::Code::Unknown,
1943                    format!("Service was not ready: {}", e.into()),
1944                )
1945            })?;
1946            let codec = tonic::codec::ProstCodec::default();
1947            let path = http::uri::PathAndQuery::from_static(
1948                "/mavsdk.rpc.telemetry.TelemetryService/GetGpsGlobalOrigin",
1949            );
1950            self.inner.unary(request.into_request(), path, codec).await
1951        }
1952    }
1953}
1954#[doc = r" Generated server implementations."]
1955pub mod telemetry_service_server {
1956    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
1957    use tonic::codegen::*;
1958    #[doc = "Generated trait containing gRPC methods that should be implemented for use with TelemetryServiceServer."]
1959    #[async_trait]
1960    pub trait TelemetryService: Send + Sync + 'static {
1961        #[doc = "Server streaming response type for the SubscribePosition method."]
1962        type SubscribePositionStream: futures_core::Stream<Item = Result<super::PositionResponse, tonic::Status>>
1963            + Send
1964            + Sync
1965            + 'static;
1966        #[doc = " Subscribe to 'position' updates."]
1967        async fn subscribe_position(
1968            &self,
1969            request: tonic::Request<super::SubscribePositionRequest>,
1970        ) -> Result<tonic::Response<Self::SubscribePositionStream>, tonic::Status>;
1971        #[doc = "Server streaming response type for the SubscribeHome method."]
1972        type SubscribeHomeStream: futures_core::Stream<Item = Result<super::HomeResponse, tonic::Status>>
1973            + Send
1974            + Sync
1975            + 'static;
1976        #[doc = " Subscribe to 'home position' updates."]
1977        async fn subscribe_home(
1978            &self,
1979            request: tonic::Request<super::SubscribeHomeRequest>,
1980        ) -> Result<tonic::Response<Self::SubscribeHomeStream>, tonic::Status>;
1981        #[doc = "Server streaming response type for the SubscribeInAir method."]
1982        type SubscribeInAirStream: futures_core::Stream<Item = Result<super::InAirResponse, tonic::Status>>
1983            + Send
1984            + Sync
1985            + 'static;
1986        #[doc = " Subscribe to in-air updates."]
1987        async fn subscribe_in_air(
1988            &self,
1989            request: tonic::Request<super::SubscribeInAirRequest>,
1990        ) -> Result<tonic::Response<Self::SubscribeInAirStream>, tonic::Status>;
1991        #[doc = "Server streaming response type for the SubscribeLandedState method."]
1992        type SubscribeLandedStateStream: futures_core::Stream<Item = Result<super::LandedStateResponse, tonic::Status>>
1993            + Send
1994            + Sync
1995            + 'static;
1996        #[doc = " Subscribe to landed state updates"]
1997        async fn subscribe_landed_state(
1998            &self,
1999            request: tonic::Request<super::SubscribeLandedStateRequest>,
2000        ) -> Result<tonic::Response<Self::SubscribeLandedStateStream>, tonic::Status>;
2001        #[doc = "Server streaming response type for the SubscribeArmed method."]
2002        type SubscribeArmedStream: futures_core::Stream<Item = Result<super::ArmedResponse, tonic::Status>>
2003            + Send
2004            + Sync
2005            + 'static;
2006        #[doc = " Subscribe to armed updates."]
2007        async fn subscribe_armed(
2008            &self,
2009            request: tonic::Request<super::SubscribeArmedRequest>,
2010        ) -> Result<tonic::Response<Self::SubscribeArmedStream>, tonic::Status>;
2011        #[doc = "Server streaming response type for the SubscribeAttitudeQuaternion method."]
2012        type SubscribeAttitudeQuaternionStream: futures_core::Stream<Item = Result<super::AttitudeQuaternionResponse, tonic::Status>>
2013            + Send
2014            + Sync
2015            + 'static;
2016        #[doc = " Subscribe to 'attitude' updates (quaternion)."]
2017        async fn subscribe_attitude_quaternion(
2018            &self,
2019            request: tonic::Request<super::SubscribeAttitudeQuaternionRequest>,
2020        ) -> Result<tonic::Response<Self::SubscribeAttitudeQuaternionStream>, tonic::Status>;
2021        #[doc = "Server streaming response type for the SubscribeAttitudeEuler method."]
2022        type SubscribeAttitudeEulerStream: futures_core::Stream<Item = Result<super::AttitudeEulerResponse, tonic::Status>>
2023            + Send
2024            + Sync
2025            + 'static;
2026        #[doc = " Subscribe to 'attitude' updates (Euler)."]
2027        async fn subscribe_attitude_euler(
2028            &self,
2029            request: tonic::Request<super::SubscribeAttitudeEulerRequest>,
2030        ) -> Result<tonic::Response<Self::SubscribeAttitudeEulerStream>, tonic::Status>;
2031        #[doc = "Server streaming response type for the SubscribeAttitudeAngularVelocityBody method."]
2032        type SubscribeAttitudeAngularVelocityBodyStream: futures_core::Stream<
2033                Item = Result<super::AttitudeAngularVelocityBodyResponse, tonic::Status>,
2034            > + Send
2035            + Sync
2036            + 'static;
2037        #[doc = " Subscribe to 'attitude' updates (angular velocity)"]
2038        async fn subscribe_attitude_angular_velocity_body(
2039            &self,
2040            request: tonic::Request<super::SubscribeAttitudeAngularVelocityBodyRequest>,
2041        ) -> Result<tonic::Response<Self::SubscribeAttitudeAngularVelocityBodyStream>, tonic::Status>;
2042        #[doc = "Server streaming response type for the SubscribeCameraAttitudeQuaternion method."]
2043        type SubscribeCameraAttitudeQuaternionStream: futures_core::Stream<
2044                Item = Result<super::CameraAttitudeQuaternionResponse, tonic::Status>,
2045            > + Send
2046            + Sync
2047            + 'static;
2048        #[doc = " Subscribe to 'camera attitude' updates (quaternion)."]
2049        async fn subscribe_camera_attitude_quaternion(
2050            &self,
2051            request: tonic::Request<super::SubscribeCameraAttitudeQuaternionRequest>,
2052        ) -> Result<tonic::Response<Self::SubscribeCameraAttitudeQuaternionStream>, tonic::Status>;
2053        #[doc = "Server streaming response type for the SubscribeCameraAttitudeEuler method."]
2054        type SubscribeCameraAttitudeEulerStream: futures_core::Stream<Item = Result<super::CameraAttitudeEulerResponse, tonic::Status>>
2055            + Send
2056            + Sync
2057            + 'static;
2058        #[doc = " Subscribe to 'camera attitude' updates (Euler)."]
2059        async fn subscribe_camera_attitude_euler(
2060            &self,
2061            request: tonic::Request<super::SubscribeCameraAttitudeEulerRequest>,
2062        ) -> Result<tonic::Response<Self::SubscribeCameraAttitudeEulerStream>, tonic::Status>;
2063        #[doc = "Server streaming response type for the SubscribeVelocityNed method."]
2064        type SubscribeVelocityNedStream: futures_core::Stream<Item = Result<super::VelocityNedResponse, tonic::Status>>
2065            + Send
2066            + Sync
2067            + 'static;
2068        #[doc = " Subscribe to 'ground speed' updates (NED)."]
2069        async fn subscribe_velocity_ned(
2070            &self,
2071            request: tonic::Request<super::SubscribeVelocityNedRequest>,
2072        ) -> Result<tonic::Response<Self::SubscribeVelocityNedStream>, tonic::Status>;
2073        #[doc = "Server streaming response type for the SubscribeGpsInfo method."]
2074        type SubscribeGpsInfoStream: futures_core::Stream<Item = Result<super::GpsInfoResponse, tonic::Status>>
2075            + Send
2076            + Sync
2077            + 'static;
2078        #[doc = " Subscribe to 'GPS info' updates."]
2079        async fn subscribe_gps_info(
2080            &self,
2081            request: tonic::Request<super::SubscribeGpsInfoRequest>,
2082        ) -> Result<tonic::Response<Self::SubscribeGpsInfoStream>, tonic::Status>;
2083        #[doc = "Server streaming response type for the SubscribeBattery method."]
2084        type SubscribeBatteryStream: futures_core::Stream<Item = Result<super::BatteryResponse, tonic::Status>>
2085            + Send
2086            + Sync
2087            + 'static;
2088        #[doc = " Subscribe to 'battery' updates."]
2089        async fn subscribe_battery(
2090            &self,
2091            request: tonic::Request<super::SubscribeBatteryRequest>,
2092        ) -> Result<tonic::Response<Self::SubscribeBatteryStream>, tonic::Status>;
2093        #[doc = "Server streaming response type for the SubscribeFlightMode method."]
2094        type SubscribeFlightModeStream: futures_core::Stream<Item = Result<super::FlightModeResponse, tonic::Status>>
2095            + Send
2096            + Sync
2097            + 'static;
2098        #[doc = " Subscribe to 'flight mode' updates."]
2099        async fn subscribe_flight_mode(
2100            &self,
2101            request: tonic::Request<super::SubscribeFlightModeRequest>,
2102        ) -> Result<tonic::Response<Self::SubscribeFlightModeStream>, tonic::Status>;
2103        #[doc = "Server streaming response type for the SubscribeHealth method."]
2104        type SubscribeHealthStream: futures_core::Stream<Item = Result<super::HealthResponse, tonic::Status>>
2105            + Send
2106            + Sync
2107            + 'static;
2108        #[doc = " Subscribe to 'health' updates."]
2109        async fn subscribe_health(
2110            &self,
2111            request: tonic::Request<super::SubscribeHealthRequest>,
2112        ) -> Result<tonic::Response<Self::SubscribeHealthStream>, tonic::Status>;
2113        #[doc = "Server streaming response type for the SubscribeRcStatus method."]
2114        type SubscribeRcStatusStream: futures_core::Stream<Item = Result<super::RcStatusResponse, tonic::Status>>
2115            + Send
2116            + Sync
2117            + 'static;
2118        #[doc = " Subscribe to 'RC status' updates."]
2119        async fn subscribe_rc_status(
2120            &self,
2121            request: tonic::Request<super::SubscribeRcStatusRequest>,
2122        ) -> Result<tonic::Response<Self::SubscribeRcStatusStream>, tonic::Status>;
2123        #[doc = "Server streaming response type for the SubscribeStatusText method."]
2124        type SubscribeStatusTextStream: futures_core::Stream<Item = Result<super::StatusTextResponse, tonic::Status>>
2125            + Send
2126            + Sync
2127            + 'static;
2128        #[doc = " Subscribe to 'status text' updates."]
2129        async fn subscribe_status_text(
2130            &self,
2131            request: tonic::Request<super::SubscribeStatusTextRequest>,
2132        ) -> Result<tonic::Response<Self::SubscribeStatusTextStream>, tonic::Status>;
2133        #[doc = "Server streaming response type for the SubscribeActuatorControlTarget method."]
2134        type SubscribeActuatorControlTargetStream: futures_core::Stream<Item = Result<super::ActuatorControlTargetResponse, tonic::Status>>
2135            + Send
2136            + Sync
2137            + 'static;
2138        #[doc = " Subscribe to 'actuator control target' updates."]
2139        async fn subscribe_actuator_control_target(
2140            &self,
2141            request: tonic::Request<super::SubscribeActuatorControlTargetRequest>,
2142        ) -> Result<tonic::Response<Self::SubscribeActuatorControlTargetStream>, tonic::Status>;
2143        #[doc = "Server streaming response type for the SubscribeActuatorOutputStatus method."]
2144        type SubscribeActuatorOutputStatusStream: futures_core::Stream<Item = Result<super::ActuatorOutputStatusResponse, tonic::Status>>
2145            + Send
2146            + Sync
2147            + 'static;
2148        #[doc = " Subscribe to 'actuator output status' updates."]
2149        async fn subscribe_actuator_output_status(
2150            &self,
2151            request: tonic::Request<super::SubscribeActuatorOutputStatusRequest>,
2152        ) -> Result<tonic::Response<Self::SubscribeActuatorOutputStatusStream>, tonic::Status>;
2153        #[doc = "Server streaming response type for the SubscribeOdometry method."]
2154        type SubscribeOdometryStream: futures_core::Stream<Item = Result<super::OdometryResponse, tonic::Status>>
2155            + Send
2156            + Sync
2157            + 'static;
2158        #[doc = " Subscribe to 'odometry' updates."]
2159        async fn subscribe_odometry(
2160            &self,
2161            request: tonic::Request<super::SubscribeOdometryRequest>,
2162        ) -> Result<tonic::Response<Self::SubscribeOdometryStream>, tonic::Status>;
2163        #[doc = "Server streaming response type for the SubscribePositionVelocityNed method."]
2164        type SubscribePositionVelocityNedStream: futures_core::Stream<Item = Result<super::PositionVelocityNedResponse, tonic::Status>>
2165            + Send
2166            + Sync
2167            + 'static;
2168        #[doc = " Subscribe to 'position velocity' updates."]
2169        async fn subscribe_position_velocity_ned(
2170            &self,
2171            request: tonic::Request<super::SubscribePositionVelocityNedRequest>,
2172        ) -> Result<tonic::Response<Self::SubscribePositionVelocityNedStream>, tonic::Status>;
2173        #[doc = "Server streaming response type for the SubscribeGroundTruth method."]
2174        type SubscribeGroundTruthStream: futures_core::Stream<Item = Result<super::GroundTruthResponse, tonic::Status>>
2175            + Send
2176            + Sync
2177            + 'static;
2178        #[doc = " Subscribe to 'ground truth' updates."]
2179        async fn subscribe_ground_truth(
2180            &self,
2181            request: tonic::Request<super::SubscribeGroundTruthRequest>,
2182        ) -> Result<tonic::Response<Self::SubscribeGroundTruthStream>, tonic::Status>;
2183        #[doc = "Server streaming response type for the SubscribeFixedwingMetrics method."]
2184        type SubscribeFixedwingMetricsStream: futures_core::Stream<Item = Result<super::FixedwingMetricsResponse, tonic::Status>>
2185            + Send
2186            + Sync
2187            + 'static;
2188        #[doc = " Subscribe to 'fixedwing metrics' updates."]
2189        async fn subscribe_fixedwing_metrics(
2190            &self,
2191            request: tonic::Request<super::SubscribeFixedwingMetricsRequest>,
2192        ) -> Result<tonic::Response<Self::SubscribeFixedwingMetricsStream>, tonic::Status>;
2193        #[doc = "Server streaming response type for the SubscribeImu method."]
2194        type SubscribeImuStream: futures_core::Stream<Item = Result<super::ImuResponse, tonic::Status>>
2195            + Send
2196            + Sync
2197            + 'static;
2198        #[doc = " Subscribe to 'IMU' updates."]
2199        async fn subscribe_imu(
2200            &self,
2201            request: tonic::Request<super::SubscribeImuRequest>,
2202        ) -> Result<tonic::Response<Self::SubscribeImuStream>, tonic::Status>;
2203        #[doc = "Server streaming response type for the SubscribeHealthAllOk method."]
2204        type SubscribeHealthAllOkStream: futures_core::Stream<Item = Result<super::HealthAllOkResponse, tonic::Status>>
2205            + Send
2206            + Sync
2207            + 'static;
2208        #[doc = " Subscribe to 'HealthAllOk' updates."]
2209        async fn subscribe_health_all_ok(
2210            &self,
2211            request: tonic::Request<super::SubscribeHealthAllOkRequest>,
2212        ) -> Result<tonic::Response<Self::SubscribeHealthAllOkStream>, tonic::Status>;
2213        #[doc = "Server streaming response type for the SubscribeUnixEpochTime method."]
2214        type SubscribeUnixEpochTimeStream: futures_core::Stream<Item = Result<super::UnixEpochTimeResponse, tonic::Status>>
2215            + Send
2216            + Sync
2217            + 'static;
2218        #[doc = " Subscribe to 'unix epoch time' updates."]
2219        async fn subscribe_unix_epoch_time(
2220            &self,
2221            request: tonic::Request<super::SubscribeUnixEpochTimeRequest>,
2222        ) -> Result<tonic::Response<Self::SubscribeUnixEpochTimeStream>, tonic::Status>;
2223        #[doc = "Server streaming response type for the SubscribeDistanceSensor method."]
2224        type SubscribeDistanceSensorStream: futures_core::Stream<Item = Result<super::DistanceSensorResponse, tonic::Status>>
2225            + Send
2226            + Sync
2227            + 'static;
2228        #[doc = " Subscribe to 'Distance Sensor' updates."]
2229        async fn subscribe_distance_sensor(
2230            &self,
2231            request: tonic::Request<super::SubscribeDistanceSensorRequest>,
2232        ) -> Result<tonic::Response<Self::SubscribeDistanceSensorStream>, tonic::Status>;
2233        #[doc = " Set rate to 'position' updates."]
2234        async fn set_rate_position(
2235            &self,
2236            request: tonic::Request<super::SetRatePositionRequest>,
2237        ) -> Result<tonic::Response<super::SetRatePositionResponse>, tonic::Status>;
2238        #[doc = " Set rate to 'home position' updates."]
2239        async fn set_rate_home(
2240            &self,
2241            request: tonic::Request<super::SetRateHomeRequest>,
2242        ) -> Result<tonic::Response<super::SetRateHomeResponse>, tonic::Status>;
2243        #[doc = " Set rate to in-air updates."]
2244        async fn set_rate_in_air(
2245            &self,
2246            request: tonic::Request<super::SetRateInAirRequest>,
2247        ) -> Result<tonic::Response<super::SetRateInAirResponse>, tonic::Status>;
2248        #[doc = " Set rate to landed state updates"]
2249        async fn set_rate_landed_state(
2250            &self,
2251            request: tonic::Request<super::SetRateLandedStateRequest>,
2252        ) -> Result<tonic::Response<super::SetRateLandedStateResponse>, tonic::Status>;
2253        #[doc = " Set rate to 'attitude' updates."]
2254        async fn set_rate_attitude(
2255            &self,
2256            request: tonic::Request<super::SetRateAttitudeRequest>,
2257        ) -> Result<tonic::Response<super::SetRateAttitudeResponse>, tonic::Status>;
2258        #[doc = " Set rate of camera attitude updates."]
2259        async fn set_rate_camera_attitude(
2260            &self,
2261            request: tonic::Request<super::SetRateCameraAttitudeRequest>,
2262        ) -> Result<tonic::Response<super::SetRateCameraAttitudeResponse>, tonic::Status>;
2263        #[doc = " Set rate to 'ground speed' updates (NED)."]
2264        async fn set_rate_velocity_ned(
2265            &self,
2266            request: tonic::Request<super::SetRateVelocityNedRequest>,
2267        ) -> Result<tonic::Response<super::SetRateVelocityNedResponse>, tonic::Status>;
2268        #[doc = " Set rate to 'GPS info' updates."]
2269        async fn set_rate_gps_info(
2270            &self,
2271            request: tonic::Request<super::SetRateGpsInfoRequest>,
2272        ) -> Result<tonic::Response<super::SetRateGpsInfoResponse>, tonic::Status>;
2273        #[doc = " Set rate to 'battery' updates."]
2274        async fn set_rate_battery(
2275            &self,
2276            request: tonic::Request<super::SetRateBatteryRequest>,
2277        ) -> Result<tonic::Response<super::SetRateBatteryResponse>, tonic::Status>;
2278        #[doc = " Set rate to 'RC status' updates."]
2279        async fn set_rate_rc_status(
2280            &self,
2281            request: tonic::Request<super::SetRateRcStatusRequest>,
2282        ) -> Result<tonic::Response<super::SetRateRcStatusResponse>, tonic::Status>;
2283        #[doc = " Set rate to 'actuator control target' updates."]
2284        async fn set_rate_actuator_control_target(
2285            &self,
2286            request: tonic::Request<super::SetRateActuatorControlTargetRequest>,
2287        ) -> Result<tonic::Response<super::SetRateActuatorControlTargetResponse>, tonic::Status>;
2288        #[doc = " Set rate to 'actuator output status' updates."]
2289        async fn set_rate_actuator_output_status(
2290            &self,
2291            request: tonic::Request<super::SetRateActuatorOutputStatusRequest>,
2292        ) -> Result<tonic::Response<super::SetRateActuatorOutputStatusResponse>, tonic::Status>;
2293        #[doc = " Set rate to 'odometry' updates."]
2294        async fn set_rate_odometry(
2295            &self,
2296            request: tonic::Request<super::SetRateOdometryRequest>,
2297        ) -> Result<tonic::Response<super::SetRateOdometryResponse>, tonic::Status>;
2298        #[doc = " Set rate to 'position velocity' updates."]
2299        async fn set_rate_position_velocity_ned(
2300            &self,
2301            request: tonic::Request<super::SetRatePositionVelocityNedRequest>,
2302        ) -> Result<tonic::Response<super::SetRatePositionVelocityNedResponse>, tonic::Status>;
2303        #[doc = " Set rate to 'ground truth' updates."]
2304        async fn set_rate_ground_truth(
2305            &self,
2306            request: tonic::Request<super::SetRateGroundTruthRequest>,
2307        ) -> Result<tonic::Response<super::SetRateGroundTruthResponse>, tonic::Status>;
2308        #[doc = " Set rate to 'fixedwing metrics' updates."]
2309        async fn set_rate_fixedwing_metrics(
2310            &self,
2311            request: tonic::Request<super::SetRateFixedwingMetricsRequest>,
2312        ) -> Result<tonic::Response<super::SetRateFixedwingMetricsResponse>, tonic::Status>;
2313        #[doc = " Set rate to 'IMU' updates."]
2314        async fn set_rate_imu(
2315            &self,
2316            request: tonic::Request<super::SetRateImuRequest>,
2317        ) -> Result<tonic::Response<super::SetRateImuResponse>, tonic::Status>;
2318        #[doc = " Set rate to 'unix epoch time' updates."]
2319        async fn set_rate_unix_epoch_time(
2320            &self,
2321            request: tonic::Request<super::SetRateUnixEpochTimeRequest>,
2322        ) -> Result<tonic::Response<super::SetRateUnixEpochTimeResponse>, tonic::Status>;
2323        #[doc = " Set rate to 'Distance Sensor' updates."]
2324        async fn set_rate_distance_sensor(
2325            &self,
2326            request: tonic::Request<super::SetRateDistanceSensorRequest>,
2327        ) -> Result<tonic::Response<super::SetRateDistanceSensorResponse>, tonic::Status>;
2328        #[doc = " Get the GPS location of where the estimator has been initialized."]
2329        async fn get_gps_global_origin(
2330            &self,
2331            request: tonic::Request<super::GetGpsGlobalOriginRequest>,
2332        ) -> Result<tonic::Response<super::GetGpsGlobalOriginResponse>, tonic::Status>;
2333    }
2334    #[doc = ""]
2335    #[doc = " Allow users to get vehicle telemetry and state information"]
2336    #[doc = " (e.g. battery, GPS, RC connection, flight mode etc.) and set telemetry update rates."]
2337    #[derive(Debug)]
2338    pub struct TelemetryServiceServer<T: TelemetryService> {
2339        inner: _Inner<T>,
2340        accept_compression_encodings: (),
2341        send_compression_encodings: (),
2342    }
2343    struct _Inner<T>(Arc<T>);
2344    impl<T: TelemetryService> TelemetryServiceServer<T> {
2345        pub fn new(inner: T) -> Self {
2346            let inner = Arc::new(inner);
2347            let inner = _Inner(inner);
2348            Self {
2349                inner,
2350                accept_compression_encodings: Default::default(),
2351                send_compression_encodings: Default::default(),
2352            }
2353        }
2354        pub fn with_interceptor<F>(inner: T, interceptor: F) -> InterceptedService<Self, F>
2355        where
2356            F: tonic::service::Interceptor,
2357        {
2358            InterceptedService::new(Self::new(inner), interceptor)
2359        }
2360    }
2361    impl<T, B> tonic::codegen::Service<http::Request<B>> for TelemetryServiceServer<T>
2362    where
2363        T: TelemetryService,
2364        B: Body + Send + Sync + 'static,
2365        B::Error: Into<StdError> + Send + 'static,
2366    {
2367        type Response = http::Response<tonic::body::BoxBody>;
2368        type Error = Never;
2369        type Future = BoxFuture<Self::Response, Self::Error>;
2370        fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
2371            Poll::Ready(Ok(()))
2372        }
2373        fn call(&mut self, req: http::Request<B>) -> Self::Future {
2374            let inner = self.inner.clone();
2375            match req.uri().path() {
2376                "/mavsdk.rpc.telemetry.TelemetryService/SubscribePosition" => {
2377                    #[allow(non_camel_case_types)]
2378                    struct SubscribePositionSvc<T: TelemetryService>(pub Arc<T>);
2379                    impl<T: TelemetryService>
2380                        tonic::server::ServerStreamingService<super::SubscribePositionRequest>
2381                        for SubscribePositionSvc<T>
2382                    {
2383                        type Response = super::PositionResponse;
2384                        type ResponseStream = T::SubscribePositionStream;
2385                        type Future =
2386                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2387                        fn call(
2388                            &mut self,
2389                            request: tonic::Request<super::SubscribePositionRequest>,
2390                        ) -> Self::Future {
2391                            let inner = self.0.clone();
2392                            let fut = async move { (*inner).subscribe_position(request).await };
2393                            Box::pin(fut)
2394                        }
2395                    }
2396                    let accept_compression_encodings = self.accept_compression_encodings;
2397                    let send_compression_encodings = self.send_compression_encodings;
2398                    let inner = self.inner.clone();
2399                    let fut = async move {
2400                        let inner = inner.0;
2401                        let method = SubscribePositionSvc(inner);
2402                        let codec = tonic::codec::ProstCodec::default();
2403                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2404                            accept_compression_encodings,
2405                            send_compression_encodings,
2406                        );
2407                        let res = grpc.server_streaming(method, req).await;
2408                        Ok(res)
2409                    };
2410                    Box::pin(fut)
2411                }
2412                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeHome" => {
2413                    #[allow(non_camel_case_types)]
2414                    struct SubscribeHomeSvc<T: TelemetryService>(pub Arc<T>);
2415                    impl<T: TelemetryService>
2416                        tonic::server::ServerStreamingService<super::SubscribeHomeRequest>
2417                        for SubscribeHomeSvc<T>
2418                    {
2419                        type Response = super::HomeResponse;
2420                        type ResponseStream = T::SubscribeHomeStream;
2421                        type Future =
2422                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2423                        fn call(
2424                            &mut self,
2425                            request: tonic::Request<super::SubscribeHomeRequest>,
2426                        ) -> Self::Future {
2427                            let inner = self.0.clone();
2428                            let fut = async move { (*inner).subscribe_home(request).await };
2429                            Box::pin(fut)
2430                        }
2431                    }
2432                    let accept_compression_encodings = self.accept_compression_encodings;
2433                    let send_compression_encodings = self.send_compression_encodings;
2434                    let inner = self.inner.clone();
2435                    let fut = async move {
2436                        let inner = inner.0;
2437                        let method = SubscribeHomeSvc(inner);
2438                        let codec = tonic::codec::ProstCodec::default();
2439                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2440                            accept_compression_encodings,
2441                            send_compression_encodings,
2442                        );
2443                        let res = grpc.server_streaming(method, req).await;
2444                        Ok(res)
2445                    };
2446                    Box::pin(fut)
2447                }
2448                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeInAir" => {
2449                    #[allow(non_camel_case_types)]
2450                    struct SubscribeInAirSvc<T: TelemetryService>(pub Arc<T>);
2451                    impl<T: TelemetryService>
2452                        tonic::server::ServerStreamingService<super::SubscribeInAirRequest>
2453                        for SubscribeInAirSvc<T>
2454                    {
2455                        type Response = super::InAirResponse;
2456                        type ResponseStream = T::SubscribeInAirStream;
2457                        type Future =
2458                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2459                        fn call(
2460                            &mut self,
2461                            request: tonic::Request<super::SubscribeInAirRequest>,
2462                        ) -> Self::Future {
2463                            let inner = self.0.clone();
2464                            let fut = async move { (*inner).subscribe_in_air(request).await };
2465                            Box::pin(fut)
2466                        }
2467                    }
2468                    let accept_compression_encodings = self.accept_compression_encodings;
2469                    let send_compression_encodings = self.send_compression_encodings;
2470                    let inner = self.inner.clone();
2471                    let fut = async move {
2472                        let inner = inner.0;
2473                        let method = SubscribeInAirSvc(inner);
2474                        let codec = tonic::codec::ProstCodec::default();
2475                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2476                            accept_compression_encodings,
2477                            send_compression_encodings,
2478                        );
2479                        let res = grpc.server_streaming(method, req).await;
2480                        Ok(res)
2481                    };
2482                    Box::pin(fut)
2483                }
2484                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeLandedState" => {
2485                    #[allow(non_camel_case_types)]
2486                    struct SubscribeLandedStateSvc<T: TelemetryService>(pub Arc<T>);
2487                    impl<T: TelemetryService>
2488                        tonic::server::ServerStreamingService<super::SubscribeLandedStateRequest>
2489                        for SubscribeLandedStateSvc<T>
2490                    {
2491                        type Response = super::LandedStateResponse;
2492                        type ResponseStream = T::SubscribeLandedStateStream;
2493                        type Future =
2494                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2495                        fn call(
2496                            &mut self,
2497                            request: tonic::Request<super::SubscribeLandedStateRequest>,
2498                        ) -> Self::Future {
2499                            let inner = self.0.clone();
2500                            let fut = async move { (*inner).subscribe_landed_state(request).await };
2501                            Box::pin(fut)
2502                        }
2503                    }
2504                    let accept_compression_encodings = self.accept_compression_encodings;
2505                    let send_compression_encodings = self.send_compression_encodings;
2506                    let inner = self.inner.clone();
2507                    let fut = async move {
2508                        let inner = inner.0;
2509                        let method = SubscribeLandedStateSvc(inner);
2510                        let codec = tonic::codec::ProstCodec::default();
2511                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2512                            accept_compression_encodings,
2513                            send_compression_encodings,
2514                        );
2515                        let res = grpc.server_streaming(method, req).await;
2516                        Ok(res)
2517                    };
2518                    Box::pin(fut)
2519                }
2520                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeArmed" => {
2521                    #[allow(non_camel_case_types)]
2522                    struct SubscribeArmedSvc<T: TelemetryService>(pub Arc<T>);
2523                    impl<T: TelemetryService>
2524                        tonic::server::ServerStreamingService<super::SubscribeArmedRequest>
2525                        for SubscribeArmedSvc<T>
2526                    {
2527                        type Response = super::ArmedResponse;
2528                        type ResponseStream = T::SubscribeArmedStream;
2529                        type Future =
2530                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2531                        fn call(
2532                            &mut self,
2533                            request: tonic::Request<super::SubscribeArmedRequest>,
2534                        ) -> Self::Future {
2535                            let inner = self.0.clone();
2536                            let fut = async move { (*inner).subscribe_armed(request).await };
2537                            Box::pin(fut)
2538                        }
2539                    }
2540                    let accept_compression_encodings = self.accept_compression_encodings;
2541                    let send_compression_encodings = self.send_compression_encodings;
2542                    let inner = self.inner.clone();
2543                    let fut = async move {
2544                        let inner = inner.0;
2545                        let method = SubscribeArmedSvc(inner);
2546                        let codec = tonic::codec::ProstCodec::default();
2547                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2548                            accept_compression_encodings,
2549                            send_compression_encodings,
2550                        );
2551                        let res = grpc.server_streaming(method, req).await;
2552                        Ok(res)
2553                    };
2554                    Box::pin(fut)
2555                }
2556                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeAttitudeQuaternion" => {
2557                    #[allow(non_camel_case_types)]
2558                    struct SubscribeAttitudeQuaternionSvc<T: TelemetryService>(pub Arc<T>);
2559                    impl<T: TelemetryService>
2560                        tonic::server::ServerStreamingService<
2561                            super::SubscribeAttitudeQuaternionRequest,
2562                        > for SubscribeAttitudeQuaternionSvc<T>
2563                    {
2564                        type Response = super::AttitudeQuaternionResponse;
2565                        type ResponseStream = T::SubscribeAttitudeQuaternionStream;
2566                        type Future =
2567                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2568                        fn call(
2569                            &mut self,
2570                            request: tonic::Request<super::SubscribeAttitudeQuaternionRequest>,
2571                        ) -> Self::Future {
2572                            let inner = self.0.clone();
2573                            let fut = async move {
2574                                (*inner).subscribe_attitude_quaternion(request).await
2575                            };
2576                            Box::pin(fut)
2577                        }
2578                    }
2579                    let accept_compression_encodings = self.accept_compression_encodings;
2580                    let send_compression_encodings = self.send_compression_encodings;
2581                    let inner = self.inner.clone();
2582                    let fut = async move {
2583                        let inner = inner.0;
2584                        let method = SubscribeAttitudeQuaternionSvc(inner);
2585                        let codec = tonic::codec::ProstCodec::default();
2586                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2587                            accept_compression_encodings,
2588                            send_compression_encodings,
2589                        );
2590                        let res = grpc.server_streaming(method, req).await;
2591                        Ok(res)
2592                    };
2593                    Box::pin(fut)
2594                }
2595                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeAttitudeEuler" => {
2596                    #[allow(non_camel_case_types)]
2597                    struct SubscribeAttitudeEulerSvc<T: TelemetryService>(pub Arc<T>);
2598                    impl<T: TelemetryService>
2599                        tonic::server::ServerStreamingService<super::SubscribeAttitudeEulerRequest>
2600                        for SubscribeAttitudeEulerSvc<T>
2601                    {
2602                        type Response = super::AttitudeEulerResponse;
2603                        type ResponseStream = T::SubscribeAttitudeEulerStream;
2604                        type Future =
2605                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2606                        fn call(
2607                            &mut self,
2608                            request: tonic::Request<super::SubscribeAttitudeEulerRequest>,
2609                        ) -> Self::Future {
2610                            let inner = self.0.clone();
2611                            let fut =
2612                                async move { (*inner).subscribe_attitude_euler(request).await };
2613                            Box::pin(fut)
2614                        }
2615                    }
2616                    let accept_compression_encodings = self.accept_compression_encodings;
2617                    let send_compression_encodings = self.send_compression_encodings;
2618                    let inner = self.inner.clone();
2619                    let fut = async move {
2620                        let inner = inner.0;
2621                        let method = SubscribeAttitudeEulerSvc(inner);
2622                        let codec = tonic::codec::ProstCodec::default();
2623                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2624                            accept_compression_encodings,
2625                            send_compression_encodings,
2626                        );
2627                        let res = grpc.server_streaming(method, req).await;
2628                        Ok(res)
2629                    };
2630                    Box::pin(fut)
2631                }
2632                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeAttitudeAngularVelocityBody" => {
2633                    #[allow(non_camel_case_types)]
2634                    struct SubscribeAttitudeAngularVelocityBodySvc<T: TelemetryService>(pub Arc<T>);
2635                    impl<T: TelemetryService>
2636                        tonic::server::ServerStreamingService<
2637                            super::SubscribeAttitudeAngularVelocityBodyRequest,
2638                        > for SubscribeAttitudeAngularVelocityBodySvc<T>
2639                    {
2640                        type Response = super::AttitudeAngularVelocityBodyResponse;
2641                        type ResponseStream = T::SubscribeAttitudeAngularVelocityBodyStream;
2642                        type Future =
2643                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2644                        fn call(
2645                            &mut self,
2646                            request: tonic::Request<
2647                                super::SubscribeAttitudeAngularVelocityBodyRequest,
2648                            >,
2649                        ) -> Self::Future {
2650                            let inner = self.0.clone();
2651                            let fut = async move {
2652                                (*inner)
2653                                    .subscribe_attitude_angular_velocity_body(request)
2654                                    .await
2655                            };
2656                            Box::pin(fut)
2657                        }
2658                    }
2659                    let accept_compression_encodings = self.accept_compression_encodings;
2660                    let send_compression_encodings = self.send_compression_encodings;
2661                    let inner = self.inner.clone();
2662                    let fut = async move {
2663                        let inner = inner.0;
2664                        let method = SubscribeAttitudeAngularVelocityBodySvc(inner);
2665                        let codec = tonic::codec::ProstCodec::default();
2666                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2667                            accept_compression_encodings,
2668                            send_compression_encodings,
2669                        );
2670                        let res = grpc.server_streaming(method, req).await;
2671                        Ok(res)
2672                    };
2673                    Box::pin(fut)
2674                }
2675                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeCameraAttitudeQuaternion" => {
2676                    #[allow(non_camel_case_types)]
2677                    struct SubscribeCameraAttitudeQuaternionSvc<T: TelemetryService>(pub Arc<T>);
2678                    impl<T: TelemetryService>
2679                        tonic::server::ServerStreamingService<
2680                            super::SubscribeCameraAttitudeQuaternionRequest,
2681                        > for SubscribeCameraAttitudeQuaternionSvc<T>
2682                    {
2683                        type Response = super::CameraAttitudeQuaternionResponse;
2684                        type ResponseStream = T::SubscribeCameraAttitudeQuaternionStream;
2685                        type Future =
2686                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2687                        fn call(
2688                            &mut self,
2689                            request: tonic::Request<
2690                                super::SubscribeCameraAttitudeQuaternionRequest,
2691                            >,
2692                        ) -> Self::Future {
2693                            let inner = self.0.clone();
2694                            let fut = async move {
2695                                (*inner).subscribe_camera_attitude_quaternion(request).await
2696                            };
2697                            Box::pin(fut)
2698                        }
2699                    }
2700                    let accept_compression_encodings = self.accept_compression_encodings;
2701                    let send_compression_encodings = self.send_compression_encodings;
2702                    let inner = self.inner.clone();
2703                    let fut = async move {
2704                        let inner = inner.0;
2705                        let method = SubscribeCameraAttitudeQuaternionSvc(inner);
2706                        let codec = tonic::codec::ProstCodec::default();
2707                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2708                            accept_compression_encodings,
2709                            send_compression_encodings,
2710                        );
2711                        let res = grpc.server_streaming(method, req).await;
2712                        Ok(res)
2713                    };
2714                    Box::pin(fut)
2715                }
2716                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeCameraAttitudeEuler" => {
2717                    #[allow(non_camel_case_types)]
2718                    struct SubscribeCameraAttitudeEulerSvc<T: TelemetryService>(pub Arc<T>);
2719                    impl<T: TelemetryService>
2720                        tonic::server::ServerStreamingService<
2721                            super::SubscribeCameraAttitudeEulerRequest,
2722                        > for SubscribeCameraAttitudeEulerSvc<T>
2723                    {
2724                        type Response = super::CameraAttitudeEulerResponse;
2725                        type ResponseStream = T::SubscribeCameraAttitudeEulerStream;
2726                        type Future =
2727                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2728                        fn call(
2729                            &mut self,
2730                            request: tonic::Request<super::SubscribeCameraAttitudeEulerRequest>,
2731                        ) -> Self::Future {
2732                            let inner = self.0.clone();
2733                            let fut = async move {
2734                                (*inner).subscribe_camera_attitude_euler(request).await
2735                            };
2736                            Box::pin(fut)
2737                        }
2738                    }
2739                    let accept_compression_encodings = self.accept_compression_encodings;
2740                    let send_compression_encodings = self.send_compression_encodings;
2741                    let inner = self.inner.clone();
2742                    let fut = async move {
2743                        let inner = inner.0;
2744                        let method = SubscribeCameraAttitudeEulerSvc(inner);
2745                        let codec = tonic::codec::ProstCodec::default();
2746                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2747                            accept_compression_encodings,
2748                            send_compression_encodings,
2749                        );
2750                        let res = grpc.server_streaming(method, req).await;
2751                        Ok(res)
2752                    };
2753                    Box::pin(fut)
2754                }
2755                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeVelocityNed" => {
2756                    #[allow(non_camel_case_types)]
2757                    struct SubscribeVelocityNedSvc<T: TelemetryService>(pub Arc<T>);
2758                    impl<T: TelemetryService>
2759                        tonic::server::ServerStreamingService<super::SubscribeVelocityNedRequest>
2760                        for SubscribeVelocityNedSvc<T>
2761                    {
2762                        type Response = super::VelocityNedResponse;
2763                        type ResponseStream = T::SubscribeVelocityNedStream;
2764                        type Future =
2765                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2766                        fn call(
2767                            &mut self,
2768                            request: tonic::Request<super::SubscribeVelocityNedRequest>,
2769                        ) -> Self::Future {
2770                            let inner = self.0.clone();
2771                            let fut = async move { (*inner).subscribe_velocity_ned(request).await };
2772                            Box::pin(fut)
2773                        }
2774                    }
2775                    let accept_compression_encodings = self.accept_compression_encodings;
2776                    let send_compression_encodings = self.send_compression_encodings;
2777                    let inner = self.inner.clone();
2778                    let fut = async move {
2779                        let inner = inner.0;
2780                        let method = SubscribeVelocityNedSvc(inner);
2781                        let codec = tonic::codec::ProstCodec::default();
2782                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2783                            accept_compression_encodings,
2784                            send_compression_encodings,
2785                        );
2786                        let res = grpc.server_streaming(method, req).await;
2787                        Ok(res)
2788                    };
2789                    Box::pin(fut)
2790                }
2791                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeGpsInfo" => {
2792                    #[allow(non_camel_case_types)]
2793                    struct SubscribeGpsInfoSvc<T: TelemetryService>(pub Arc<T>);
2794                    impl<T: TelemetryService>
2795                        tonic::server::ServerStreamingService<super::SubscribeGpsInfoRequest>
2796                        for SubscribeGpsInfoSvc<T>
2797                    {
2798                        type Response = super::GpsInfoResponse;
2799                        type ResponseStream = T::SubscribeGpsInfoStream;
2800                        type Future =
2801                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2802                        fn call(
2803                            &mut self,
2804                            request: tonic::Request<super::SubscribeGpsInfoRequest>,
2805                        ) -> Self::Future {
2806                            let inner = self.0.clone();
2807                            let fut = async move { (*inner).subscribe_gps_info(request).await };
2808                            Box::pin(fut)
2809                        }
2810                    }
2811                    let accept_compression_encodings = self.accept_compression_encodings;
2812                    let send_compression_encodings = self.send_compression_encodings;
2813                    let inner = self.inner.clone();
2814                    let fut = async move {
2815                        let inner = inner.0;
2816                        let method = SubscribeGpsInfoSvc(inner);
2817                        let codec = tonic::codec::ProstCodec::default();
2818                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2819                            accept_compression_encodings,
2820                            send_compression_encodings,
2821                        );
2822                        let res = grpc.server_streaming(method, req).await;
2823                        Ok(res)
2824                    };
2825                    Box::pin(fut)
2826                }
2827                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeBattery" => {
2828                    #[allow(non_camel_case_types)]
2829                    struct SubscribeBatterySvc<T: TelemetryService>(pub Arc<T>);
2830                    impl<T: TelemetryService>
2831                        tonic::server::ServerStreamingService<super::SubscribeBatteryRequest>
2832                        for SubscribeBatterySvc<T>
2833                    {
2834                        type Response = super::BatteryResponse;
2835                        type ResponseStream = T::SubscribeBatteryStream;
2836                        type Future =
2837                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2838                        fn call(
2839                            &mut self,
2840                            request: tonic::Request<super::SubscribeBatteryRequest>,
2841                        ) -> Self::Future {
2842                            let inner = self.0.clone();
2843                            let fut = async move { (*inner).subscribe_battery(request).await };
2844                            Box::pin(fut)
2845                        }
2846                    }
2847                    let accept_compression_encodings = self.accept_compression_encodings;
2848                    let send_compression_encodings = self.send_compression_encodings;
2849                    let inner = self.inner.clone();
2850                    let fut = async move {
2851                        let inner = inner.0;
2852                        let method = SubscribeBatterySvc(inner);
2853                        let codec = tonic::codec::ProstCodec::default();
2854                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2855                            accept_compression_encodings,
2856                            send_compression_encodings,
2857                        );
2858                        let res = grpc.server_streaming(method, req).await;
2859                        Ok(res)
2860                    };
2861                    Box::pin(fut)
2862                }
2863                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeFlightMode" => {
2864                    #[allow(non_camel_case_types)]
2865                    struct SubscribeFlightModeSvc<T: TelemetryService>(pub Arc<T>);
2866                    impl<T: TelemetryService>
2867                        tonic::server::ServerStreamingService<super::SubscribeFlightModeRequest>
2868                        for SubscribeFlightModeSvc<T>
2869                    {
2870                        type Response = super::FlightModeResponse;
2871                        type ResponseStream = T::SubscribeFlightModeStream;
2872                        type Future =
2873                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2874                        fn call(
2875                            &mut self,
2876                            request: tonic::Request<super::SubscribeFlightModeRequest>,
2877                        ) -> Self::Future {
2878                            let inner = self.0.clone();
2879                            let fut = async move { (*inner).subscribe_flight_mode(request).await };
2880                            Box::pin(fut)
2881                        }
2882                    }
2883                    let accept_compression_encodings = self.accept_compression_encodings;
2884                    let send_compression_encodings = self.send_compression_encodings;
2885                    let inner = self.inner.clone();
2886                    let fut = async move {
2887                        let inner = inner.0;
2888                        let method = SubscribeFlightModeSvc(inner);
2889                        let codec = tonic::codec::ProstCodec::default();
2890                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2891                            accept_compression_encodings,
2892                            send_compression_encodings,
2893                        );
2894                        let res = grpc.server_streaming(method, req).await;
2895                        Ok(res)
2896                    };
2897                    Box::pin(fut)
2898                }
2899                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeHealth" => {
2900                    #[allow(non_camel_case_types)]
2901                    struct SubscribeHealthSvc<T: TelemetryService>(pub Arc<T>);
2902                    impl<T: TelemetryService>
2903                        tonic::server::ServerStreamingService<super::SubscribeHealthRequest>
2904                        for SubscribeHealthSvc<T>
2905                    {
2906                        type Response = super::HealthResponse;
2907                        type ResponseStream = T::SubscribeHealthStream;
2908                        type Future =
2909                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2910                        fn call(
2911                            &mut self,
2912                            request: tonic::Request<super::SubscribeHealthRequest>,
2913                        ) -> Self::Future {
2914                            let inner = self.0.clone();
2915                            let fut = async move { (*inner).subscribe_health(request).await };
2916                            Box::pin(fut)
2917                        }
2918                    }
2919                    let accept_compression_encodings = self.accept_compression_encodings;
2920                    let send_compression_encodings = self.send_compression_encodings;
2921                    let inner = self.inner.clone();
2922                    let fut = async move {
2923                        let inner = inner.0;
2924                        let method = SubscribeHealthSvc(inner);
2925                        let codec = tonic::codec::ProstCodec::default();
2926                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2927                            accept_compression_encodings,
2928                            send_compression_encodings,
2929                        );
2930                        let res = grpc.server_streaming(method, req).await;
2931                        Ok(res)
2932                    };
2933                    Box::pin(fut)
2934                }
2935                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeRcStatus" => {
2936                    #[allow(non_camel_case_types)]
2937                    struct SubscribeRcStatusSvc<T: TelemetryService>(pub Arc<T>);
2938                    impl<T: TelemetryService>
2939                        tonic::server::ServerStreamingService<super::SubscribeRcStatusRequest>
2940                        for SubscribeRcStatusSvc<T>
2941                    {
2942                        type Response = super::RcStatusResponse;
2943                        type ResponseStream = T::SubscribeRcStatusStream;
2944                        type Future =
2945                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2946                        fn call(
2947                            &mut self,
2948                            request: tonic::Request<super::SubscribeRcStatusRequest>,
2949                        ) -> Self::Future {
2950                            let inner = self.0.clone();
2951                            let fut = async move { (*inner).subscribe_rc_status(request).await };
2952                            Box::pin(fut)
2953                        }
2954                    }
2955                    let accept_compression_encodings = self.accept_compression_encodings;
2956                    let send_compression_encodings = self.send_compression_encodings;
2957                    let inner = self.inner.clone();
2958                    let fut = async move {
2959                        let inner = inner.0;
2960                        let method = SubscribeRcStatusSvc(inner);
2961                        let codec = tonic::codec::ProstCodec::default();
2962                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2963                            accept_compression_encodings,
2964                            send_compression_encodings,
2965                        );
2966                        let res = grpc.server_streaming(method, req).await;
2967                        Ok(res)
2968                    };
2969                    Box::pin(fut)
2970                }
2971                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeStatusText" => {
2972                    #[allow(non_camel_case_types)]
2973                    struct SubscribeStatusTextSvc<T: TelemetryService>(pub Arc<T>);
2974                    impl<T: TelemetryService>
2975                        tonic::server::ServerStreamingService<super::SubscribeStatusTextRequest>
2976                        for SubscribeStatusTextSvc<T>
2977                    {
2978                        type Response = super::StatusTextResponse;
2979                        type ResponseStream = T::SubscribeStatusTextStream;
2980                        type Future =
2981                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
2982                        fn call(
2983                            &mut self,
2984                            request: tonic::Request<super::SubscribeStatusTextRequest>,
2985                        ) -> Self::Future {
2986                            let inner = self.0.clone();
2987                            let fut = async move { (*inner).subscribe_status_text(request).await };
2988                            Box::pin(fut)
2989                        }
2990                    }
2991                    let accept_compression_encodings = self.accept_compression_encodings;
2992                    let send_compression_encodings = self.send_compression_encodings;
2993                    let inner = self.inner.clone();
2994                    let fut = async move {
2995                        let inner = inner.0;
2996                        let method = SubscribeStatusTextSvc(inner);
2997                        let codec = tonic::codec::ProstCodec::default();
2998                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
2999                            accept_compression_encodings,
3000                            send_compression_encodings,
3001                        );
3002                        let res = grpc.server_streaming(method, req).await;
3003                        Ok(res)
3004                    };
3005                    Box::pin(fut)
3006                }
3007                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeActuatorControlTarget" => {
3008                    #[allow(non_camel_case_types)]
3009                    struct SubscribeActuatorControlTargetSvc<T: TelemetryService>(pub Arc<T>);
3010                    impl<T: TelemetryService>
3011                        tonic::server::ServerStreamingService<
3012                            super::SubscribeActuatorControlTargetRequest,
3013                        > for SubscribeActuatorControlTargetSvc<T>
3014                    {
3015                        type Response = super::ActuatorControlTargetResponse;
3016                        type ResponseStream = T::SubscribeActuatorControlTargetStream;
3017                        type Future =
3018                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3019                        fn call(
3020                            &mut self,
3021                            request: tonic::Request<super::SubscribeActuatorControlTargetRequest>,
3022                        ) -> Self::Future {
3023                            let inner = self.0.clone();
3024                            let fut = async move {
3025                                (*inner).subscribe_actuator_control_target(request).await
3026                            };
3027                            Box::pin(fut)
3028                        }
3029                    }
3030                    let accept_compression_encodings = self.accept_compression_encodings;
3031                    let send_compression_encodings = self.send_compression_encodings;
3032                    let inner = self.inner.clone();
3033                    let fut = async move {
3034                        let inner = inner.0;
3035                        let method = SubscribeActuatorControlTargetSvc(inner);
3036                        let codec = tonic::codec::ProstCodec::default();
3037                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3038                            accept_compression_encodings,
3039                            send_compression_encodings,
3040                        );
3041                        let res = grpc.server_streaming(method, req).await;
3042                        Ok(res)
3043                    };
3044                    Box::pin(fut)
3045                }
3046                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeActuatorOutputStatus" => {
3047                    #[allow(non_camel_case_types)]
3048                    struct SubscribeActuatorOutputStatusSvc<T: TelemetryService>(pub Arc<T>);
3049                    impl<T: TelemetryService>
3050                        tonic::server::ServerStreamingService<
3051                            super::SubscribeActuatorOutputStatusRequest,
3052                        > for SubscribeActuatorOutputStatusSvc<T>
3053                    {
3054                        type Response = super::ActuatorOutputStatusResponse;
3055                        type ResponseStream = T::SubscribeActuatorOutputStatusStream;
3056                        type Future =
3057                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3058                        fn call(
3059                            &mut self,
3060                            request: tonic::Request<super::SubscribeActuatorOutputStatusRequest>,
3061                        ) -> Self::Future {
3062                            let inner = self.0.clone();
3063                            let fut = async move {
3064                                (*inner).subscribe_actuator_output_status(request).await
3065                            };
3066                            Box::pin(fut)
3067                        }
3068                    }
3069                    let accept_compression_encodings = self.accept_compression_encodings;
3070                    let send_compression_encodings = self.send_compression_encodings;
3071                    let inner = self.inner.clone();
3072                    let fut = async move {
3073                        let inner = inner.0;
3074                        let method = SubscribeActuatorOutputStatusSvc(inner);
3075                        let codec = tonic::codec::ProstCodec::default();
3076                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3077                            accept_compression_encodings,
3078                            send_compression_encodings,
3079                        );
3080                        let res = grpc.server_streaming(method, req).await;
3081                        Ok(res)
3082                    };
3083                    Box::pin(fut)
3084                }
3085                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeOdometry" => {
3086                    #[allow(non_camel_case_types)]
3087                    struct SubscribeOdometrySvc<T: TelemetryService>(pub Arc<T>);
3088                    impl<T: TelemetryService>
3089                        tonic::server::ServerStreamingService<super::SubscribeOdometryRequest>
3090                        for SubscribeOdometrySvc<T>
3091                    {
3092                        type Response = super::OdometryResponse;
3093                        type ResponseStream = T::SubscribeOdometryStream;
3094                        type Future =
3095                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3096                        fn call(
3097                            &mut self,
3098                            request: tonic::Request<super::SubscribeOdometryRequest>,
3099                        ) -> Self::Future {
3100                            let inner = self.0.clone();
3101                            let fut = async move { (*inner).subscribe_odometry(request).await };
3102                            Box::pin(fut)
3103                        }
3104                    }
3105                    let accept_compression_encodings = self.accept_compression_encodings;
3106                    let send_compression_encodings = self.send_compression_encodings;
3107                    let inner = self.inner.clone();
3108                    let fut = async move {
3109                        let inner = inner.0;
3110                        let method = SubscribeOdometrySvc(inner);
3111                        let codec = tonic::codec::ProstCodec::default();
3112                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3113                            accept_compression_encodings,
3114                            send_compression_encodings,
3115                        );
3116                        let res = grpc.server_streaming(method, req).await;
3117                        Ok(res)
3118                    };
3119                    Box::pin(fut)
3120                }
3121                "/mavsdk.rpc.telemetry.TelemetryService/SubscribePositionVelocityNed" => {
3122                    #[allow(non_camel_case_types)]
3123                    struct SubscribePositionVelocityNedSvc<T: TelemetryService>(pub Arc<T>);
3124                    impl<T: TelemetryService>
3125                        tonic::server::ServerStreamingService<
3126                            super::SubscribePositionVelocityNedRequest,
3127                        > for SubscribePositionVelocityNedSvc<T>
3128                    {
3129                        type Response = super::PositionVelocityNedResponse;
3130                        type ResponseStream = T::SubscribePositionVelocityNedStream;
3131                        type Future =
3132                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3133                        fn call(
3134                            &mut self,
3135                            request: tonic::Request<super::SubscribePositionVelocityNedRequest>,
3136                        ) -> Self::Future {
3137                            let inner = self.0.clone();
3138                            let fut = async move {
3139                                (*inner).subscribe_position_velocity_ned(request).await
3140                            };
3141                            Box::pin(fut)
3142                        }
3143                    }
3144                    let accept_compression_encodings = self.accept_compression_encodings;
3145                    let send_compression_encodings = self.send_compression_encodings;
3146                    let inner = self.inner.clone();
3147                    let fut = async move {
3148                        let inner = inner.0;
3149                        let method = SubscribePositionVelocityNedSvc(inner);
3150                        let codec = tonic::codec::ProstCodec::default();
3151                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3152                            accept_compression_encodings,
3153                            send_compression_encodings,
3154                        );
3155                        let res = grpc.server_streaming(method, req).await;
3156                        Ok(res)
3157                    };
3158                    Box::pin(fut)
3159                }
3160                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeGroundTruth" => {
3161                    #[allow(non_camel_case_types)]
3162                    struct SubscribeGroundTruthSvc<T: TelemetryService>(pub Arc<T>);
3163                    impl<T: TelemetryService>
3164                        tonic::server::ServerStreamingService<super::SubscribeGroundTruthRequest>
3165                        for SubscribeGroundTruthSvc<T>
3166                    {
3167                        type Response = super::GroundTruthResponse;
3168                        type ResponseStream = T::SubscribeGroundTruthStream;
3169                        type Future =
3170                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3171                        fn call(
3172                            &mut self,
3173                            request: tonic::Request<super::SubscribeGroundTruthRequest>,
3174                        ) -> Self::Future {
3175                            let inner = self.0.clone();
3176                            let fut = async move { (*inner).subscribe_ground_truth(request).await };
3177                            Box::pin(fut)
3178                        }
3179                    }
3180                    let accept_compression_encodings = self.accept_compression_encodings;
3181                    let send_compression_encodings = self.send_compression_encodings;
3182                    let inner = self.inner.clone();
3183                    let fut = async move {
3184                        let inner = inner.0;
3185                        let method = SubscribeGroundTruthSvc(inner);
3186                        let codec = tonic::codec::ProstCodec::default();
3187                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3188                            accept_compression_encodings,
3189                            send_compression_encodings,
3190                        );
3191                        let res = grpc.server_streaming(method, req).await;
3192                        Ok(res)
3193                    };
3194                    Box::pin(fut)
3195                }
3196                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeFixedwingMetrics" => {
3197                    #[allow(non_camel_case_types)]
3198                    struct SubscribeFixedwingMetricsSvc<T: TelemetryService>(pub Arc<T>);
3199                    impl<T: TelemetryService>
3200                        tonic::server::ServerStreamingService<
3201                            super::SubscribeFixedwingMetricsRequest,
3202                        > for SubscribeFixedwingMetricsSvc<T>
3203                    {
3204                        type Response = super::FixedwingMetricsResponse;
3205                        type ResponseStream = T::SubscribeFixedwingMetricsStream;
3206                        type Future =
3207                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3208                        fn call(
3209                            &mut self,
3210                            request: tonic::Request<super::SubscribeFixedwingMetricsRequest>,
3211                        ) -> Self::Future {
3212                            let inner = self.0.clone();
3213                            let fut =
3214                                async move { (*inner).subscribe_fixedwing_metrics(request).await };
3215                            Box::pin(fut)
3216                        }
3217                    }
3218                    let accept_compression_encodings = self.accept_compression_encodings;
3219                    let send_compression_encodings = self.send_compression_encodings;
3220                    let inner = self.inner.clone();
3221                    let fut = async move {
3222                        let inner = inner.0;
3223                        let method = SubscribeFixedwingMetricsSvc(inner);
3224                        let codec = tonic::codec::ProstCodec::default();
3225                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3226                            accept_compression_encodings,
3227                            send_compression_encodings,
3228                        );
3229                        let res = grpc.server_streaming(method, req).await;
3230                        Ok(res)
3231                    };
3232                    Box::pin(fut)
3233                }
3234                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeImu" => {
3235                    #[allow(non_camel_case_types)]
3236                    struct SubscribeImuSvc<T: TelemetryService>(pub Arc<T>);
3237                    impl<T: TelemetryService>
3238                        tonic::server::ServerStreamingService<super::SubscribeImuRequest>
3239                        for SubscribeImuSvc<T>
3240                    {
3241                        type Response = super::ImuResponse;
3242                        type ResponseStream = T::SubscribeImuStream;
3243                        type Future =
3244                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3245                        fn call(
3246                            &mut self,
3247                            request: tonic::Request<super::SubscribeImuRequest>,
3248                        ) -> Self::Future {
3249                            let inner = self.0.clone();
3250                            let fut = async move { (*inner).subscribe_imu(request).await };
3251                            Box::pin(fut)
3252                        }
3253                    }
3254                    let accept_compression_encodings = self.accept_compression_encodings;
3255                    let send_compression_encodings = self.send_compression_encodings;
3256                    let inner = self.inner.clone();
3257                    let fut = async move {
3258                        let inner = inner.0;
3259                        let method = SubscribeImuSvc(inner);
3260                        let codec = tonic::codec::ProstCodec::default();
3261                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3262                            accept_compression_encodings,
3263                            send_compression_encodings,
3264                        );
3265                        let res = grpc.server_streaming(method, req).await;
3266                        Ok(res)
3267                    };
3268                    Box::pin(fut)
3269                }
3270                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeHealthAllOk" => {
3271                    #[allow(non_camel_case_types)]
3272                    struct SubscribeHealthAllOkSvc<T: TelemetryService>(pub Arc<T>);
3273                    impl<T: TelemetryService>
3274                        tonic::server::ServerStreamingService<super::SubscribeHealthAllOkRequest>
3275                        for SubscribeHealthAllOkSvc<T>
3276                    {
3277                        type Response = super::HealthAllOkResponse;
3278                        type ResponseStream = T::SubscribeHealthAllOkStream;
3279                        type Future =
3280                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3281                        fn call(
3282                            &mut self,
3283                            request: tonic::Request<super::SubscribeHealthAllOkRequest>,
3284                        ) -> Self::Future {
3285                            let inner = self.0.clone();
3286                            let fut =
3287                                async move { (*inner).subscribe_health_all_ok(request).await };
3288                            Box::pin(fut)
3289                        }
3290                    }
3291                    let accept_compression_encodings = self.accept_compression_encodings;
3292                    let send_compression_encodings = self.send_compression_encodings;
3293                    let inner = self.inner.clone();
3294                    let fut = async move {
3295                        let inner = inner.0;
3296                        let method = SubscribeHealthAllOkSvc(inner);
3297                        let codec = tonic::codec::ProstCodec::default();
3298                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3299                            accept_compression_encodings,
3300                            send_compression_encodings,
3301                        );
3302                        let res = grpc.server_streaming(method, req).await;
3303                        Ok(res)
3304                    };
3305                    Box::pin(fut)
3306                }
3307                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeUnixEpochTime" => {
3308                    #[allow(non_camel_case_types)]
3309                    struct SubscribeUnixEpochTimeSvc<T: TelemetryService>(pub Arc<T>);
3310                    impl<T: TelemetryService>
3311                        tonic::server::ServerStreamingService<super::SubscribeUnixEpochTimeRequest>
3312                        for SubscribeUnixEpochTimeSvc<T>
3313                    {
3314                        type Response = super::UnixEpochTimeResponse;
3315                        type ResponseStream = T::SubscribeUnixEpochTimeStream;
3316                        type Future =
3317                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3318                        fn call(
3319                            &mut self,
3320                            request: tonic::Request<super::SubscribeUnixEpochTimeRequest>,
3321                        ) -> Self::Future {
3322                            let inner = self.0.clone();
3323                            let fut =
3324                                async move { (*inner).subscribe_unix_epoch_time(request).await };
3325                            Box::pin(fut)
3326                        }
3327                    }
3328                    let accept_compression_encodings = self.accept_compression_encodings;
3329                    let send_compression_encodings = self.send_compression_encodings;
3330                    let inner = self.inner.clone();
3331                    let fut = async move {
3332                        let inner = inner.0;
3333                        let method = SubscribeUnixEpochTimeSvc(inner);
3334                        let codec = tonic::codec::ProstCodec::default();
3335                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3336                            accept_compression_encodings,
3337                            send_compression_encodings,
3338                        );
3339                        let res = grpc.server_streaming(method, req).await;
3340                        Ok(res)
3341                    };
3342                    Box::pin(fut)
3343                }
3344                "/mavsdk.rpc.telemetry.TelemetryService/SubscribeDistanceSensor" => {
3345                    #[allow(non_camel_case_types)]
3346                    struct SubscribeDistanceSensorSvc<T: TelemetryService>(pub Arc<T>);
3347                    impl<T: TelemetryService>
3348                        tonic::server::ServerStreamingService<super::SubscribeDistanceSensorRequest>
3349                        for SubscribeDistanceSensorSvc<T>
3350                    {
3351                        type Response = super::DistanceSensorResponse;
3352                        type ResponseStream = T::SubscribeDistanceSensorStream;
3353                        type Future =
3354                            BoxFuture<tonic::Response<Self::ResponseStream>, tonic::Status>;
3355                        fn call(
3356                            &mut self,
3357                            request: tonic::Request<super::SubscribeDistanceSensorRequest>,
3358                        ) -> Self::Future {
3359                            let inner = self.0.clone();
3360                            let fut =
3361                                async move { (*inner).subscribe_distance_sensor(request).await };
3362                            Box::pin(fut)
3363                        }
3364                    }
3365                    let accept_compression_encodings = self.accept_compression_encodings;
3366                    let send_compression_encodings = self.send_compression_encodings;
3367                    let inner = self.inner.clone();
3368                    let fut = async move {
3369                        let inner = inner.0;
3370                        let method = SubscribeDistanceSensorSvc(inner);
3371                        let codec = tonic::codec::ProstCodec::default();
3372                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3373                            accept_compression_encodings,
3374                            send_compression_encodings,
3375                        );
3376                        let res = grpc.server_streaming(method, req).await;
3377                        Ok(res)
3378                    };
3379                    Box::pin(fut)
3380                }
3381                "/mavsdk.rpc.telemetry.TelemetryService/SetRatePosition" => {
3382                    #[allow(non_camel_case_types)]
3383                    struct SetRatePositionSvc<T: TelemetryService>(pub Arc<T>);
3384                    impl<T: TelemetryService>
3385                        tonic::server::UnaryService<super::SetRatePositionRequest>
3386                        for SetRatePositionSvc<T>
3387                    {
3388                        type Response = super::SetRatePositionResponse;
3389                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3390                        fn call(
3391                            &mut self,
3392                            request: tonic::Request<super::SetRatePositionRequest>,
3393                        ) -> Self::Future {
3394                            let inner = self.0.clone();
3395                            let fut = async move { (*inner).set_rate_position(request).await };
3396                            Box::pin(fut)
3397                        }
3398                    }
3399                    let accept_compression_encodings = self.accept_compression_encodings;
3400                    let send_compression_encodings = self.send_compression_encodings;
3401                    let inner = self.inner.clone();
3402                    let fut = async move {
3403                        let inner = inner.0;
3404                        let method = SetRatePositionSvc(inner);
3405                        let codec = tonic::codec::ProstCodec::default();
3406                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3407                            accept_compression_encodings,
3408                            send_compression_encodings,
3409                        );
3410                        let res = grpc.unary(method, req).await;
3411                        Ok(res)
3412                    };
3413                    Box::pin(fut)
3414                }
3415                "/mavsdk.rpc.telemetry.TelemetryService/SetRateHome" => {
3416                    #[allow(non_camel_case_types)]
3417                    struct SetRateHomeSvc<T: TelemetryService>(pub Arc<T>);
3418                    impl<T: TelemetryService> tonic::server::UnaryService<super::SetRateHomeRequest>
3419                        for SetRateHomeSvc<T>
3420                    {
3421                        type Response = super::SetRateHomeResponse;
3422                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3423                        fn call(
3424                            &mut self,
3425                            request: tonic::Request<super::SetRateHomeRequest>,
3426                        ) -> Self::Future {
3427                            let inner = self.0.clone();
3428                            let fut = async move { (*inner).set_rate_home(request).await };
3429                            Box::pin(fut)
3430                        }
3431                    }
3432                    let accept_compression_encodings = self.accept_compression_encodings;
3433                    let send_compression_encodings = self.send_compression_encodings;
3434                    let inner = self.inner.clone();
3435                    let fut = async move {
3436                        let inner = inner.0;
3437                        let method = SetRateHomeSvc(inner);
3438                        let codec = tonic::codec::ProstCodec::default();
3439                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3440                            accept_compression_encodings,
3441                            send_compression_encodings,
3442                        );
3443                        let res = grpc.unary(method, req).await;
3444                        Ok(res)
3445                    };
3446                    Box::pin(fut)
3447                }
3448                "/mavsdk.rpc.telemetry.TelemetryService/SetRateInAir" => {
3449                    #[allow(non_camel_case_types)]
3450                    struct SetRateInAirSvc<T: TelemetryService>(pub Arc<T>);
3451                    impl<T: TelemetryService>
3452                        tonic::server::UnaryService<super::SetRateInAirRequest>
3453                        for SetRateInAirSvc<T>
3454                    {
3455                        type Response = super::SetRateInAirResponse;
3456                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3457                        fn call(
3458                            &mut self,
3459                            request: tonic::Request<super::SetRateInAirRequest>,
3460                        ) -> Self::Future {
3461                            let inner = self.0.clone();
3462                            let fut = async move { (*inner).set_rate_in_air(request).await };
3463                            Box::pin(fut)
3464                        }
3465                    }
3466                    let accept_compression_encodings = self.accept_compression_encodings;
3467                    let send_compression_encodings = self.send_compression_encodings;
3468                    let inner = self.inner.clone();
3469                    let fut = async move {
3470                        let inner = inner.0;
3471                        let method = SetRateInAirSvc(inner);
3472                        let codec = tonic::codec::ProstCodec::default();
3473                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3474                            accept_compression_encodings,
3475                            send_compression_encodings,
3476                        );
3477                        let res = grpc.unary(method, req).await;
3478                        Ok(res)
3479                    };
3480                    Box::pin(fut)
3481                }
3482                "/mavsdk.rpc.telemetry.TelemetryService/SetRateLandedState" => {
3483                    #[allow(non_camel_case_types)]
3484                    struct SetRateLandedStateSvc<T: TelemetryService>(pub Arc<T>);
3485                    impl<T: TelemetryService>
3486                        tonic::server::UnaryService<super::SetRateLandedStateRequest>
3487                        for SetRateLandedStateSvc<T>
3488                    {
3489                        type Response = super::SetRateLandedStateResponse;
3490                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3491                        fn call(
3492                            &mut self,
3493                            request: tonic::Request<super::SetRateLandedStateRequest>,
3494                        ) -> Self::Future {
3495                            let inner = self.0.clone();
3496                            let fut = async move { (*inner).set_rate_landed_state(request).await };
3497                            Box::pin(fut)
3498                        }
3499                    }
3500                    let accept_compression_encodings = self.accept_compression_encodings;
3501                    let send_compression_encodings = self.send_compression_encodings;
3502                    let inner = self.inner.clone();
3503                    let fut = async move {
3504                        let inner = inner.0;
3505                        let method = SetRateLandedStateSvc(inner);
3506                        let codec = tonic::codec::ProstCodec::default();
3507                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3508                            accept_compression_encodings,
3509                            send_compression_encodings,
3510                        );
3511                        let res = grpc.unary(method, req).await;
3512                        Ok(res)
3513                    };
3514                    Box::pin(fut)
3515                }
3516                "/mavsdk.rpc.telemetry.TelemetryService/SetRateAttitude" => {
3517                    #[allow(non_camel_case_types)]
3518                    struct SetRateAttitudeSvc<T: TelemetryService>(pub Arc<T>);
3519                    impl<T: TelemetryService>
3520                        tonic::server::UnaryService<super::SetRateAttitudeRequest>
3521                        for SetRateAttitudeSvc<T>
3522                    {
3523                        type Response = super::SetRateAttitudeResponse;
3524                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3525                        fn call(
3526                            &mut self,
3527                            request: tonic::Request<super::SetRateAttitudeRequest>,
3528                        ) -> Self::Future {
3529                            let inner = self.0.clone();
3530                            let fut = async move { (*inner).set_rate_attitude(request).await };
3531                            Box::pin(fut)
3532                        }
3533                    }
3534                    let accept_compression_encodings = self.accept_compression_encodings;
3535                    let send_compression_encodings = self.send_compression_encodings;
3536                    let inner = self.inner.clone();
3537                    let fut = async move {
3538                        let inner = inner.0;
3539                        let method = SetRateAttitudeSvc(inner);
3540                        let codec = tonic::codec::ProstCodec::default();
3541                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3542                            accept_compression_encodings,
3543                            send_compression_encodings,
3544                        );
3545                        let res = grpc.unary(method, req).await;
3546                        Ok(res)
3547                    };
3548                    Box::pin(fut)
3549                }
3550                "/mavsdk.rpc.telemetry.TelemetryService/SetRateCameraAttitude" => {
3551                    #[allow(non_camel_case_types)]
3552                    struct SetRateCameraAttitudeSvc<T: TelemetryService>(pub Arc<T>);
3553                    impl<T: TelemetryService>
3554                        tonic::server::UnaryService<super::SetRateCameraAttitudeRequest>
3555                        for SetRateCameraAttitudeSvc<T>
3556                    {
3557                        type Response = super::SetRateCameraAttitudeResponse;
3558                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3559                        fn call(
3560                            &mut self,
3561                            request: tonic::Request<super::SetRateCameraAttitudeRequest>,
3562                        ) -> Self::Future {
3563                            let inner = self.0.clone();
3564                            let fut =
3565                                async move { (*inner).set_rate_camera_attitude(request).await };
3566                            Box::pin(fut)
3567                        }
3568                    }
3569                    let accept_compression_encodings = self.accept_compression_encodings;
3570                    let send_compression_encodings = self.send_compression_encodings;
3571                    let inner = self.inner.clone();
3572                    let fut = async move {
3573                        let inner = inner.0;
3574                        let method = SetRateCameraAttitudeSvc(inner);
3575                        let codec = tonic::codec::ProstCodec::default();
3576                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3577                            accept_compression_encodings,
3578                            send_compression_encodings,
3579                        );
3580                        let res = grpc.unary(method, req).await;
3581                        Ok(res)
3582                    };
3583                    Box::pin(fut)
3584                }
3585                "/mavsdk.rpc.telemetry.TelemetryService/SetRateVelocityNed" => {
3586                    #[allow(non_camel_case_types)]
3587                    struct SetRateVelocityNedSvc<T: TelemetryService>(pub Arc<T>);
3588                    impl<T: TelemetryService>
3589                        tonic::server::UnaryService<super::SetRateVelocityNedRequest>
3590                        for SetRateVelocityNedSvc<T>
3591                    {
3592                        type Response = super::SetRateVelocityNedResponse;
3593                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3594                        fn call(
3595                            &mut self,
3596                            request: tonic::Request<super::SetRateVelocityNedRequest>,
3597                        ) -> Self::Future {
3598                            let inner = self.0.clone();
3599                            let fut = async move { (*inner).set_rate_velocity_ned(request).await };
3600                            Box::pin(fut)
3601                        }
3602                    }
3603                    let accept_compression_encodings = self.accept_compression_encodings;
3604                    let send_compression_encodings = self.send_compression_encodings;
3605                    let inner = self.inner.clone();
3606                    let fut = async move {
3607                        let inner = inner.0;
3608                        let method = SetRateVelocityNedSvc(inner);
3609                        let codec = tonic::codec::ProstCodec::default();
3610                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3611                            accept_compression_encodings,
3612                            send_compression_encodings,
3613                        );
3614                        let res = grpc.unary(method, req).await;
3615                        Ok(res)
3616                    };
3617                    Box::pin(fut)
3618                }
3619                "/mavsdk.rpc.telemetry.TelemetryService/SetRateGpsInfo" => {
3620                    #[allow(non_camel_case_types)]
3621                    struct SetRateGpsInfoSvc<T: TelemetryService>(pub Arc<T>);
3622                    impl<T: TelemetryService>
3623                        tonic::server::UnaryService<super::SetRateGpsInfoRequest>
3624                        for SetRateGpsInfoSvc<T>
3625                    {
3626                        type Response = super::SetRateGpsInfoResponse;
3627                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3628                        fn call(
3629                            &mut self,
3630                            request: tonic::Request<super::SetRateGpsInfoRequest>,
3631                        ) -> Self::Future {
3632                            let inner = self.0.clone();
3633                            let fut = async move { (*inner).set_rate_gps_info(request).await };
3634                            Box::pin(fut)
3635                        }
3636                    }
3637                    let accept_compression_encodings = self.accept_compression_encodings;
3638                    let send_compression_encodings = self.send_compression_encodings;
3639                    let inner = self.inner.clone();
3640                    let fut = async move {
3641                        let inner = inner.0;
3642                        let method = SetRateGpsInfoSvc(inner);
3643                        let codec = tonic::codec::ProstCodec::default();
3644                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3645                            accept_compression_encodings,
3646                            send_compression_encodings,
3647                        );
3648                        let res = grpc.unary(method, req).await;
3649                        Ok(res)
3650                    };
3651                    Box::pin(fut)
3652                }
3653                "/mavsdk.rpc.telemetry.TelemetryService/SetRateBattery" => {
3654                    #[allow(non_camel_case_types)]
3655                    struct SetRateBatterySvc<T: TelemetryService>(pub Arc<T>);
3656                    impl<T: TelemetryService>
3657                        tonic::server::UnaryService<super::SetRateBatteryRequest>
3658                        for SetRateBatterySvc<T>
3659                    {
3660                        type Response = super::SetRateBatteryResponse;
3661                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3662                        fn call(
3663                            &mut self,
3664                            request: tonic::Request<super::SetRateBatteryRequest>,
3665                        ) -> Self::Future {
3666                            let inner = self.0.clone();
3667                            let fut = async move { (*inner).set_rate_battery(request).await };
3668                            Box::pin(fut)
3669                        }
3670                    }
3671                    let accept_compression_encodings = self.accept_compression_encodings;
3672                    let send_compression_encodings = self.send_compression_encodings;
3673                    let inner = self.inner.clone();
3674                    let fut = async move {
3675                        let inner = inner.0;
3676                        let method = SetRateBatterySvc(inner);
3677                        let codec = tonic::codec::ProstCodec::default();
3678                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3679                            accept_compression_encodings,
3680                            send_compression_encodings,
3681                        );
3682                        let res = grpc.unary(method, req).await;
3683                        Ok(res)
3684                    };
3685                    Box::pin(fut)
3686                }
3687                "/mavsdk.rpc.telemetry.TelemetryService/SetRateRcStatus" => {
3688                    #[allow(non_camel_case_types)]
3689                    struct SetRateRcStatusSvc<T: TelemetryService>(pub Arc<T>);
3690                    impl<T: TelemetryService>
3691                        tonic::server::UnaryService<super::SetRateRcStatusRequest>
3692                        for SetRateRcStatusSvc<T>
3693                    {
3694                        type Response = super::SetRateRcStatusResponse;
3695                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3696                        fn call(
3697                            &mut self,
3698                            request: tonic::Request<super::SetRateRcStatusRequest>,
3699                        ) -> Self::Future {
3700                            let inner = self.0.clone();
3701                            let fut = async move { (*inner).set_rate_rc_status(request).await };
3702                            Box::pin(fut)
3703                        }
3704                    }
3705                    let accept_compression_encodings = self.accept_compression_encodings;
3706                    let send_compression_encodings = self.send_compression_encodings;
3707                    let inner = self.inner.clone();
3708                    let fut = async move {
3709                        let inner = inner.0;
3710                        let method = SetRateRcStatusSvc(inner);
3711                        let codec = tonic::codec::ProstCodec::default();
3712                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3713                            accept_compression_encodings,
3714                            send_compression_encodings,
3715                        );
3716                        let res = grpc.unary(method, req).await;
3717                        Ok(res)
3718                    };
3719                    Box::pin(fut)
3720                }
3721                "/mavsdk.rpc.telemetry.TelemetryService/SetRateActuatorControlTarget" => {
3722                    #[allow(non_camel_case_types)]
3723                    struct SetRateActuatorControlTargetSvc<T: TelemetryService>(pub Arc<T>);
3724                    impl<T: TelemetryService>
3725                        tonic::server::UnaryService<super::SetRateActuatorControlTargetRequest>
3726                        for SetRateActuatorControlTargetSvc<T>
3727                    {
3728                        type Response = super::SetRateActuatorControlTargetResponse;
3729                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3730                        fn call(
3731                            &mut self,
3732                            request: tonic::Request<super::SetRateActuatorControlTargetRequest>,
3733                        ) -> Self::Future {
3734                            let inner = self.0.clone();
3735                            let fut = async move {
3736                                (*inner).set_rate_actuator_control_target(request).await
3737                            };
3738                            Box::pin(fut)
3739                        }
3740                    }
3741                    let accept_compression_encodings = self.accept_compression_encodings;
3742                    let send_compression_encodings = self.send_compression_encodings;
3743                    let inner = self.inner.clone();
3744                    let fut = async move {
3745                        let inner = inner.0;
3746                        let method = SetRateActuatorControlTargetSvc(inner);
3747                        let codec = tonic::codec::ProstCodec::default();
3748                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3749                            accept_compression_encodings,
3750                            send_compression_encodings,
3751                        );
3752                        let res = grpc.unary(method, req).await;
3753                        Ok(res)
3754                    };
3755                    Box::pin(fut)
3756                }
3757                "/mavsdk.rpc.telemetry.TelemetryService/SetRateActuatorOutputStatus" => {
3758                    #[allow(non_camel_case_types)]
3759                    struct SetRateActuatorOutputStatusSvc<T: TelemetryService>(pub Arc<T>);
3760                    impl<T: TelemetryService>
3761                        tonic::server::UnaryService<super::SetRateActuatorOutputStatusRequest>
3762                        for SetRateActuatorOutputStatusSvc<T>
3763                    {
3764                        type Response = super::SetRateActuatorOutputStatusResponse;
3765                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3766                        fn call(
3767                            &mut self,
3768                            request: tonic::Request<super::SetRateActuatorOutputStatusRequest>,
3769                        ) -> Self::Future {
3770                            let inner = self.0.clone();
3771                            let fut = async move {
3772                                (*inner).set_rate_actuator_output_status(request).await
3773                            };
3774                            Box::pin(fut)
3775                        }
3776                    }
3777                    let accept_compression_encodings = self.accept_compression_encodings;
3778                    let send_compression_encodings = self.send_compression_encodings;
3779                    let inner = self.inner.clone();
3780                    let fut = async move {
3781                        let inner = inner.0;
3782                        let method = SetRateActuatorOutputStatusSvc(inner);
3783                        let codec = tonic::codec::ProstCodec::default();
3784                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3785                            accept_compression_encodings,
3786                            send_compression_encodings,
3787                        );
3788                        let res = grpc.unary(method, req).await;
3789                        Ok(res)
3790                    };
3791                    Box::pin(fut)
3792                }
3793                "/mavsdk.rpc.telemetry.TelemetryService/SetRateOdometry" => {
3794                    #[allow(non_camel_case_types)]
3795                    struct SetRateOdometrySvc<T: TelemetryService>(pub Arc<T>);
3796                    impl<T: TelemetryService>
3797                        tonic::server::UnaryService<super::SetRateOdometryRequest>
3798                        for SetRateOdometrySvc<T>
3799                    {
3800                        type Response = super::SetRateOdometryResponse;
3801                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3802                        fn call(
3803                            &mut self,
3804                            request: tonic::Request<super::SetRateOdometryRequest>,
3805                        ) -> Self::Future {
3806                            let inner = self.0.clone();
3807                            let fut = async move { (*inner).set_rate_odometry(request).await };
3808                            Box::pin(fut)
3809                        }
3810                    }
3811                    let accept_compression_encodings = self.accept_compression_encodings;
3812                    let send_compression_encodings = self.send_compression_encodings;
3813                    let inner = self.inner.clone();
3814                    let fut = async move {
3815                        let inner = inner.0;
3816                        let method = SetRateOdometrySvc(inner);
3817                        let codec = tonic::codec::ProstCodec::default();
3818                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3819                            accept_compression_encodings,
3820                            send_compression_encodings,
3821                        );
3822                        let res = grpc.unary(method, req).await;
3823                        Ok(res)
3824                    };
3825                    Box::pin(fut)
3826                }
3827                "/mavsdk.rpc.telemetry.TelemetryService/SetRatePositionVelocityNed" => {
3828                    #[allow(non_camel_case_types)]
3829                    struct SetRatePositionVelocityNedSvc<T: TelemetryService>(pub Arc<T>);
3830                    impl<T: TelemetryService>
3831                        tonic::server::UnaryService<super::SetRatePositionVelocityNedRequest>
3832                        for SetRatePositionVelocityNedSvc<T>
3833                    {
3834                        type Response = super::SetRatePositionVelocityNedResponse;
3835                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3836                        fn call(
3837                            &mut self,
3838                            request: tonic::Request<super::SetRatePositionVelocityNedRequest>,
3839                        ) -> Self::Future {
3840                            let inner = self.0.clone();
3841                            let fut = async move {
3842                                (*inner).set_rate_position_velocity_ned(request).await
3843                            };
3844                            Box::pin(fut)
3845                        }
3846                    }
3847                    let accept_compression_encodings = self.accept_compression_encodings;
3848                    let send_compression_encodings = self.send_compression_encodings;
3849                    let inner = self.inner.clone();
3850                    let fut = async move {
3851                        let inner = inner.0;
3852                        let method = SetRatePositionVelocityNedSvc(inner);
3853                        let codec = tonic::codec::ProstCodec::default();
3854                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3855                            accept_compression_encodings,
3856                            send_compression_encodings,
3857                        );
3858                        let res = grpc.unary(method, req).await;
3859                        Ok(res)
3860                    };
3861                    Box::pin(fut)
3862                }
3863                "/mavsdk.rpc.telemetry.TelemetryService/SetRateGroundTruth" => {
3864                    #[allow(non_camel_case_types)]
3865                    struct SetRateGroundTruthSvc<T: TelemetryService>(pub Arc<T>);
3866                    impl<T: TelemetryService>
3867                        tonic::server::UnaryService<super::SetRateGroundTruthRequest>
3868                        for SetRateGroundTruthSvc<T>
3869                    {
3870                        type Response = super::SetRateGroundTruthResponse;
3871                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3872                        fn call(
3873                            &mut self,
3874                            request: tonic::Request<super::SetRateGroundTruthRequest>,
3875                        ) -> Self::Future {
3876                            let inner = self.0.clone();
3877                            let fut = async move { (*inner).set_rate_ground_truth(request).await };
3878                            Box::pin(fut)
3879                        }
3880                    }
3881                    let accept_compression_encodings = self.accept_compression_encodings;
3882                    let send_compression_encodings = self.send_compression_encodings;
3883                    let inner = self.inner.clone();
3884                    let fut = async move {
3885                        let inner = inner.0;
3886                        let method = SetRateGroundTruthSvc(inner);
3887                        let codec = tonic::codec::ProstCodec::default();
3888                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3889                            accept_compression_encodings,
3890                            send_compression_encodings,
3891                        );
3892                        let res = grpc.unary(method, req).await;
3893                        Ok(res)
3894                    };
3895                    Box::pin(fut)
3896                }
3897                "/mavsdk.rpc.telemetry.TelemetryService/SetRateFixedwingMetrics" => {
3898                    #[allow(non_camel_case_types)]
3899                    struct SetRateFixedwingMetricsSvc<T: TelemetryService>(pub Arc<T>);
3900                    impl<T: TelemetryService>
3901                        tonic::server::UnaryService<super::SetRateFixedwingMetricsRequest>
3902                        for SetRateFixedwingMetricsSvc<T>
3903                    {
3904                        type Response = super::SetRateFixedwingMetricsResponse;
3905                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3906                        fn call(
3907                            &mut self,
3908                            request: tonic::Request<super::SetRateFixedwingMetricsRequest>,
3909                        ) -> Self::Future {
3910                            let inner = self.0.clone();
3911                            let fut =
3912                                async move { (*inner).set_rate_fixedwing_metrics(request).await };
3913                            Box::pin(fut)
3914                        }
3915                    }
3916                    let accept_compression_encodings = self.accept_compression_encodings;
3917                    let send_compression_encodings = self.send_compression_encodings;
3918                    let inner = self.inner.clone();
3919                    let fut = async move {
3920                        let inner = inner.0;
3921                        let method = SetRateFixedwingMetricsSvc(inner);
3922                        let codec = tonic::codec::ProstCodec::default();
3923                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3924                            accept_compression_encodings,
3925                            send_compression_encodings,
3926                        );
3927                        let res = grpc.unary(method, req).await;
3928                        Ok(res)
3929                    };
3930                    Box::pin(fut)
3931                }
3932                "/mavsdk.rpc.telemetry.TelemetryService/SetRateImu" => {
3933                    #[allow(non_camel_case_types)]
3934                    struct SetRateImuSvc<T: TelemetryService>(pub Arc<T>);
3935                    impl<T: TelemetryService> tonic::server::UnaryService<super::SetRateImuRequest>
3936                        for SetRateImuSvc<T>
3937                    {
3938                        type Response = super::SetRateImuResponse;
3939                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3940                        fn call(
3941                            &mut self,
3942                            request: tonic::Request<super::SetRateImuRequest>,
3943                        ) -> Self::Future {
3944                            let inner = self.0.clone();
3945                            let fut = async move { (*inner).set_rate_imu(request).await };
3946                            Box::pin(fut)
3947                        }
3948                    }
3949                    let accept_compression_encodings = self.accept_compression_encodings;
3950                    let send_compression_encodings = self.send_compression_encodings;
3951                    let inner = self.inner.clone();
3952                    let fut = async move {
3953                        let inner = inner.0;
3954                        let method = SetRateImuSvc(inner);
3955                        let codec = tonic::codec::ProstCodec::default();
3956                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3957                            accept_compression_encodings,
3958                            send_compression_encodings,
3959                        );
3960                        let res = grpc.unary(method, req).await;
3961                        Ok(res)
3962                    };
3963                    Box::pin(fut)
3964                }
3965                "/mavsdk.rpc.telemetry.TelemetryService/SetRateUnixEpochTime" => {
3966                    #[allow(non_camel_case_types)]
3967                    struct SetRateUnixEpochTimeSvc<T: TelemetryService>(pub Arc<T>);
3968                    impl<T: TelemetryService>
3969                        tonic::server::UnaryService<super::SetRateUnixEpochTimeRequest>
3970                        for SetRateUnixEpochTimeSvc<T>
3971                    {
3972                        type Response = super::SetRateUnixEpochTimeResponse;
3973                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
3974                        fn call(
3975                            &mut self,
3976                            request: tonic::Request<super::SetRateUnixEpochTimeRequest>,
3977                        ) -> Self::Future {
3978                            let inner = self.0.clone();
3979                            let fut =
3980                                async move { (*inner).set_rate_unix_epoch_time(request).await };
3981                            Box::pin(fut)
3982                        }
3983                    }
3984                    let accept_compression_encodings = self.accept_compression_encodings;
3985                    let send_compression_encodings = self.send_compression_encodings;
3986                    let inner = self.inner.clone();
3987                    let fut = async move {
3988                        let inner = inner.0;
3989                        let method = SetRateUnixEpochTimeSvc(inner);
3990                        let codec = tonic::codec::ProstCodec::default();
3991                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
3992                            accept_compression_encodings,
3993                            send_compression_encodings,
3994                        );
3995                        let res = grpc.unary(method, req).await;
3996                        Ok(res)
3997                    };
3998                    Box::pin(fut)
3999                }
4000                "/mavsdk.rpc.telemetry.TelemetryService/SetRateDistanceSensor" => {
4001                    #[allow(non_camel_case_types)]
4002                    struct SetRateDistanceSensorSvc<T: TelemetryService>(pub Arc<T>);
4003                    impl<T: TelemetryService>
4004                        tonic::server::UnaryService<super::SetRateDistanceSensorRequest>
4005                        for SetRateDistanceSensorSvc<T>
4006                    {
4007                        type Response = super::SetRateDistanceSensorResponse;
4008                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
4009                        fn call(
4010                            &mut self,
4011                            request: tonic::Request<super::SetRateDistanceSensorRequest>,
4012                        ) -> Self::Future {
4013                            let inner = self.0.clone();
4014                            let fut =
4015                                async move { (*inner).set_rate_distance_sensor(request).await };
4016                            Box::pin(fut)
4017                        }
4018                    }
4019                    let accept_compression_encodings = self.accept_compression_encodings;
4020                    let send_compression_encodings = self.send_compression_encodings;
4021                    let inner = self.inner.clone();
4022                    let fut = async move {
4023                        let inner = inner.0;
4024                        let method = SetRateDistanceSensorSvc(inner);
4025                        let codec = tonic::codec::ProstCodec::default();
4026                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
4027                            accept_compression_encodings,
4028                            send_compression_encodings,
4029                        );
4030                        let res = grpc.unary(method, req).await;
4031                        Ok(res)
4032                    };
4033                    Box::pin(fut)
4034                }
4035                "/mavsdk.rpc.telemetry.TelemetryService/GetGpsGlobalOrigin" => {
4036                    #[allow(non_camel_case_types)]
4037                    struct GetGpsGlobalOriginSvc<T: TelemetryService>(pub Arc<T>);
4038                    impl<T: TelemetryService>
4039                        tonic::server::UnaryService<super::GetGpsGlobalOriginRequest>
4040                        for GetGpsGlobalOriginSvc<T>
4041                    {
4042                        type Response = super::GetGpsGlobalOriginResponse;
4043                        type Future = BoxFuture<tonic::Response<Self::Response>, tonic::Status>;
4044                        fn call(
4045                            &mut self,
4046                            request: tonic::Request<super::GetGpsGlobalOriginRequest>,
4047                        ) -> Self::Future {
4048                            let inner = self.0.clone();
4049                            let fut = async move { (*inner).get_gps_global_origin(request).await };
4050                            Box::pin(fut)
4051                        }
4052                    }
4053                    let accept_compression_encodings = self.accept_compression_encodings;
4054                    let send_compression_encodings = self.send_compression_encodings;
4055                    let inner = self.inner.clone();
4056                    let fut = async move {
4057                        let inner = inner.0;
4058                        let method = GetGpsGlobalOriginSvc(inner);
4059                        let codec = tonic::codec::ProstCodec::default();
4060                        let mut grpc = tonic::server::Grpc::new(codec).apply_compression_config(
4061                            accept_compression_encodings,
4062                            send_compression_encodings,
4063                        );
4064                        let res = grpc.unary(method, req).await;
4065                        Ok(res)
4066                    };
4067                    Box::pin(fut)
4068                }
4069                _ => Box::pin(async move {
4070                    Ok(http::Response::builder()
4071                        .status(200)
4072                        .header("grpc-status", "12")
4073                        .header("content-type", "application/grpc")
4074                        .body(empty_body())
4075                        .unwrap())
4076                }),
4077            }
4078        }
4079    }
4080    impl<T: TelemetryService> Clone for TelemetryServiceServer<T> {
4081        fn clone(&self) -> Self {
4082            let inner = self.inner.clone();
4083            Self {
4084                inner,
4085                accept_compression_encodings: self.accept_compression_encodings,
4086                send_compression_encodings: self.send_compression_encodings,
4087            }
4088        }
4089    }
4090    impl<T: TelemetryService> Clone for _Inner<T> {
4091        fn clone(&self) -> Self {
4092            Self(self.0.clone())
4093        }
4094    }
4095    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
4096        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4097            write!(f, "{:?}", self.0)
4098        }
4099    }
4100    impl<T: TelemetryService> tonic::transport::NamedService for TelemetryServiceServer<T> {
4101        const NAME: &'static str = "mavsdk.rpc.telemetry.TelemetryService";
4102    }
4103}