pub struct ProjectCompileOutput<T: ArtifactOutput = ConfigurableArtifacts> { /* private fields */ }
Expand description

Contains a mixture of already compiled/cached artifacts and the input set of sources that still need to be compiled.

Implementations§

source§

impl<T: ArtifactOutput> ProjectCompileOutput<T>

source

pub fn slash_paths(&mut self)

Converts all \\ separators in all paths to /

source

pub fn with_slashed_paths(self) -> Self

Convenience function fo Self::slash_paths()

source

pub fn artifact_ids( &self ) -> impl Iterator<Item = (ArtifactId, &T::Artifact)> + '_

All artifacts together with their contract file name and name <file name>:<name>.

This returns a chained iterator of both cached and recompiled contract artifacts.

Borrowed version of Self::into_artifacts.

source

pub fn into_artifacts(self) -> impl Iterator<Item = (ArtifactId, T::Artifact)>

All artifacts together with their contract file name and name <file name>:<name>

This returns a chained iterator of both cached and recompiled contract artifacts

§Example
use std::collections::btree_map::BTreeMap;
use ethers_solc::ConfigurableContractArtifact;
use ethers_solc::{ArtifactId, Project};

let project = Project::builder().build().unwrap();
let contracts: BTreeMap<ArtifactId, ConfigurableContractArtifact> = project.compile().unwrap().into_artifacts().collect();
source

pub fn artifacts(&self) -> impl Iterator<Item = (String, &T::Artifact)>

This returns a chained iterator of both cached and recompiled contract artifacts that yields the contract name and the corresponding artifact

§Example
use std::collections::btree_map::BTreeMap;
use ethers_solc::ConfigurableContractArtifact;
use ethers_solc::Project;

let project = Project::builder().build().unwrap();
let artifacts: BTreeMap<String, &ConfigurableContractArtifact> = project.compile().unwrap().artifacts().collect();
source

pub fn versioned_artifacts( &self ) -> impl Iterator<Item = (String, (&T::Artifact, &Version))>

This returns a chained iterator of both cached and recompiled contract artifacts that yields the contract name and the corresponding artifact with its version

§Example
use std::collections::btree_map::BTreeMap;
use semver::Version;
use ethers_solc::ConfigurableContractArtifact;
use ethers_solc::Project;

let project = Project::builder().build().unwrap();
let artifacts: BTreeMap<String, (&ConfigurableContractArtifact, &Version)> = project.compile().unwrap().versioned_artifacts().collect();
source

pub fn artifacts_with_files( &self ) -> impl Iterator<Item = (&String, &String, &T::Artifact)> + '_

All artifacts together with their contract file and name as tuple (file, contract name, artifact)

This returns a chained iterator of both cached and recompiled contract artifacts

Borrowed version of Self::into_artifacts_with_files.

NOTE the file will be returned as is, see also Self::with_stripped_file_prefixes().

source

pub fn into_artifacts_with_files( self ) -> impl Iterator<Item = (String, String, T::Artifact)>

All artifacts together with their contract file and name as tuple (file, contract name, artifact)

This returns a chained iterator of both cached and recompiled contract artifacts

§Example
use std::collections::btree_map::BTreeMap;
use ethers_solc::{ConfigurableContractArtifact, Project};

let project = Project::builder().build().unwrap();
let contracts: Vec<(String, String, ConfigurableContractArtifact)> = project.compile().unwrap().into_artifacts_with_files().collect();

NOTE the file will be returned as is, see also Self::with_stripped_file_prefixes()

source

pub fn into_artifacts_with_sources( self ) -> (BTreeMap<ArtifactId, T::Artifact>, VersionedSourceFiles)

All artifacts together with their ID and the sources of the project.

Note: this only returns the SourceFiles for freshly compiled contracts because, if not included in the Artifact itself (see crate::ConfigurableContractArtifact::source_file()), is only available via the solc CompilerOutput

source

pub fn with_stripped_file_prefixes(self, base: impl AsRef<Path>) -> Self

Strips the given prefix from all artifact file paths to make them relative to the given base argument

§Example

Make all artifact files relative to the project’s root directory

use ethers_solc::Project;

let project = Project::builder().build().unwrap();
let output = project.compile().unwrap().with_stripped_file_prefixes(project.root());
source

pub fn output(self) -> AggregatedCompilerOutput

Get the (merged) solc compiler output

use std::collections::btree_map::BTreeMap;
use ethers_solc::artifacts::contract::Contract;
use ethers_solc::Project;

let project = Project::builder().build().unwrap();
let contracts: BTreeMap<String, Contract> =
    project.compile().unwrap().output().contracts_into_iter().collect();
source

pub fn has_compiled_contracts(&self) -> bool

Returns whether this type has a compiler output.

source

pub fn is_unchanged(&self) -> bool

Returns whether this type does not contain compiled contracts.

source

pub fn has_compiler_errors(&self) -> bool

Returns whether any errors were emitted by the compiler.

source

pub fn has_compiler_warnings(&self) -> bool

Returns whether any warnings were emitted by the compiler.

source

pub fn succeeded(self) -> Self

Panics if any errors were emitted by the compiler.

source

pub fn assert_success(&self)

Panics if any errors were emitted by the compiler.

source

pub fn cached_artifacts(&self) -> &Artifacts<T::Artifact>

Returns the set of Artifacts that were cached and got reused during crate::Project::compile()

source

pub fn compiled_artifacts(&self) -> &Artifacts<T::Artifact>

Returns the set of Artifacts that were compiled with solc in crate::Project::compile()

source

pub fn compiled_contracts_by_compiler_version( &self ) -> BTreeMap<Version, Vec<(String, Contract)>>

Returns a BTreeMap that maps the compiler version used during crate::Project::compile() to a Vector of tuples containing the contract name and the Contract

source

pub fn find_contract<'a>( &self, info: impl Into<ContractInfoRef<'a>> ) -> Option<&T::Artifact>

Removes the contract with matching path and name using the <path>:<contractname> pattern where path is optional.

If the path segment is None, then the first matching Contract is returned, see Self::remove_first

§Example
use ethers_solc::Project;
use ethers_solc::artifacts::*;
use ethers_solc::info::ContractInfo;

let  output = project.compile().unwrap();
let info = ContractInfo::new("src/Greeter.sol:Greeter");
let contract = output.find_contract(&info).unwrap();
source

pub fn find( &self, path: impl AsRef<str>, contract: impl AsRef<str> ) -> Option<&T::Artifact>

Finds the artifact with matching path and name

§Example
use ethers_solc::Project;
use ethers_solc::artifacts::*;
let output = project.compile().unwrap();
let contract = output.find("src/Greeter.sol", "Greeter").unwrap();
source

pub fn find_first(&self, contract_name: impl AsRef<str>) -> Option<&T::Artifact>

Finds the first contract with the given name

source

pub fn remove( &mut self, path: impl AsRef<str>, contract: impl AsRef<str> ) -> Option<T::Artifact>

Finds the artifact with matching path and name

§Example
use ethers_solc::Project;
use ethers_solc::artifacts::*;
let output = project.compile().unwrap();
let contract = output.find("src/Greeter.sol", "Greeter").unwrap();
source

pub fn remove_first( &mut self, contract_name: impl AsRef<str> ) -> Option<T::Artifact>

Removes the first contract with the given name from the set

§Example
use ethers_solc::Project;
use ethers_solc::artifacts::*;
let mut output = project.compile().unwrap();
let contract = output.remove_first("Greeter").unwrap();
source

pub fn remove_contract<'a>( &mut self, info: impl Into<ContractInfoRef<'a>> ) -> Option<T::Artifact>

Removes the contract with matching path and name using the <path>:<contractname> pattern where path is optional.

If the path segment is None, then the first matching Contract is returned, see Self::remove_first

§Example
use ethers_solc::Project;
use ethers_solc::artifacts::*;
use ethers_solc::info::ContractInfo;
let mut output = project.compile().unwrap();
let info = ContractInfo::new("src/Greeter.sol:Greeter");
let contract = output.remove_contract(&info).unwrap();
source§

impl ProjectCompileOutput<ConfigurableArtifacts>

source

pub fn into_contract_bytecodes( self ) -> impl Iterator<Item = (ArtifactId, CompactContractBytecode)>

A helper functions that extracts the underlying CompactContractBytecode from the crate::ConfigurableContractArtifact

§Example
use std::collections::btree_map::BTreeMap;
use ethers_solc::artifacts::contract::CompactContractBytecode;
use ethers_solc::{ArtifactId, Project};
use ethers_solc::contracts::ArtifactContracts;

let project = Project::builder().build().unwrap();
let contracts: ArtifactContracts = project.compile().unwrap().into_contract_bytecodes().collect();

Trait Implementations§

source§

impl<T: Clone + ArtifactOutput> Clone for ProjectCompileOutput<T>
where T::Artifact: Clone,

source§

fn clone(&self) -> ProjectCompileOutput<T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug + ArtifactOutput> Debug for ProjectCompileOutput<T>
where T::Artifact: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Default + ArtifactOutput> Default for ProjectCompileOutput<T>
where T::Artifact: Default,

source§

fn default() -> ProjectCompileOutput<T>

Returns the “default value” for a type. Read more
source§

impl<T: ArtifactOutput> Display for ProjectCompileOutput<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: PartialEq + ArtifactOutput> PartialEq for ProjectCompileOutput<T>
where T::Artifact: PartialEq,

source§

fn eq(&self, other: &ProjectCompileOutput<T>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T: ArtifactOutput> StructuralPartialEq for ProjectCompileOutput<T>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> JsonSchemaMaybe for T