pub struct CacheKey {
pub source_hash: [u8; 32],
pub context_hash: [u8; 32],
pub harn_version: Cow<'static, str>,
pub compiler_tag: u8,
}Expand description
Cache key components for a single pipeline source. Equality of all fields is necessary and sufficient for cache reuse.
Fields§
§source_hash: [u8; 32]§context_hash: [u8; 32]§harn_version: Cow<'static, str>Harn version stamped into, and required by, this artifact’s header.
Normally the running binary’s own HARN_VERSION. Release preparation
bumps Cargo.toml after snapshotting the generator, so that one
caller must stamp the version the shipped binary will report instead of
the version the generator was built at — otherwise the shipped runtime
rejects its own embedded payload and silently falls back to source
compilation. Use CacheKey::for_artifact_version.
compiler_tag: u8Compact tag for active CompilerOptions. Flipping
HARN_DISABLE_OPTIMIZATIONS between runs would otherwise reuse a
chunk compiled under the wrong setting.
Implementations§
Source§impl CacheKey
impl CacheKey
Sourcepub fn from_source(source_path: &Path, source: &str) -> Self
pub fn from_source(source_path: &Path, source: &str) -> Self
Compute the cache key for a .harn source file plus its transitive
user imports. source is the entry-file contents; the import
graph is walked from disk relative to source_path.
Sourcepub fn from_relocatable_source(source_path: &Path, source: &str) -> Self
pub fn from_relocatable_source(source_path: &Path, source: &str) -> Self
Compute a relocatable entry-chunk key for a closed source tree.
Unlike Self::from_source, the dependency graph identifies files by
their path relative to the entrypoint directory. Moving the complete
tree therefore preserves the key, while changing a relative path,
source byte, compiler build, or embedded stdlib still invalidates it.
This is the key used by packaged adjacent artifacts; ordinary shared
cache entries remain anchored to canonical host paths.
Sourcepub fn for_artifact_version(self, harn_version: impl Into<String>) -> Self
pub fn for_artifact_version(self, harn_version: impl Into<String>) -> Self
Restamp this key for an artifact that a different Harn version will load. Only release preparation needs this; every ordinary compile and lookup keeps the running binary’s own version.
Sourcepub fn from_module_source(source: &ModuleSource) -> Self
pub fn from_module_source(source: &ModuleSource) -> Self
Compute the cache key for one independently-compiled module artifact.
A ModuleArtifact stores unresolved import specs and never compiles
dependency contents into the parent artifact. Walking the transitive
graph here therefore adds cold-start I/O without protecting correctness:
the runtime loads every dependency under its own source-local key.
Diagnostic paths are rebound when the artifact is loaded, so adjacent
and packaged artifacts remain relocatable without aliasing attribution.
Sourcepub fn from_module_content_hash(content_hash: [u8; 32]) -> Self
pub fn from_module_content_hash(content_hash: [u8; 32]) -> Self
As from_module_source, but from a digest
recorded earlier instead of bytes in hand.
The digest is the only part of a module key that depends on the file;
every other component is process-global. That asymmetry is what lets a
validated GraphLinkTable name a module’s artifact without the file
being read again.
Sourcepub fn filename(&self) -> String
pub fn filename(&self) -> String
Entry-chunk filename for this key. We hash by source content alone so two invocations of the same source from different paths share a cache entry; the header’s compilation-context hash still gates reuse on a per-load basis.
Sourcepub fn module_filename(&self) -> String
pub fn module_filename(&self) -> String
Module-artifact filename for this complete compilation key. Diagnostic source paths are rebound at load time, so identical source and compiler inputs share one relocatable artifact across paths.
Trait Implementations§
impl Eq for CacheKey
impl StructuralPartialEq for CacheKey
Auto Trait Implementations§
impl Freeze for CacheKey
impl RefUnwindSafe for CacheKey
impl Send for CacheKey
impl Sync for CacheKey
impl Unpin for CacheKey
impl UnsafeUnpin for CacheKey
impl UnwindSafe for CacheKey
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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<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>
renamed to 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);