pub struct EiiImpl {
pub node_id: NodeId,
pub eii_macro_path: Path,
pub known_eii_macro_resolution: Option<EiiDecl>,
pub impl_safety: Safety,
pub span: Span,
pub inner_span: Span,
pub is_default: bool,
}Fields§
§node_id: NodeId§eii_macro_path: Path§known_eii_macro_resolution: Option<EiiDecl>This field is an implementation detail that prevents a lot of bugs. See https://github.com/rust-lang/rust/issues/149981 for an example.
The problem is, that if we generate a declaration together with its default, we generate both a declaration and an implementation. The generated implementation uses the same mechanism to register itself as a user-defined implementation would, despite being invisible to users. What does happen is a name resolution step. The invisible default implementation has to find the declaration. Both are generated at the same time, so we can skip that name resolution step.
This field is that shortcut: we prefill the extern target to skip a name resolution step, making sure it never fails. It’d be awful UX if we fail name resolution in code invisible to the user.
impl_safety: Safety§span: Span§inner_span: Span§is_default: boolTrait Implementations§
Source§impl<__D: SpanDecoder> Decodable<__D> for EiiImpl
impl<__D: SpanDecoder> Decodable<__D> for EiiImpl
Source§impl<__E: SpanEncoder> Encodable<__E> for EiiImpl
impl<__E: SpanEncoder> Encodable<__E> for EiiImpl
Source§impl<V: MutVisitor> MutVisitable<V> for EiiImpl
impl<V: MutVisitor> MutVisitable<V> for EiiImpl
Source§impl<__V> MutWalkable<__V> for EiiImplwhere
__V: MutVisitor,
impl<__V> MutWalkable<__V> for EiiImplwhere
__V: MutVisitor,
Auto Trait Implementations§
impl DynSend for EiiImpl
impl DynSync for EiiImpl
impl Freeze for EiiImpl
impl RefUnwindSafe for EiiImpl
impl Send for EiiImpl
impl Sync for EiiImpl
impl Unpin for EiiImpl
impl UnwindSafe for EiiImpl
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 96 bytes