pub struct CompilerCache<S = Settings> {
pub format: String,
pub paths: ProjectPaths,
pub files: BTreeMap<PathBuf, CacheEntry>,
pub builds: BTreeSet<String>,
pub profiles: BTreeMap<String, S>,
pub preprocessed: bool,
pub mocks: HashSet<PathBuf>,
}
Expand description
A multi version cache file
Fields§
§format: String
§paths: ProjectPaths
contains all directories used for the project
files: BTreeMap<PathBuf, CacheEntry>
§builds: BTreeSet<String>
§profiles: BTreeMap<String, S>
§preprocessed: bool
§mocks: HashSet<PathBuf>
Implementations§
Source§impl<S> CompilerCache<S>
impl<S> CompilerCache<S>
pub fn new(format: String, paths: ProjectPaths, preprocessed: bool) -> Self
Source§impl<S: CompilerSettings> CompilerCache<S>
impl<S: CompilerSettings> CompilerCache<S>
pub fn is_empty(&self) -> bool
Sourcepub fn remove(&mut self, file: &Path) -> Option<CacheEntry>
pub fn remove(&mut self, file: &Path) -> Option<CacheEntry>
Removes entry for the given file
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
How many entries the cache contains where each entry represents a sourc file
Sourcepub fn artifacts_len(&self) -> usize
pub fn artifacts_len(&self) -> usize
How many Artifacts
this cache references, where a source file can have multiple artifacts
Sourcepub fn entries(&self) -> impl Iterator<Item = &CacheEntry>
pub fn entries(&self) -> impl Iterator<Item = &CacheEntry>
Returns an iterator over all CacheEntry
this cache contains
Sourcepub fn entry(&self, file: &Path) -> Option<&CacheEntry>
pub fn entry(&self, file: &Path) -> Option<&CacheEntry>
Returns the corresponding CacheEntry
for the file if it exists
Sourcepub fn entry_mut(&mut self, file: &Path) -> Option<&mut CacheEntry>
pub fn entry_mut(&mut self, file: &Path) -> Option<&mut CacheEntry>
Returns the corresponding CacheEntry
for the file if it exists
Sourcepub fn read(path: &Path) -> Result<Self>
pub fn read(path: &Path) -> Result<Self>
Reads the cache json file from the given path
See also Self::read_joined()
§Errors
If the cache file does not exist
§Examples
use foundry_compilers::{cache::CompilerCache, solc::SolcSettings, Project};
let project = Project::builder().build(Default::default())?;
let mut cache = CompilerCache::<SolcSettings>::read(project.cache_path())?;
cache.join_artifacts_files(project.artifacts_path());
Sourcepub fn read_joined<L>(paths: &ProjectPathsConfig<L>) -> Result<Self>
pub fn read_joined<L>(paths: &ProjectPathsConfig<L>) -> Result<Self>
Reads the cache json file from the given path and returns the cache with paths adjoined to
the ProjectPathsConfig
.
This expects the artifact
files to be relative to the artifacts dir of the paths
and the
CachEntry
paths to be relative to the root dir of the paths
§Examples
use foundry_compilers::{cache::CompilerCache, solc::SolcSettings, Project};
let project = Project::builder().build(Default::default())?;
let cache: CompilerCache<SolcSettings> = CompilerCache::read_joined(&project.paths)?;
Sourcepub fn remove_outdated_builds(&mut self)
pub fn remove_outdated_builds(&mut self)
Removes build infos which don’t have any artifacts linked to them.
Sourcepub fn join_entries(&mut self, root: &Path) -> &mut Self
pub fn join_entries(&mut self, root: &Path) -> &mut Self
Sets the CacheEntry
’s file paths to root
adjoined to self.file
.
Sourcepub fn strip_entries_prefix(&mut self, base: &Path) -> &mut Self
pub fn strip_entries_prefix(&mut self, base: &Path) -> &mut Self
Removes base
from all CacheEntry
paths
Sourcepub fn join_artifacts_files(&mut self, base: &Path) -> &mut Self
pub fn join_artifacts_files(&mut self, base: &Path) -> &mut Self
Sets the artifact files location to base
adjoined to the CachEntries
artifacts.
Sourcepub fn strip_artifact_files_prefixes(&mut self, base: &Path) -> &mut Self
pub fn strip_artifact_files_prefixes(&mut self, base: &Path) -> &mut Self
Removes base
from all artifact file paths
Sourcepub fn remove_missing_files(&mut self)
pub fn remove_missing_files(&mut self)
Removes all CacheEntry
which source files don’t exist on disk
NOTE: this assumes the files
are absolute
Sourcepub fn all_artifacts_exist(&self) -> bool
pub fn all_artifacts_exist(&self) -> bool
Checks if all artifact files exist
Sourcepub fn with_stripped_file_prefixes(self, base: &Path) -> Self
pub fn with_stripped_file_prefixes(self, base: &Path) -> Self
Strips the given prefix from all file
paths that identify a CacheEntry
to make them
relative to the given base
argument
In other words this sets the keys (the file path of a solidity file) relative to the base
argument, so that the key /Users/me/project/src/Greeter.sol
will be changed to
src/Greeter.sol
if base
is /Users/me/project
§Examples
use foundry_compilers::{
artifacts::contract::CompactContract, cache::CompilerCache, solc::SolcSettings, Project,
};
let project = Project::builder().build(Default::default())?;
let cache: CompilerCache<SolcSettings> =
CompilerCache::read(project.cache_path())?.with_stripped_file_prefixes(project.root());
let artifact: CompactContract = cache.read_artifact("src/Greeter.sol".as_ref(), "Greeter")?;
Note: this only affects the source files, see Self::strip_artifact_files_prefixes()
Sourcepub fn find_artifact_path(
&self,
contract_file: &Path,
contract_name: &str,
) -> Option<&Path>
pub fn find_artifact_path( &self, contract_file: &Path, contract_name: &str, ) -> Option<&Path>
Returns the path to the artifact of the given (file, contract)
pair
§Examples
use foundry_compilers::{cache::CompilerCache, solc::SolcSettings, Project};
let project = Project::builder().build(Default::default())?;
let cache: CompilerCache<SolcSettings> = CompilerCache::read_joined(&project.paths)?;
cache.find_artifact_path("/Users/git/myproject/src/Greeter.sol".as_ref(), "Greeter");
Sourcepub fn read_artifact<Artifact: DeserializeOwned>(
&self,
contract_file: &Path,
contract_name: &str,
) -> Result<Artifact>
pub fn read_artifact<Artifact: DeserializeOwned>( &self, contract_file: &Path, contract_name: &str, ) -> Result<Artifact>
Finds the path to the artifact of the given (file, contract)
pair (see
Self::find_artifact_path()
) and deserializes the artifact file as JSON.
§Examples
use foundry_compilers::{
artifacts::contract::CompactContract, cache::CompilerCache, solc::SolcSettings, Project,
};
let project = Project::builder().build(Default::default())?;
let cache = CompilerCache::<SolcSettings>::read_joined(&project.paths)?;
let artifact: CompactContract =
cache.read_artifact("/Users/git/myproject/src/Greeter.sol".as_ref(), "Greeter")?;
NOTE: unless the cache’s files
keys were modified contract_file
is expected to be
absolute.
Sourcepub fn read_artifacts<Artifact: DeserializeOwned + Send + Sync>(
&self,
) -> Result<Artifacts<Artifact>>
pub fn read_artifacts<Artifact: DeserializeOwned + Send + Sync>( &self, ) -> Result<Artifacts<Artifact>>
Reads all cached artifacts from disk using the given ArtifactOutput handler
§Examples
use foundry_compilers::{
artifacts::contract::CompactContractBytecode, cache::CompilerCache, solc::SolcSettings,
Project,
};
let project = Project::builder().build(Default::default())?;
let cache: CompilerCache<SolcSettings> = CompilerCache::read_joined(&project.paths)?;
let artifacts = cache.read_artifacts::<CompactContractBytecode>()?;
Sourcepub fn read_builds<L: Language>(
&self,
build_info_dir: &Path,
) -> Result<Builds<L>>
pub fn read_builds<L: Language>( &self, build_info_dir: &Path, ) -> Result<Builds<L>>
Reads all cached BuildContexts from disk. BuildContext is inlined into RawBuildInfo objects, so we are basically just partially deserializing build infos here.
Trait Implementations§
Source§impl<S: Clone> Clone for CompilerCache<S>
impl<S: Clone> Clone for CompilerCache<S>
Source§fn clone(&self) -> CompilerCache<S>
fn clone(&self) -> CompilerCache<S>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<S: Debug> Debug for CompilerCache<S>
impl<S: Debug> Debug for CompilerCache<S>
Source§impl<S> Default for CompilerCache<S>
impl<S> Default for CompilerCache<S>
Source§impl<'de, S> Deserialize<'de> for CompilerCache<S>where
S: Deserialize<'de>,
impl<'de, S> Deserialize<'de> for CompilerCache<S>where
S: Deserialize<'de>,
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<'a, S: CompilerSettings> From<&'a ProjectPathsConfig> for CompilerCache<S>
impl<'a, S: CompilerSettings> From<&'a ProjectPathsConfig> for CompilerCache<S>
Source§fn from(config: &'a ProjectPathsConfig) -> Self
fn from(config: &'a ProjectPathsConfig) -> Self
Source§impl<S: PartialEq> PartialEq for CompilerCache<S>
impl<S: PartialEq> PartialEq for CompilerCache<S>
Source§impl<S> Serialize for CompilerCache<S>where
S: Serialize,
impl<S> Serialize for CompilerCache<S>where
S: Serialize,
impl<S: Eq> Eq for CompilerCache<S>
impl<S> StructuralPartialEq for CompilerCache<S>
Auto Trait Implementations§
impl<S> Freeze for CompilerCache<S>
impl<S> RefUnwindSafe for CompilerCache<S>where
S: RefUnwindSafe,
impl<S> Send for CompilerCache<S>where
S: Send,
impl<S> Sync for CompilerCache<S>where
S: Sync,
impl<S> Unpin for CompilerCache<S>
impl<S> UnwindSafe for CompilerCache<S>where
S: RefUnwindSafe,
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, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
fn equivalent(&self, key: &K) -> bool
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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);