1 use crate::reflect::repeated::transmute::transmute_mut_if_eq; 2 use crate::reflect::ProtobufValue; 3 4 pub(crate) enum VecMutVariant<'a> { 5 U32(&'a mut Vec<u32>), 6 U64(&'a mut Vec<u64>), 7 I32(&'a mut Vec<i32>), 8 I64(&'a mut Vec<i64>), 9 F32(&'a mut Vec<f32>), 10 F64(&'a mut Vec<f64>), 11 Bool(&'a mut Vec<bool>), 12 } 13 14 impl<'a> VecMutVariant<'a> { downcast<V: ProtobufValue>(vec: &'a mut Vec<V>) -> Option<VecMutVariant<'a>>15 pub(crate) fn downcast<V: ProtobufValue>(vec: &'a mut Vec<V>) -> Option<VecMutVariant<'a>> { 16 let vec = match transmute_mut_if_eq(vec) { 17 Ok(vec) => return Some(VecMutVariant::U32(vec)), 18 Err(vec) => vec, 19 }; 20 let vec = match transmute_mut_if_eq(vec) { 21 Ok(vec) => return Some(VecMutVariant::U64(vec)), 22 Err(vec) => vec, 23 }; 24 let vec = match transmute_mut_if_eq(vec) { 25 Ok(vec) => return Some(VecMutVariant::I32(vec)), 26 Err(vec) => vec, 27 }; 28 let vec = match transmute_mut_if_eq(vec) { 29 Ok(vec) => return Some(VecMutVariant::I64(vec)), 30 Err(vec) => vec, 31 }; 32 let vec = match transmute_mut_if_eq(vec) { 33 Ok(vec) => return Some(VecMutVariant::F32(vec)), 34 Err(vec) => vec, 35 }; 36 let vec = match transmute_mut_if_eq(vec) { 37 Ok(vec) => return Some(VecMutVariant::F64(vec)), 38 Err(vec) => vec, 39 }; 40 let vec = match transmute_mut_if_eq(vec) { 41 Ok(vec) => return Some(VecMutVariant::Bool(vec)), 42 Err(vec) => vec, 43 }; 44 let _ = vec; 45 None 46 } 47 } 48