pub struct WrapperReceipt {
pub outcome: WrapperOutcome,
pub nodes: Vec<NodeCacheStatus>,
pub total_wall_clock_ms: u64,
pub docker_ran: bool,
pub fell_through_reason: Option<String>,
}Expand description
The typed, serde-serializable “JSON receipt out” half of the
keyway contract.
Fields§
§outcome: WrapperOutcome§nodes: Vec<NodeCacheStatus>§total_wall_clock_ms: u64u64 milliseconds — see WrapperOutcome::CacheMiss for why not
u128 (serde_json + internally-tagged-enum round-trip).
docker_ran: bool§fell_through_reason: Option<String>Set when the cache accelerator could not be consulted and the
wrapper degraded to a plain real docker build — e.g. the graph
hasher rejected a Dockerfile that real docker builds fine (our
scoped parser is deliberately narrower than BuildKit), or the
cache backend itself errored (a transient Redis/Postgres hiccup).
The cache is an optimization: any cache-side trouble degrades to
a correct build, it never breaks one — this field makes that
degrade observable rather than silent. None on the normal
(cache consulted successfully) path.
Implementations§
Source§impl WrapperReceipt
impl WrapperReceipt
Sourcepub fn to_json(&self) -> Result<String, Error>
pub fn to_json(&self) -> Result<String, Error>
Render this receipt as pretty JSON — the canonical keyway output
surface (never format!() of ad-hoc fields).
§Errors
Propagates any serde_json serialization failure (never expected
for this fully-owned type, but kept fallible per the typed-emission
contract).
Trait Implementations§
Source§impl Clone for WrapperReceipt
impl Clone for WrapperReceipt
Source§fn clone(&self) -> WrapperReceipt
fn clone(&self) -> WrapperReceipt
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for WrapperReceipt
impl Debug for WrapperReceipt
Source§impl<'de> Deserialize<'de> for WrapperReceipt
impl<'de> Deserialize<'de> for WrapperReceipt
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>,
impl Eq for WrapperReceipt
Source§impl PartialEq for WrapperReceipt
impl PartialEq for WrapperReceipt
Source§impl Serialize for WrapperReceipt
impl Serialize for WrapperReceipt
impl StructuralPartialEq for WrapperReceipt
Auto Trait Implementations§
impl Freeze for WrapperReceipt
impl RefUnwindSafe for WrapperReceipt
impl Send for WrapperReceipt
impl Sync for WrapperReceipt
impl Unpin for WrapperReceipt
impl UnsafeUnpin for WrapperReceipt
impl UnwindSafe for WrapperReceipt
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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<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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.