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