protobuf/reflect/acc/v2/singular/
oneof.rs
1use crate::reflect::acc::v2::singular::SingularFieldAccessorHolder;
2use crate::reflect::acc::v2::AccessorV2;
3use crate::reflect::acc::FieldAccessor;
4use crate::reflect::runtime_types::RuntimeTypeWithDeref;
5use crate::reflect::ProtobufValue;
6use crate::EnumFull;
7use crate::EnumOrUnknown;
8use crate::MessageFull;
9
10pub fn make_oneof_message_has_get_mut_set_accessor<M, F>(
12 name: &'static str,
13 has_field: fn(&M) -> bool,
14 get_field: for<'a> fn(&'a M) -> &'a F,
15 mut_field: for<'a> fn(&'a mut M) -> &'a mut F,
16 set_field: fn(&mut M, F),
17) -> FieldAccessor
18where
19 M: MessageFull,
20 F: MessageFull,
21{
22 FieldAccessor::new(
23 name,
24 AccessorV2::Singular(SingularFieldAccessorHolder::new_has_get_mut_set(
25 has_field, get_field, mut_field, set_field,
26 )),
27 )
28}
29
30pub fn make_oneof_copy_has_get_set_simpler_accessors<M, V>(
32 name: &'static str,
33 has: fn(&M) -> bool,
34 get: fn(&M) -> V,
35 set: fn(&mut M, V),
36) -> FieldAccessor
37where
38 M: MessageFull,
39 V: ProtobufValue + Copy,
40{
41 FieldAccessor::new(
42 name,
43 AccessorV2::Singular(SingularFieldAccessorHolder::new_has_get_set(has, get, set)),
44 )
45}
46
47pub fn make_oneof_enum_accessors<M, E>(
49 name: &'static str,
50 get: fn(&M) -> Option<EnumOrUnknown<E>>,
51 set: fn(&mut M, EnumOrUnknown<E>),
52 _default_value: E,
54) -> FieldAccessor
55where
56 M: MessageFull,
57 E: EnumFull,
58{
59 FieldAccessor::new(
60 name,
61 AccessorV2::Singular(SingularFieldAccessorHolder::new_get_option_set_enum(
62 get, set,
63 )),
64 )
65}
66
67pub fn make_oneof_deref_has_get_set_simpler_accessor<M, F>(
69 name: &'static str,
70 has: fn(&M) -> bool,
71 get: for<'a> fn(&'a M) -> &'a <F::RuntimeType as RuntimeTypeWithDeref>::DerefTarget,
72 set: fn(&mut M, F),
73) -> FieldAccessor
74where
75 M: MessageFull + 'static,
76 F: ProtobufValue,
77 F::RuntimeType: RuntimeTypeWithDeref,
78{
79 FieldAccessor::new(
80 name,
81 AccessorV2::Singular(SingularFieldAccessorHolder::new_has_get_set_deref(
82 has, get, set,
83 )),
84 )
85}