protobuf/reflect/repeated/
vec_downcast.rs
1use crate::reflect::repeated::transmute::transmute_mut_if_eq;
2use crate::reflect::ProtobufValue;
3
4pub(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
14impl<'a> 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}