Struct foundry_compilers::cache::CompilerCache
source · pub struct CompilerCache<S = Settings> {
pub format: String,
pub paths: ProjectPaths,
pub files: BTreeMap<PathBuf, CacheEntry<S>>,
}
Expand description
A multi version cache file
Fields§
§format: String
§paths: ProjectPaths
contains all directories used for the project
files: BTreeMap<PathBuf, CacheEntry<S>>
Implementations§
source§impl<S> CompilerCache<S>
impl<S> CompilerCache<S>
pub fn new(format: String, paths: ProjectPaths) -> Self
source§impl<S: CompilerSettings> CompilerCache<S>
impl<S: CompilerSettings> CompilerCache<S>
pub fn is_empty(&self) -> bool
sourcepub fn contains(&self, file: &Path, version: &Version) -> bool
pub fn contains(&self, file: &Path, version: &Version) -> bool
Returns true
if the cache contains any artifacts for the given file and version.
sourcepub fn remove(&mut self, file: &Path) -> Option<CacheEntry<S>>
pub fn remove(&mut self, file: &Path) -> Option<CacheEntry<S>>
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<S>>
pub fn entries(&self) -> impl Iterator<Item = &CacheEntry<S>>
Returns an iterator over all CacheEntry
this cache contains
sourcepub fn entry(&self, file: impl AsRef<Path>) -> Option<&CacheEntry<S>>
pub fn entry(&self, file: impl AsRef<Path>) -> Option<&CacheEntry<S>>
Returns the corresponding CacheEntry
for the file if it exists
sourcepub fn entry_mut(
&mut self,
file: impl AsRef<Path>
) -> Option<&mut CacheEntry<S>>
pub fn entry_mut( &mut self, file: impl AsRef<Path> ) -> Option<&mut CacheEntry<S>>
Returns the corresponding CacheEntry
for the file if it exists
sourcepub fn read(path: impl AsRef<Path>) -> Result<Self>
pub fn read(path: impl AsRef<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::SolFilesCache, Project};
let project = Project::builder().build()?;
let mut cache = SolFilesCache::read(project.cache_path())?;
cache.join_artifacts_files(project.artifacts_path());
sourcepub fn read_joined<C>(paths: &ProjectPathsConfig<C>) -> Result<Self>
pub fn read_joined<C>(paths: &ProjectPathsConfig<C>) -> 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::SolFilesCache, Project};
let project = Project::builder().build()?;
let cache = SolFilesCache::read_joined(&project.paths)?;
sourcepub fn write(&self, path: impl AsRef<Path>) -> Result<()>
pub fn write(&self, path: impl AsRef<Path>) -> Result<()>
Write the cache as json file to the given path
sourcepub fn join_entries(&mut self, root: impl AsRef<Path>) -> &mut Self
pub fn join_entries(&mut self, root: impl AsRef<Path>) -> &mut Self
Sets the CacheEntry
’s file paths to root
adjoined to self.file
.
sourcepub fn strip_entries_prefix(&mut self, base: impl AsRef<Path>) -> &mut Self
pub fn strip_entries_prefix(&mut self, base: impl AsRef<Path>) -> &mut Self
Removes base
from all CacheEntry
paths
sourcepub fn join_artifacts_files(&mut self, base: impl AsRef<Path>) -> &mut Self
pub fn join_artifacts_files(&mut self, base: impl AsRef<Path>) -> &mut Self
Sets the artifact files location to base
adjoined to the CachEntries
artifacts.
sourcepub fn strip_artifact_files_prefixes(
&mut self,
base: impl AsRef<Path>
) -> &mut Self
pub fn strip_artifact_files_prefixes( &mut self, base: impl AsRef<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: impl AsRef<Path>) -> Self
pub fn with_stripped_file_prefixes(self, base: impl AsRef<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::SolFilesCache, Project};
let project = Project::builder().build()?;
let cache =
SolFilesCache::read(project.cache_path())?.with_stripped_file_prefixes(project.root());
let artifact: CompactContract = cache.read_artifact("src/Greeter.sol", "Greeter")?;
Note: this only affects the source files, see Self::strip_artifact_files_prefixes()
sourcepub fn find_artifact_path(
&self,
contract_file: impl AsRef<Path>,
contract_name: impl AsRef<str>
) -> Option<&Path>
pub fn find_artifact_path( &self, contract_file: impl AsRef<Path>, contract_name: impl AsRef<str> ) -> Option<&Path>
Returns the path to the artifact of the given (file, contract)
pair
§Examples
use foundry_compilers::{cache::SolFilesCache, Project};
let project = Project::builder().build()?;
let cache = SolFilesCache::read_joined(&project.paths)?;
cache.find_artifact_path("/Users/git/myproject/src/Greeter.sol", "Greeter");
sourcepub fn read_artifact<Artifact: DeserializeOwned>(
&self,
contract_file: impl AsRef<Path>,
contract_name: impl AsRef<str>
) -> Result<Artifact>
pub fn read_artifact<Artifact: DeserializeOwned>( &self, contract_file: impl AsRef<Path>, contract_name: impl AsRef<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::SolFilesCache, Project};
let project = Project::builder().build()?;
let cache = SolFilesCache::read_joined(&project.paths)?;
let artifact: CompactContract =
cache.read_artifact("/Users/git/myproject/src/Greeter.sol", "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::SolFilesCache, Project,
};
let project = Project::builder().build()?;
let cache = SolFilesCache::read_joined(&project.paths)?;
let artifacts = cache.read_artifacts::<CompactContractBytecode>()?;
source§impl<S: CompilerSettings> CompilerCache<S>
impl<S: CompilerSettings> CompilerCache<S>
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§fn eq(&self, other: &CompilerCache<S>) -> bool
fn eq(&self, other: &CompilerCache<S>) -> bool
self
and other
values to be equal, and is used
by ==
.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> 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>
Returns self
with the
fg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.bright_black());
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>
Returns self
with the
fg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.bright_green());
source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.bright_yellow());
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>
Returns self
with the
fg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.bright_magenta());
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>
Returns self
with the
fg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.bright_white());
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>
Returns self
with the
bg()
set to
Color::BrightBlack
.
§Example
println!("{}", value.on_bright_black());
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>
Returns self
with the
bg()
set to
Color::BrightGreen
.
§Example
println!("{}", value.on_bright_green());
source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightYellow
.
§Example
println!("{}", value.on_bright_yellow());
source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlue
.
§Example
println!("{}", value.on_bright_blue());
source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightMagenta
.
§Example
println!("{}", value.on_bright_magenta());
source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightCyan
.
§Example
println!("{}", value.on_bright_cyan());
source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightWhite
.
§Example
println!("{}", value.on_bright_white());
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 underline(&self) -> Painted<&T>
fn underline(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::Underline
.
§Example
println!("{}", value.underline());
source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::RapidBlink
.
§Example
println!("{}", value.rapid_blink());
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);