abi_stable_derive/stable_abi/
reflection.rs
1use super::SharedVars;
2
3use syn::Ident;
4
5#[derive(Debug, Copy, Clone, PartialEq, Eq)]
6pub enum FieldAccessor<'a> {
7 Direct,
9 Method { name: Option<&'a Ident> },
11 MethodOption,
13 Opaque,
15}
16
17impl<'a> FieldAccessor<'a> {
18 pub(crate) fn compress(self, shared_vars: &mut SharedVars<'a>) -> CompFieldAccessor {
19 match self {
20 FieldAccessor::Direct => CompFieldAccessor::DIRECT,
21 FieldAccessor::Method { name: None } => CompFieldAccessor::METHOD,
22 FieldAccessor::Method { name: Some(name) } => {
23 let _ = shared_vars.push_ident(name);
24 CompFieldAccessor::METHOD_NAMED
25 }
26 FieldAccessor::MethodOption => CompFieldAccessor::METHOD_OPTION,
27 FieldAccessor::Opaque => CompFieldAccessor::OPAQUE,
28 }
29 }
30}
31
32abi_stable_shared::declare_comp_field_accessor! {
33 attrs=[]
34}
35
36#[derive(Debug, Copy, Clone, PartialEq, Eq)]
39pub enum ModReflMode<T> {
40 Module,
41 Opaque,
42 DelegateDeref(T),
43}