havok_classes/generated/
hkpVehicleLinearCastWheelCollide_.rs

1use super::class_requires::*;
2use super::*;
3/// # C++ Info
4/// - name: `hkpVehicleLinearCastWheelCollide`
5/// - version: `0`
6/// - signature: `0xc59399d0`
7/// - size: ` 52`(x86)/` 80`(x86_64)
8/// -  vtable: `true`
9#[allow(non_upper_case_globals, non_snake_case)]
10#[cfg_attr(feature = "json_schema", derive(schemars::JsonSchema))]
11#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
12#[derive(educe::Educe)]
13#[educe(Debug, Clone, Default, PartialEq)]
14pub struct hkpVehicleLinearCastWheelCollide {
15    /// # Unique index for this class
16    /// - Represents a pointer on XML (`<hkobject name="#0001"></hkobject>`)
17    /// - [`Option::None`] => This class is `class in field`.(`<hkobject></hkobject>`)
18    ///
19    /// # Note
20    /// Not present in the binary & Not exist actual C++ field.
21    #[cfg_attr(
22        feature = "serde",
23        serde(skip_serializing_if = "Option::is_none", default)
24    )]
25    pub __ptr: Option<Pointer>,
26    /// Alternative to C++ class inheritance.
27    #[cfg_attr(feature = "json_schema", schemars(flatten))]
28    #[cfg_attr(feature = "serde", serde(flatten))]
29    pub parent: hkpVehicleWheelCollide,
30    /// # C++ Info
31    /// - name: `wheelCollisionFilterInfo`(ctype: `hkUint32`)
32    /// - offset: ` 12`(x86)/` 24`(x86_64)
33    /// - type_size: `  4`(x86)/`  4`(x86_64)
34    #[cfg_attr(feature = "json_schema", schemars(rename = "wheelCollisionFilterInfo"))]
35    #[cfg_attr(feature = "serde", serde(rename = "wheelCollisionFilterInfo"))]
36    pub m_wheelCollisionFilterInfo: u32,
37    /// # C++ Info
38    /// - name: `wheelStates`(ctype: `hkArray<struct hkpVehicleLinearCastWheelCollideWheelState>`)
39    /// - offset: ` 16`(x86)/` 32`(x86_64)
40    /// - type_size: ` 12`(x86)/` 16`(x86_64)
41    #[cfg_attr(feature = "json_schema", schemars(rename = "wheelStates"))]
42    #[cfg_attr(feature = "serde", serde(rename = "wheelStates"))]
43    pub m_wheelStates: Vec<hkpVehicleLinearCastWheelCollideWheelState>,
44    /// # C++ Info
45    /// - name: `rejectChassisListener`(ctype: `struct hkpRejectChassisListener`)
46    /// - offset: ` 28`(x86)/` 48`(x86_64)
47    /// - type_size: ` 16`(x86)/` 24`(x86_64)
48    #[cfg_attr(feature = "json_schema", schemars(rename = "rejectChassisListener"))]
49    #[cfg_attr(feature = "serde", serde(rename = "rejectChassisListener"))]
50    pub m_rejectChassisListener: hkpRejectChassisListener,
51    /// # C++ Info
52    /// - name: `maxExtraPenetration`(ctype: `hkReal`)
53    /// - offset: ` 44`(x86)/` 72`(x86_64)
54    /// - type_size: `  4`(x86)/`  4`(x86_64)
55    #[cfg_attr(feature = "json_schema", schemars(rename = "maxExtraPenetration"))]
56    #[cfg_attr(feature = "serde", serde(rename = "maxExtraPenetration"))]
57    pub m_maxExtraPenetration: f32,
58    /// # C++ Info
59    /// - name: `startPointTolerance`(ctype: `hkReal`)
60    /// - offset: ` 48`(x86)/` 76`(x86_64)
61    /// - type_size: `  4`(x86)/`  4`(x86_64)
62    #[cfg_attr(feature = "json_schema", schemars(rename = "startPointTolerance"))]
63    #[cfg_attr(feature = "serde", serde(rename = "startPointTolerance"))]
64    pub m_startPointTolerance: f32,
65}
66const _: () = {
67    use havok_serde as _serde;
68    impl _serde::HavokClass for hkpVehicleLinearCastWheelCollide {
69        #[inline]
70        fn name(&self) -> &'static str {
71            "hkpVehicleLinearCastWheelCollide"
72        }
73        #[inline]
74        fn signature(&self) -> _serde::__private::Signature {
75            _serde::__private::Signature::new(0xc59399d0)
76        }
77        #[allow(clippy::let_and_return, clippy::vec_init_then_push)]
78        fn deps_indexes(&self) -> Vec<usize> {
79            let mut v = Vec::new();
80            v.extend(
81                self
82                    .m_wheelStates
83                    .iter()
84                    .flat_map(|class| class.deps_indexes())
85                    .collect::<Vec<usize>>(),
86            );
87            v.extend(self.m_rejectChassisListener.deps_indexes());
88            v
89        }
90    }
91    impl _serde::Serialize for hkpVehicleLinearCastWheelCollide {
92        fn serialize<S>(&self, __serializer: S) -> Result<S::Ok, S::Error>
93        where
94            S: _serde::ser::Serializer,
95        {
96            let class_meta = self
97                .__ptr
98                .map(|name| (name, _serde::__private::Signature::new(0xc59399d0)));
99            let mut serializer = __serializer
100                .serialize_struct(
101                    "hkpVehicleLinearCastWheelCollide",
102                    class_meta,
103                    (52u64, 80u64),
104                )?;
105            serializer.pad_field([0u8; 4usize].as_slice(), [0u8; 8usize].as_slice())?;
106            serializer
107                .skip_field("memSizeAndFlags", &self.parent.parent.m_memSizeAndFlags)?;
108            serializer
109                .skip_field("referenceCount", &self.parent.parent.m_referenceCount)?;
110            serializer.pad_field([0u8; 0usize].as_slice(), [0u8; 4usize].as_slice())?;
111            serializer.serialize_field("alreadyUsed", &self.parent.m_alreadyUsed)?;
112            serializer.skip_field("type", &self.parent.m_type)?;
113            serializer.pad_field([0u8; 2usize].as_slice(), [0u8; 6usize].as_slice())?;
114            serializer
115                .serialize_field(
116                    "wheelCollisionFilterInfo",
117                    &self.m_wheelCollisionFilterInfo,
118                )?;
119            serializer.pad_field([0u8; 0usize].as_slice(), [0u8; 4usize].as_slice())?;
120            serializer
121                .serialize_array_field(
122                    "wheelStates",
123                    &self.m_wheelStates,
124                    TypeSize::Struct {
125                        size_x86: 96u64,
126                        size_x86_64: 96u64,
127                    },
128                )?;
129            serializer
130                .serialize_field(
131                    "rejectChassisListener",
132                    &self.m_rejectChassisListener,
133                )?;
134            serializer
135                .serialize_field("maxExtraPenetration", &self.m_maxExtraPenetration)?;
136            serializer
137                .serialize_field("startPointTolerance", &self.m_startPointTolerance)?;
138            serializer.end()
139        }
140    }
141};
142#[doc(hidden)]
143#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
144const _: () = {
145    use havok_serde as _serde;
146    #[automatically_derived]
147    impl<'de> _serde::Deserialize<'de> for hkpVehicleLinearCastWheelCollide {
148        fn deserialize<__D>(deserializer: __D) -> core::result::Result<Self, __D::Error>
149        where
150            __D: _serde::Deserializer<'de>,
151        {
152            #[allow(non_camel_case_types)]
153            enum __Field {
154                m_alreadyUsed,
155                m_wheelCollisionFilterInfo,
156                m_wheelStates,
157                m_rejectChassisListener,
158                m_maxExtraPenetration,
159                m_startPointTolerance,
160                __ignore,
161            }
162            struct __FieldVisitor;
163            impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
164                type Value = __Field;
165                fn expecting(
166                    &self,
167                    __formatter: &mut core::fmt::Formatter,
168                ) -> core::fmt::Result {
169                    core::fmt::Formatter::write_str(__formatter, "field identifier")
170                }
171                /// Intended for use in XML.
172                #[allow(clippy::match_single_binding)]
173                #[allow(clippy::reversed_empty_ranges)]
174                #[allow(clippy::single_match)]
175                fn visit_key<__E>(
176                    self,
177                    __value: &str,
178                ) -> core::result::Result<Self::Value, __E>
179                where
180                    __E: _serde::de::Error,
181                {
182                    match __value {
183                        "alreadyUsed" => Ok(__Field::m_alreadyUsed),
184                        "wheelCollisionFilterInfo" => {
185                            Ok(__Field::m_wheelCollisionFilterInfo)
186                        }
187                        "wheelStates" => Ok(__Field::m_wheelStates),
188                        "rejectChassisListener" => Ok(__Field::m_rejectChassisListener),
189                        "maxExtraPenetration" => Ok(__Field::m_maxExtraPenetration),
190                        "startPointTolerance" => Ok(__Field::m_startPointTolerance),
191                        _ => Ok(__Field::__ignore),
192                    }
193                }
194            }
195            impl<'de> _serde::Deserialize<'de> for __Field {
196                #[inline]
197                fn deserialize<__D>(
198                    __deserializer: __D,
199                ) -> core::result::Result<Self, __D::Error>
200                where
201                    __D: _serde::Deserializer<'de>,
202                {
203                    _serde::Deserializer::deserialize_key(__deserializer, __FieldVisitor)
204                }
205            }
206            struct __hkpVehicleLinearCastWheelCollideVisitor<'de> {
207                marker: _serde::__private::PhantomData<hkpVehicleLinearCastWheelCollide>,
208                lifetime: _serde::__private::PhantomData<&'de ()>,
209            }
210            #[allow(clippy::match_single_binding)]
211            #[allow(clippy::reversed_empty_ranges)]
212            #[allow(clippy::single_match)]
213            impl<'de> _serde::de::Visitor<'de>
214            for __hkpVehicleLinearCastWheelCollideVisitor<'de> {
215                type Value = hkpVehicleLinearCastWheelCollide;
216                fn expecting(
217                    &self,
218                    __formatter: &mut core::fmt::Formatter,
219                ) -> core::fmt::Result {
220                    core::fmt::Formatter::write_str(
221                        __formatter,
222                        "struct hkpVehicleLinearCastWheelCollide",
223                    )
224                }
225                fn visit_struct_for_bytes<__A>(
226                    self,
227                    mut __map: __A,
228                ) -> _serde::__private::Result<Self::Value, __A::Error>
229                where
230                    __A: _serde::de::MapAccess<'de>,
231                {
232                    let __ptr = __A::class_ptr(&mut __map);
233                    let parent = __A::parent_value(&mut __map)?;
234                    let mut m_wheelCollisionFilterInfo: _serde::__private::Option<u32> = _serde::__private::None;
235                    let mut m_wheelStates: _serde::__private::Option<
236                        Vec<hkpVehicleLinearCastWheelCollideWheelState>,
237                    > = _serde::__private::None;
238                    let mut m_rejectChassisListener: _serde::__private::Option<
239                        hkpRejectChassisListener,
240                    > = _serde::__private::None;
241                    let mut m_maxExtraPenetration: _serde::__private::Option<f32> = _serde::__private::None;
242                    let mut m_startPointTolerance: _serde::__private::Option<f32> = _serde::__private::None;
243                    for i in 0..5usize {
244                        match i {
245                            0usize => {
246                                if _serde::__private::Option::is_some(
247                                    &m_wheelCollisionFilterInfo,
248                                ) {
249                                    return _serde::__private::Err(
250                                        <__A::Error as _serde::de::Error>::duplicate_field(
251                                            "wheelCollisionFilterInfo",
252                                        ),
253                                    );
254                                }
255                                m_wheelCollisionFilterInfo = _serde::__private::Some(
256                                    match __A::next_value::<u32>(&mut __map) {
257                                        _serde::__private::Ok(__val) => __val,
258                                        _serde::__private::Err(__err) => {
259                                            return _serde::__private::Err(__err);
260                                        }
261                                    },
262                                );
263                            }
264                            1usize => {
265                                if _serde::__private::Option::is_some(&m_wheelStates) {
266                                    return _serde::__private::Err(
267                                        <__A::Error as _serde::de::Error>::duplicate_field(
268                                            "wheelStates",
269                                        ),
270                                    );
271                                }
272                                __A::pad(&mut __map, 0usize, 4usize)?;
273                                m_wheelStates = _serde::__private::Some(
274                                    match __A::next_value::<
275                                        Vec<hkpVehicleLinearCastWheelCollideWheelState>,
276                                    >(&mut __map) {
277                                        _serde::__private::Ok(__val) => __val,
278                                        _serde::__private::Err(__err) => {
279                                            return _serde::__private::Err(__err);
280                                        }
281                                    },
282                                );
283                            }
284                            2usize => {
285                                if _serde::__private::Option::is_some(
286                                    &m_rejectChassisListener,
287                                ) {
288                                    return _serde::__private::Err(
289                                        <__A::Error as _serde::de::Error>::duplicate_field(
290                                            "rejectChassisListener",
291                                        ),
292                                    );
293                                }
294                                m_rejectChassisListener = _serde::__private::Some(
295                                    match __A::next_value::<
296                                        hkpRejectChassisListener,
297                                    >(&mut __map) {
298                                        _serde::__private::Ok(__val) => __val,
299                                        _serde::__private::Err(__err) => {
300                                            return _serde::__private::Err(__err);
301                                        }
302                                    },
303                                );
304                            }
305                            3usize => {
306                                if _serde::__private::Option::is_some(
307                                    &m_maxExtraPenetration,
308                                ) {
309                                    return _serde::__private::Err(
310                                        <__A::Error as _serde::de::Error>::duplicate_field(
311                                            "maxExtraPenetration",
312                                        ),
313                                    );
314                                }
315                                m_maxExtraPenetration = _serde::__private::Some(
316                                    match __A::next_value::<f32>(&mut __map) {
317                                        _serde::__private::Ok(__val) => __val,
318                                        _serde::__private::Err(__err) => {
319                                            return _serde::__private::Err(__err);
320                                        }
321                                    },
322                                );
323                            }
324                            4usize => {
325                                if _serde::__private::Option::is_some(
326                                    &m_startPointTolerance,
327                                ) {
328                                    return _serde::__private::Err(
329                                        <__A::Error as _serde::de::Error>::duplicate_field(
330                                            "startPointTolerance",
331                                        ),
332                                    );
333                                }
334                                m_startPointTolerance = _serde::__private::Some(
335                                    match __A::next_value::<f32>(&mut __map) {
336                                        _serde::__private::Ok(__val) => __val,
337                                        _serde::__private::Err(__err) => {
338                                            return _serde::__private::Err(__err);
339                                        }
340                                    },
341                                );
342                            }
343                            _ => {}
344                        }
345                    }
346                    let m_wheelCollisionFilterInfo = match m_wheelCollisionFilterInfo {
347                        _serde::__private::Some(__field) => __field,
348                        _serde::__private::None => {
349                            return _serde::__private::Err(
350                                <__A::Error as _serde::de::Error>::missing_field(
351                                    "wheelCollisionFilterInfo",
352                                ),
353                            );
354                        }
355                    };
356                    let m_wheelStates = match m_wheelStates {
357                        _serde::__private::Some(__field) => __field,
358                        _serde::__private::None => {
359                            return _serde::__private::Err(
360                                <__A::Error as _serde::de::Error>::missing_field(
361                                    "wheelStates",
362                                ),
363                            );
364                        }
365                    };
366                    let m_rejectChassisListener = match m_rejectChassisListener {
367                        _serde::__private::Some(__field) => __field,
368                        _serde::__private::None => {
369                            return _serde::__private::Err(
370                                <__A::Error as _serde::de::Error>::missing_field(
371                                    "rejectChassisListener",
372                                ),
373                            );
374                        }
375                    };
376                    let m_maxExtraPenetration = match m_maxExtraPenetration {
377                        _serde::__private::Some(__field) => __field,
378                        _serde::__private::None => {
379                            return _serde::__private::Err(
380                                <__A::Error as _serde::de::Error>::missing_field(
381                                    "maxExtraPenetration",
382                                ),
383                            );
384                        }
385                    };
386                    let m_startPointTolerance = match m_startPointTolerance {
387                        _serde::__private::Some(__field) => __field,
388                        _serde::__private::None => {
389                            return _serde::__private::Err(
390                                <__A::Error as _serde::de::Error>::missing_field(
391                                    "startPointTolerance",
392                                ),
393                            );
394                        }
395                    };
396                    _serde::__private::Ok(hkpVehicleLinearCastWheelCollide {
397                        __ptr,
398                        parent,
399                        m_wheelCollisionFilterInfo,
400                        m_wheelStates,
401                        m_rejectChassisListener,
402                        m_maxExtraPenetration,
403                        m_startPointTolerance,
404                    })
405                }
406                #[allow(clippy::manual_unwrap_or_default)]
407                fn visit_struct<__A>(
408                    self,
409                    mut __map: __A,
410                ) -> _serde::__private::Result<Self::Value, __A::Error>
411                where
412                    __A: _serde::de::MapAccess<'de>,
413                {
414                    let mut m_alreadyUsed: _serde::__private::Option<bool> = _serde::__private::None;
415                    let mut m_wheelCollisionFilterInfo: _serde::__private::Option<u32> = _serde::__private::None;
416                    let mut m_wheelStates: _serde::__private::Option<
417                        Vec<hkpVehicleLinearCastWheelCollideWheelState>,
418                    > = _serde::__private::None;
419                    let mut m_rejectChassisListener: _serde::__private::Option<
420                        hkpRejectChassisListener,
421                    > = _serde::__private::None;
422                    let mut m_maxExtraPenetration: _serde::__private::Option<f32> = _serde::__private::None;
423                    let mut m_startPointTolerance: _serde::__private::Option<f32> = _serde::__private::None;
424                    while let _serde::__private::Some(__key) = {
425                        __A::next_key::<__Field>(&mut __map)?
426                    } {
427                        match __key {
428                            __Field::m_alreadyUsed => {
429                                #[cfg(
430                                    any(feature = "strict", feature = "ignore_duplicates")
431                                )]
432                                if _serde::__private::Option::is_some(&m_alreadyUsed) {
433                                    #[cfg(feature = "ignore_duplicates")]
434                                    {
435                                        __A::skip_value(&mut __map)?;
436                                        continue;
437                                    }
438                                    #[cfg(feature = "strict")]
439                                    return _serde::__private::Err(
440                                        <__A::Error as _serde::de::Error>::duplicate_field(
441                                            "alreadyUsed",
442                                        ),
443                                    );
444                                }
445                                m_alreadyUsed = _serde::__private::Some(
446                                    match __A::next_value::<bool>(&mut __map) {
447                                        _serde::__private::Ok(__val) => __val,
448                                        _serde::__private::Err(__err) => {
449                                            return _serde::__private::Err(__err);
450                                        }
451                                    },
452                                );
453                            }
454                            __Field::m_wheelCollisionFilterInfo => {
455                                #[cfg(
456                                    any(feature = "strict", feature = "ignore_duplicates")
457                                )]
458                                if _serde::__private::Option::is_some(
459                                    &m_wheelCollisionFilterInfo,
460                                ) {
461                                    #[cfg(feature = "ignore_duplicates")]
462                                    {
463                                        __A::skip_value(&mut __map)?;
464                                        continue;
465                                    }
466                                    #[cfg(feature = "strict")]
467                                    return _serde::__private::Err(
468                                        <__A::Error as _serde::de::Error>::duplicate_field(
469                                            "wheelCollisionFilterInfo",
470                                        ),
471                                    );
472                                }
473                                m_wheelCollisionFilterInfo = _serde::__private::Some(
474                                    match __A::next_value::<u32>(&mut __map) {
475                                        _serde::__private::Ok(__val) => __val,
476                                        _serde::__private::Err(__err) => {
477                                            return _serde::__private::Err(__err);
478                                        }
479                                    },
480                                );
481                            }
482                            __Field::m_wheelStates => {
483                                #[cfg(
484                                    any(feature = "strict", feature = "ignore_duplicates")
485                                )]
486                                if _serde::__private::Option::is_some(&m_wheelStates) {
487                                    #[cfg(feature = "ignore_duplicates")]
488                                    {
489                                        __A::skip_value(&mut __map)?;
490                                        continue;
491                                    }
492                                    #[cfg(feature = "strict")]
493                                    return _serde::__private::Err(
494                                        <__A::Error as _serde::de::Error>::duplicate_field(
495                                            "wheelStates",
496                                        ),
497                                    );
498                                }
499                                m_wheelStates = _serde::__private::Some(
500                                    match __A::next_value::<
501                                        Vec<hkpVehicleLinearCastWheelCollideWheelState>,
502                                    >(&mut __map) {
503                                        _serde::__private::Ok(__val) => __val,
504                                        _serde::__private::Err(__err) => {
505                                            return _serde::__private::Err(__err);
506                                        }
507                                    },
508                                );
509                            }
510                            __Field::m_rejectChassisListener => {
511                                #[cfg(
512                                    any(feature = "strict", feature = "ignore_duplicates")
513                                )]
514                                if _serde::__private::Option::is_some(
515                                    &m_rejectChassisListener,
516                                ) {
517                                    #[cfg(feature = "ignore_duplicates")]
518                                    {
519                                        __A::skip_value(&mut __map)?;
520                                        continue;
521                                    }
522                                    #[cfg(feature = "strict")]
523                                    return _serde::__private::Err(
524                                        <__A::Error as _serde::de::Error>::duplicate_field(
525                                            "rejectChassisListener",
526                                        ),
527                                    );
528                                }
529                                m_rejectChassisListener = _serde::__private::Some(
530                                    match __A::next_value::<
531                                        hkpRejectChassisListener,
532                                    >(&mut __map) {
533                                        _serde::__private::Ok(__val) => __val,
534                                        _serde::__private::Err(__err) => {
535                                            return _serde::__private::Err(__err);
536                                        }
537                                    },
538                                );
539                            }
540                            __Field::m_maxExtraPenetration => {
541                                #[cfg(
542                                    any(feature = "strict", feature = "ignore_duplicates")
543                                )]
544                                if _serde::__private::Option::is_some(
545                                    &m_maxExtraPenetration,
546                                ) {
547                                    #[cfg(feature = "ignore_duplicates")]
548                                    {
549                                        __A::skip_value(&mut __map)?;
550                                        continue;
551                                    }
552                                    #[cfg(feature = "strict")]
553                                    return _serde::__private::Err(
554                                        <__A::Error as _serde::de::Error>::duplicate_field(
555                                            "maxExtraPenetration",
556                                        ),
557                                    );
558                                }
559                                m_maxExtraPenetration = _serde::__private::Some(
560                                    match __A::next_value::<f32>(&mut __map) {
561                                        _serde::__private::Ok(__val) => __val,
562                                        _serde::__private::Err(__err) => {
563                                            return _serde::__private::Err(__err);
564                                        }
565                                    },
566                                );
567                            }
568                            __Field::m_startPointTolerance => {
569                                #[cfg(
570                                    any(feature = "strict", feature = "ignore_duplicates")
571                                )]
572                                if _serde::__private::Option::is_some(
573                                    &m_startPointTolerance,
574                                ) {
575                                    #[cfg(feature = "ignore_duplicates")]
576                                    {
577                                        __A::skip_value(&mut __map)?;
578                                        continue;
579                                    }
580                                    #[cfg(feature = "strict")]
581                                    return _serde::__private::Err(
582                                        <__A::Error as _serde::de::Error>::duplicate_field(
583                                            "startPointTolerance",
584                                        ),
585                                    );
586                                }
587                                m_startPointTolerance = _serde::__private::Some(
588                                    match __A::next_value::<f32>(&mut __map) {
589                                        _serde::__private::Ok(__val) => __val,
590                                        _serde::__private::Err(__err) => {
591                                            return _serde::__private::Err(__err);
592                                        }
593                                    },
594                                );
595                            }
596                            _ => __A::skip_value(&mut __map)?,
597                        }
598                    }
599                    let m_alreadyUsed = match m_alreadyUsed {
600                        _serde::__private::Some(__field) => __field,
601                        _serde::__private::None => {
602                            #[cfg(feature = "strict")]
603                            return _serde::__private::Err(
604                                <__A::Error as _serde::de::Error>::missing_field(
605                                    "alreadyUsed",
606                                ),
607                            );
608                            #[cfg(not(feature = "strict"))] Default::default()
609                        }
610                    };
611                    let m_wheelCollisionFilterInfo = match m_wheelCollisionFilterInfo {
612                        _serde::__private::Some(__field) => __field,
613                        _serde::__private::None => {
614                            #[cfg(feature = "strict")]
615                            return _serde::__private::Err(
616                                <__A::Error as _serde::de::Error>::missing_field(
617                                    "wheelCollisionFilterInfo",
618                                ),
619                            );
620                            #[cfg(not(feature = "strict"))] Default::default()
621                        }
622                    };
623                    let m_wheelStates = match m_wheelStates {
624                        _serde::__private::Some(__field) => __field,
625                        _serde::__private::None => {
626                            #[cfg(feature = "strict")]
627                            return _serde::__private::Err(
628                                <__A::Error as _serde::de::Error>::missing_field(
629                                    "wheelStates",
630                                ),
631                            );
632                            #[cfg(not(feature = "strict"))] Default::default()
633                        }
634                    };
635                    let m_rejectChassisListener = match m_rejectChassisListener {
636                        _serde::__private::Some(__field) => __field,
637                        _serde::__private::None => {
638                            #[cfg(feature = "strict")]
639                            return _serde::__private::Err(
640                                <__A::Error as _serde::de::Error>::missing_field(
641                                    "rejectChassisListener",
642                                ),
643                            );
644                            #[cfg(not(feature = "strict"))] Default::default()
645                        }
646                    };
647                    let m_maxExtraPenetration = match m_maxExtraPenetration {
648                        _serde::__private::Some(__field) => __field,
649                        _serde::__private::None => {
650                            #[cfg(feature = "strict")]
651                            return _serde::__private::Err(
652                                <__A::Error as _serde::de::Error>::missing_field(
653                                    "maxExtraPenetration",
654                                ),
655                            );
656                            #[cfg(not(feature = "strict"))] Default::default()
657                        }
658                    };
659                    let m_startPointTolerance = match m_startPointTolerance {
660                        _serde::__private::Some(__field) => __field,
661                        _serde::__private::None => {
662                            #[cfg(feature = "strict")]
663                            return _serde::__private::Err(
664                                <__A::Error as _serde::de::Error>::missing_field(
665                                    "startPointTolerance",
666                                ),
667                            );
668                            #[cfg(not(feature = "strict"))] Default::default()
669                        }
670                    };
671                    let __ptr = None;
672                    let parent = hkBaseObject { __ptr };
673                    let parent = hkReferencedObject {
674                        __ptr,
675                        parent,
676                        ..Default::default()
677                    };
678                    let parent = hkpVehicleWheelCollide {
679                        __ptr,
680                        parent,
681                        m_alreadyUsed,
682                        ..Default::default()
683                    };
684                    let __ptr = __A::class_ptr(&mut __map);
685                    _serde::__private::Ok(hkpVehicleLinearCastWheelCollide {
686                        __ptr,
687                        parent,
688                        m_wheelCollisionFilterInfo,
689                        m_wheelStates,
690                        m_rejectChassisListener,
691                        m_maxExtraPenetration,
692                        m_startPointTolerance,
693                    })
694                }
695            }
696            const FIELDS: &[&str] = &[
697                "wheelCollisionFilterInfo",
698                "wheelStates",
699                "rejectChassisListener",
700                "maxExtraPenetration",
701                "startPointTolerance",
702            ];
703            _serde::Deserializer::deserialize_struct(
704                deserializer,
705                "hkpVehicleLinearCastWheelCollide",
706                FIELDS,
707                __hkpVehicleLinearCastWheelCollideVisitor {
708                    marker: _serde::__private::PhantomData::<
709                        hkpVehicleLinearCastWheelCollide,
710                    >,
711                    lifetime: _serde::__private::PhantomData,
712                },
713            )
714        }
715    }
716};