pub struct Contract<'hir> {
pub source: SourceId,
pub span: Span,
pub name: Ident,
pub kind: ContractKind,
pub bases: &'hir [ContractId],
pub bases_args: &'hir [Modifier<'hir>],
pub linearized_bases: &'hir [ContractId],
pub linearized_bases_args: &'hir [Option<&'hir Modifier<'hir>>],
pub ctor: Option<FunctionId>,
pub fallback: Option<FunctionId>,
pub receive: Option<FunctionId>,
pub items: &'hir [ItemId],
}Expand description
A contract, interface, or library.
Fields§
§source: SourceIdThe source this contract is defined in.
span: SpanThe contract span.
name: IdentThe contract name.
kind: ContractKindThe contract kind.
bases: &'hir [ContractId]The contract bases, as declared in the source code.
bases_args: &'hir [Modifier<'hir>]The base arguments, as declared in the source code.
linearized_bases: &'hir [ContractId]The linearized contract bases.
The first element is always the contract itself, followed by its bases in order of
inheritance. The bases may not be present if the inheritance linearization failed. See
Contract::linearization_failed.
linearized_bases_args: &'hir [Option<&'hir Modifier<'hir>>]The constructor base arguments (if any).
The index maps to the position in linearized_bases[1..].
The reference points to either bases_args in the original contract, or modifiers in the
constructor.
ctor: Option<FunctionId>The resolved constructor function.
fallback: Option<FunctionId>The resolved fallback function.
receive: Option<FunctionId>The resolved receive function.
items: &'hir [ItemId]The contract items.
Note that this only includes items defined in the contract itself, not inherited items.
For getting all items, use Hir::contract_items.
Implementations§
Source§impl Contract<'_>
impl Contract<'_>
Sourcepub fn linearization_failed(&self) -> bool
pub fn linearization_failed(&self) -> bool
Returns true if the inheritance linearization failed.
Sourcepub fn functions(&self) -> impl Iterator<Item = FunctionId> + Clone + use<'_>
pub fn functions(&self) -> impl Iterator<Item = FunctionId> + Clone + use<'_>
Returns an iterator over functions declared in the contract.
Note that this does not include the constructor and fallback functions, as they are stored
separately. Use Contract::all_functions to include them.
Sourcepub fn all_functions(
&self,
) -> impl Iterator<Item = FunctionId> + Clone + use<'_>
pub fn all_functions( &self, ) -> impl Iterator<Item = FunctionId> + Clone + use<'_>
Returns an iterator over all functions declared in the contract.
Sourcepub fn variables(&self) -> impl Iterator<Item = VariableId> + Clone + use<'_>
pub fn variables(&self) -> impl Iterator<Item = VariableId> + Clone + use<'_>
Returns an iterator over all variables declared in the contract.
Sourcepub fn can_be_deployed(&self) -> bool
pub fn can_be_deployed(&self) -> bool
Returns true if the contract can be deployed.
Sourcepub fn is_abstract(&self) -> bool
pub fn is_abstract(&self) -> bool
Returns true if this is an abstract contract.
Sourcepub fn description(&self) -> &'static str
pub fn description(&self) -> &'static str
Returns the description of the contract.
Trait Implementations§
Auto Trait Implementations§
impl<'hir> Freeze for Contract<'hir>
impl<'hir> RefUnwindSafe for Contract<'hir>
impl<'hir> Send for Contract<'hir>
impl<'hir> Sync for Contract<'hir>
impl<'hir> Unpin for Contract<'hir>
impl<'hir> UnwindSafe for Contract<'hir>
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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
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 more