altv_internal_mvalue 16.4.3

An internal crate for alt:V module. Not intended for direct use.
Documentation
use serde::{
  de::{self, Visitor},
  forward_to_deserialize_any,
};

use crate::{ConstMValue, Error, Result};

// see AnyMValue enum in core_resource
pub const ANY_MVALUE_ENUM: &str = "___altv_any_enum_mvalue";

pub struct AnyMValueVariantDeserializer {
  input: ConstMValue,
}

impl AnyMValueVariantDeserializer {
  pub fn from_cpp(input: ConstMValue) -> Self {
    AnyMValueVariantDeserializer { input }
  }
}

impl<'de> de::Deserializer<'de> for AnyMValueVariantDeserializer {
  type Error = Error;

  fn deserialize_any<V>(self, visitor: V) -> Result<V::Value>
  where
    V: Visitor<'de>,
  {
    visitor.visit_u64(self.input.sdk_mvalue_type()? as u64)
  }

  forward_to_deserialize_any! {
      bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string
      bytes byte_buf option unit unit_struct newtype_struct seq tuple
      tuple_struct map struct enum identifier ignored_any
  }
}