abi_stable_derive/stable_abi/
reflection.rsuse super::SharedVars;
use syn::Ident;
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum FieldAccessor<'a> {
Direct,
Method { name: Option<&'a Ident> },
MethodOption,
Opaque,
}
impl<'a> FieldAccessor<'a> {
pub(crate) fn compress(self, shared_vars: &mut SharedVars<'a>) -> CompFieldAccessor {
match self {
FieldAccessor::Direct => CompFieldAccessor::DIRECT,
FieldAccessor::Method { name: None } => CompFieldAccessor::METHOD,
FieldAccessor::Method { name: Some(name) } => {
let _ = shared_vars.push_ident(name);
CompFieldAccessor::METHOD_NAMED
}
FieldAccessor::MethodOption => CompFieldAccessor::METHOD_OPTION,
FieldAccessor::Opaque => CompFieldAccessor::OPAQUE,
}
}
}
abi_stable_shared::declare_comp_field_accessor! {
attrs=[]
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum ModReflMode<T> {
Module,
Opaque,
DelegateDeref(T),
}