pub struct AggregatedCompilerOutput {
pub errors: Vec<Error>,
pub sources: VersionedSourceFiles,
pub contracts: VersionedContracts,
pub build_infos: BTreeMap<Version, RawBuildInfo>,
}
Expand description
The aggregated output of (multiple) compile jobs
This is effectively a solc version aware CompilerOutput
Fields§
§errors: Vec<Error>
all errors from all CompilerOutput
sources: VersionedSourceFiles
All source files combined with the solc version used to compile them
contracts: VersionedContracts
All compiled contracts combined with the solc version used to compile them
build_infos: BTreeMap<Version, RawBuildInfo>
Implementations§
source§impl AggregatedCompilerOutput
impl AggregatedCompilerOutput
sourcepub fn slash_paths(&mut self)
pub fn slash_paths(&mut self)
Converts all \\
separators in all paths to /
sourcepub fn has_error(
&self,
ignored_error_codes: &[u64],
ignored_file_paths: &[PathBuf],
compiler_severity_filter: &Severity
) -> bool
pub fn has_error( &self, ignored_error_codes: &[u64], ignored_file_paths: &[PathBuf], compiler_severity_filter: &Severity ) -> bool
Whether the output contains a compiler error
This adheres to the given compiler_severity_filter
and also considers Error with the
given Severity as errors. For example Severity::Warning will consider Errors with
Severity::Warning and Severity::Error as errors.
sourcepub fn has_warning<'a>(&self, filter: impl Into<ErrorFilter<'a>>) -> bool
pub fn has_warning<'a>(&self, filter: impl Into<ErrorFilter<'a>>) -> bool
Checks if there are any compiler warnings that are not ignored by the specified error codes and file paths.
pub fn diagnostics<'a>( &'a self, ignored_error_codes: &'a [u64], ignored_file_paths: &'a [PathBuf], compiler_severity_filter: Severity ) -> OutputDiagnostics<'a>
pub fn is_empty(&self) -> bool
pub fn is_unchanged(&self) -> bool
pub fn extend_all<I>(&mut self, out: I)
sourcepub fn extend(&mut self, version: Version, output: CompilerOutput)
pub fn extend(&mut self, version: Version, output: CompilerOutput)
adds a new CompilerOutput
to the aggregated output
sourcepub fn write_build_infos(
&self,
build_info_dir: impl AsRef<Path>
) -> Result<(), SolcIoError>
pub fn write_build_infos( &self, build_info_dir: impl AsRef<Path> ) -> Result<(), SolcIoError>
Creates all BuildInfo
files in the given build_info_dir
There can be multiple BuildInfo
, since we support multiple versions.
The created files have the md5 hash {_format,solcVersion,solcLongVersion,input}
as their
file name
sourcepub fn find_first(
&self,
contract: impl AsRef<str>
) -> Option<CompactContractRef<'_>>
pub fn find_first( &self, contract: impl AsRef<str> ) -> Option<CompactContractRef<'_>>
Finds the first contract with the given name
§Examples
use foundry_compilers::{artifacts::*, Project};
let project = Project::builder().build()?;
let output = project.compile()?.into_output();
let contract = output.find_first("Greeter").unwrap();
sourcepub fn remove_first(&mut self, contract: impl AsRef<str>) -> Option<Contract>
pub fn remove_first(&mut self, contract: impl AsRef<str>) -> Option<Contract>
Removes the first contract with the given name from the set
§Examples
use foundry_compilers::{artifacts::*, Project};
let project = Project::builder().build()?;
let mut output = project.compile()?.into_output();
let contract = output.remove_first("Greeter").unwrap();
sourcepub fn remove(
&mut self,
path: impl AsRef<str>,
contract: impl AsRef<str>
) -> Option<Contract>
pub fn remove( &mut self, path: impl AsRef<str>, contract: impl AsRef<str> ) -> Option<Contract>
Removes the contract with matching path and name
§Examples
use foundry_compilers::{artifacts::*, Project};
let project = Project::builder().build()?;
let mut output = project.compile()?.into_output();
let contract = output.remove("src/Greeter.sol", "Greeter").unwrap();
sourcepub fn remove_contract<'a>(
&mut self,
info: impl Into<ContractInfoRef<'a>>
) -> Option<Contract>
pub fn remove_contract<'a>( &mut self, info: impl Into<ContractInfoRef<'a>> ) -> Option<Contract>
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
§Examples
use foundry_compilers::{artifacts::*, info::ContractInfo, Project};
let project = Project::builder().build()?;
let mut output = project.compile()?.into_output();
let info = ContractInfo::new("src/Greeter.sol:Greeter");
let contract = output.remove_contract(&info).unwrap();
sourcepub fn contracts_iter(&self) -> impl Iterator<Item = (&String, &Contract)>
pub fn contracts_iter(&self) -> impl Iterator<Item = (&String, &Contract)>
Iterate over all contracts and their names
sourcepub fn contracts_into_iter(self) -> impl Iterator<Item = (String, Contract)>
pub fn contracts_into_iter(self) -> impl Iterator<Item = (String, Contract)>
Iterate over all contracts and their names
sourcepub fn contracts_with_files_iter(
&self
) -> impl Iterator<Item = (&String, &String, &Contract)>
pub fn contracts_with_files_iter( &self ) -> impl Iterator<Item = (&String, &String, &Contract)>
Returns an iterator over (file
, name
, Contract
)
sourcepub fn contracts_with_files_into_iter(
self
) -> impl Iterator<Item = (String, String, Contract)>
pub fn contracts_with_files_into_iter( self ) -> impl Iterator<Item = (String, String, Contract)>
Returns an iterator over (file
, name
, Contract
)
sourcepub fn contracts_with_files_and_version_iter(
&self
) -> impl Iterator<Item = (&String, &String, &Contract, &Version)>
pub fn contracts_with_files_and_version_iter( &self ) -> impl Iterator<Item = (&String, &String, &Contract, &Version)>
Returns an iterator over (file
, name
, Contract
, Version
)
sourcepub fn contracts_with_files_and_version_into_iter(
self
) -> impl Iterator<Item = (String, String, Contract, Version)>
pub fn contracts_with_files_and_version_into_iter( self ) -> impl Iterator<Item = (String, String, Contract, Version)>
Returns an iterator over (file
, name
, Contract
, Version
)
sourcepub fn get(
&self,
path: impl AsRef<str>,
contract: impl AsRef<str>
) -> Option<CompactContractRef<'_>>
pub fn get( &self, path: impl AsRef<str>, contract: impl AsRef<str> ) -> Option<CompactContractRef<'_>>
Given the contract file’s path and the contract’s name, tries to return the contract’s bytecode, runtime bytecode, and ABI.
§Examples
use foundry_compilers::{artifacts::*, Project};
let project = Project::builder().build()?;
let output = project.compile()?.into_output();
let contract = output.get("src/Greeter.sol", "Greeter").unwrap();
sourcepub fn split(self) -> (VersionedSourceFiles, VersionedContracts)
pub fn split(self) -> (VersionedSourceFiles, VersionedContracts)
Returns the output’s source files and contracts separately, wrapped in helper types that provide several helper methods
§Examples
use foundry_compilers::Project;
let project = Project::builder().build()?;
let output = project.compile()?.into_output();
let (sources, contracts) = output.split();
sourcepub fn with_stripped_file_prefixes(self, base: impl AsRef<Path>) -> Self
pub fn with_stripped_file_prefixes(self, base: impl AsRef<Path>) -> Self
Strips the given prefix from all file paths to make them relative to the given
base
argument.
Convenience method for Self::strip_prefix_all() that consumes the type.
§Examples
Make all sources and contracts relative to the project’s root directory
use foundry_compilers::Project;
let project = Project::builder().build()?;
let output = project.compile()?.into_output().with_stripped_file_prefixes(project.root());
sourcepub fn strip_prefix_all(&mut self, base: impl AsRef<Path>) -> &mut Self
pub fn strip_prefix_all(&mut self, base: impl AsRef<Path>) -> &mut Self
Removes base
from all contract paths
Trait Implementations§
source§impl Clone for AggregatedCompilerOutput
impl Clone for AggregatedCompilerOutput
source§fn clone(&self) -> AggregatedCompilerOutput
fn clone(&self) -> AggregatedCompilerOutput
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for AggregatedCompilerOutput
impl Debug for AggregatedCompilerOutput
source§impl Default for AggregatedCompilerOutput
impl Default for AggregatedCompilerOutput
source§fn default() -> AggregatedCompilerOutput
fn default() -> AggregatedCompilerOutput
source§impl<'de> Deserialize<'de> for AggregatedCompilerOutput
impl<'de> Deserialize<'de> for AggregatedCompilerOutput
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl PartialEq for AggregatedCompilerOutput
impl PartialEq for AggregatedCompilerOutput
source§fn eq(&self, other: &AggregatedCompilerOutput) -> bool
fn eq(&self, other: &AggregatedCompilerOutput) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl Serialize for AggregatedCompilerOutput
impl Serialize for AggregatedCompilerOutput
impl StructuralPartialEq for AggregatedCompilerOutput
Auto Trait Implementations§
impl Freeze for AggregatedCompilerOutput
impl RefUnwindSafe for AggregatedCompilerOutput
impl Send for AggregatedCompilerOutput
impl Sync for AggregatedCompilerOutput
impl Unpin for AggregatedCompilerOutput
impl UnwindSafe for AggregatedCompilerOutput
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> 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