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