Struct ethers_solc::ProjectPathsConfig
source · [−]pub struct ProjectPathsConfig {
pub root: PathBuf,
pub cache: PathBuf,
pub artifacts: PathBuf,
pub sources: PathBuf,
pub tests: PathBuf,
pub scripts: PathBuf,
pub libraries: Vec<PathBuf>,
pub remappings: Vec<Remapping>,
}Expand description
Where to find all files or where to write them
Fields
root: PathBufProject root
cache: PathBufPath to the cache, if any
artifacts: PathBufWhere to store build artifacts
sources: PathBufWhere to find sources
tests: PathBufWhere to find tests
scripts: PathBufWhere to find scripts
libraries: Vec<PathBuf>Where to look for libraries
remappings: Vec<Remapping>The compiler remappings
Implementations
sourceimpl ProjectPathsConfig
impl ProjectPathsConfig
pub fn builder() -> ProjectPathsConfigBuilder
sourcepub fn hardhat(root: impl AsRef<Path>) -> Result<Self>
pub fn hardhat(root: impl AsRef<Path>) -> Result<Self>
Creates a new hardhat style config instance which points to the canonicalized root path
sourcepub fn dapptools(root: impl AsRef<Path>) -> Result<Self>
pub fn dapptools(root: impl AsRef<Path>) -> Result<Self>
Creates a new dapptools style config instance which points to the canonicalized root path
sourcepub fn current_hardhat() -> Result<Self>
pub fn current_hardhat() -> Result<Self>
Creates a new config with the current directory as the root
sourcepub fn current_dapptools() -> Result<Self>
pub fn current_dapptools() -> Result<Self>
Creates a new config with the current directory as the root
sourcepub fn paths(&self) -> ProjectPaths
pub fn paths(&self) -> ProjectPaths
Returns a new [ProjectPaths] instance that contains all directories configured for this project
sourcepub fn paths_relative(&self) -> ProjectPaths
pub fn paths_relative(&self) -> ProjectPaths
Same as Self::paths() but strips the root form all paths,
[ProjectPaths::strip_prefix_all()]
sourcepub fn create_all(&self) -> Result<(), SolcIoError>
pub fn create_all(&self) -> Result<(), SolcIoError>
Creates all configured dirs and files
sourcepub fn read_sources(&self) -> Result<Sources>
pub fn read_sources(&self) -> Result<Sources>
Returns all sources found under the project’s configured sources path
sourcepub fn read_tests(&self) -> Result<Sources>
pub fn read_tests(&self) -> Result<Sources>
Returns all sources found under the project’s configured test path
sourcepub fn read_scripts(&self) -> Result<Sources>
pub fn read_scripts(&self) -> Result<Sources>
Returns all sources found under the project’s configured script path
sourcepub fn input_files(&self) -> Vec<PathBuf>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
pub fn input_files(&self) -> Vec<PathBuf>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,
Returns the combined set solidity file paths for Self::sources and Self::tests
sourcepub fn read_input_files(&self) -> Result<Sources>
pub fn read_input_files(&self) -> Result<Sources>
Returns the combined set of Self::read_sources + Self::read_tests + Self::read_scripts
sourcepub fn resolve_import(&self, cwd: &Path, import: &Path) -> Result<PathBuf>
pub fn resolve_import(&self, cwd: &Path, import: &Path) -> Result<PathBuf>
Attempts to resolve an import from the given working directory.
The cwd path is the parent dir of the file that includes the import
sourcepub fn resolve_library_import(&self, import: &Path) -> Option<PathBuf>
pub fn resolve_library_import(&self, import: &Path) -> Option<PathBuf>
Attempts to find the path to the real solidity file that’s imported via the given import
path by applying the configured remappings and checking the library dirs
Example
Following @aave dependency in the lib folder node_modules
<root>/node_modules/@aave
├── aave-token
│ ├── contracts
│ │ ├── open-zeppelin
│ │ ├── token
├── governance-v2
├── contracts
├── interfaceshas this remapping: @aave/=@aave/ (name:path) so contracts can be imported as
import "@aave/governance-v2/contracts/governance/Executor.sol";So that Executor.sol can be found by checking each lib folder (node_modules) with
applied remappings. Applying remapping works by checking if the import path of an import
statement starts with the name of a remapping and replacing it with the remapping’s path.
There are some caveats though, dapptools style remappings usually include the src folder
ds-test/=lib/ds-test/src/ so that imports look like import "ds-test/test.sol"; (note the
missing src in the import path).
For hardhat/npm style that’s not always the case, most notably for openzeppelin-contracts if installed via npm.
The remapping is detected as '@openzeppelin/=node_modules/@openzeppelin/contracts/', which
includes the source directory contracts, however it’s common to see import paths like:
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
instead of
import "@openzeppelin/token/ERC20/IERC20.sol";
There is no strict rule behind this, but because crate::remappings::Remapping::find_many
returns '@openzeppelin/=node_modules/@openzeppelin/contracts/' we should handle the
case if the remapping path ends with contracts and the import path starts with
<remapping name>/contracts. Otherwise we can end up with a resolved path that has a
duplicate contracts segment:
@openzeppelin/contracts/contracts/token/ERC20/IERC20.sol we check for this edge case
here so that both styles work out of the box.
sourcepub fn find_artifacts_dir(root: impl AsRef<Path>) -> PathBuf
pub fn find_artifacts_dir(root: impl AsRef<Path>) -> PathBuf
Attempts to autodetect the artifacts directory based on the given root path
Dapptools layout takes precedence over hardhat style. This will return:
<root>/outif it exists or<root>/artifactsdoes not exist,<root>/artifactsif it exists and<root>/outdoes not exist.
sourcepub fn find_source_dir(root: impl AsRef<Path>) -> PathBuf
pub fn find_source_dir(root: impl AsRef<Path>) -> PathBuf
Attempts to autodetect the source directory based on the given root path
Dapptools layout takes precedence over hardhat style. This will return:
<root>/srcif it exists or<root>/contractsdoes not exist,<root>/contractsif it exists and<root>/srcdoes not exist.
sourcepub fn find_libs(root: impl AsRef<Path>) -> Vec<PathBuf>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
pub fn find_libs(root: impl AsRef<Path>) -> Vec<PathBuf>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,
Attempts to autodetect the lib directory based on the given root path
Dapptools layout takes precedence over hardhat style. This will return:
<root>/libif it exists or<root>/node_modulesdoes not exist,<root>/node_modulesif it exists and<root>/libdoes not exist.
Trait Implementations
sourceimpl Clone for ProjectPathsConfig
impl Clone for ProjectPathsConfig
sourcefn clone(&self) -> ProjectPathsConfig
fn clone(&self) -> ProjectPathsConfig
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
sourceimpl Debug for ProjectPathsConfig
impl Debug for ProjectPathsConfig
sourceimpl<'de> Deserialize<'de> for ProjectPathsConfig
impl<'de> Deserialize<'de> for ProjectPathsConfig
sourcefn 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>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl Display for ProjectPathsConfig
impl Display for ProjectPathsConfig
sourceimpl<'a> From<&'a ProjectPathsConfig> for SolFilesCache
impl<'a> From<&'a ProjectPathsConfig> for SolFilesCache
sourcefn from(config: &'a ProjectPathsConfig) -> Self
fn from(config: &'a ProjectPathsConfig) -> Self
Converts to this type from the input type.
sourceimpl Serialize for ProjectPathsConfig
impl Serialize for ProjectPathsConfig
Auto Trait Implementations
impl RefUnwindSafe for ProjectPathsConfig
impl Send for ProjectPathsConfig
impl Sync for ProjectPathsConfig
impl Unpin for ProjectPathsConfig
impl UnwindSafe for ProjectPathsConfig
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<T> Pointable for T
impl<T> Pointable for T
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
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
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber to this type, returning a
WithDispatch wrapper. Read more