use crate::reflect::repeated::transmute::transmute_mut_if_eq; use crate::reflect::ProtobufValue; pub(crate) enum VecMutVariant<'a> { U32(&'a mut Vec), U64(&'a mut Vec), I32(&'a mut Vec), I64(&'a mut Vec), F32(&'a mut Vec), F64(&'a mut Vec), Bool(&'a mut Vec), } impl<'a> VecMutVariant<'a> { pub(crate) fn downcast(vec: &'a mut Vec) -> Option> { let vec = match transmute_mut_if_eq(vec) { Ok(vec) => return Some(VecMutVariant::U32(vec)), Err(vec) => vec, }; let vec = match transmute_mut_if_eq(vec) { Ok(vec) => return Some(VecMutVariant::U64(vec)), Err(vec) => vec, }; let vec = match transmute_mut_if_eq(vec) { Ok(vec) => return Some(VecMutVariant::I32(vec)), Err(vec) => vec, }; let vec = match transmute_mut_if_eq(vec) { Ok(vec) => return Some(VecMutVariant::I64(vec)), Err(vec) => vec, }; let vec = match transmute_mut_if_eq(vec) { Ok(vec) => return Some(VecMutVariant::F32(vec)), Err(vec) => vec, }; let vec = match transmute_mut_if_eq(vec) { Ok(vec) => return Some(VecMutVariant::F64(vec)), Err(vec) => vec, }; let vec = match transmute_mut_if_eq(vec) { Ok(vec) => return Some(VecMutVariant::Bool(vec)), Err(vec) => vec, }; let _ = vec; None } }