pub struct Release {
pub version: String,
pub url: String,
pub assets: Vec<ReleaseAsset>,
}Expand description
A published release.
Fields§
§version: StringSemver without the leading v (e.g. 1.25.0).
url: StringThe release page URL — where “Release Notes” and the download fallback go.
assets: Vec<ReleaseAsset>Every uploaded asset.
Implementations§
Source§impl Release
impl Release
Sourcepub fn asset_for(&self, kind: &InstallKind) -> Option<&ReleaseAsset>
pub fn asset_for(&self, kind: &InstallKind) -> Option<&ReleaseAsset>
The download this install would fetch, if the release has published it.
None for InstallKind::Unknown, which has no in-place path at all.
Sourcepub fn checksum_for(&self, asset: &ReleaseAsset) -> Option<&ReleaseAsset>
pub fn checksum_for(&self, asset: &ReleaseAsset) -> Option<&ReleaseAsset>
The asset publishing asset’s SHA-256, if the release ships one.
Recognises the two conventions in the wild: a per-asset digest file
(Acme.AppImage.sha256) and a listing covering the whole release
(SHA256SUMS, checksums.txt). A per-asset file wins, because it is
unambiguous about what it covers.
Sourcepub fn ready_for(&self, kind: &InstallKind) -> bool
pub fn ready_for(&self, kind: &InstallKind) -> bool
Whether this release has finished publishing what this machine needs.
For an in-place install that means the exact asset. For everything else
the action is “open the download page”, which needs no particular
artifact — so the only thing worth waiting for is the release having
any asset at all. Gating those on a per-OS asset instead would strand
anyone whose platform you don’t publish for (a source build on riscv64,
say) on “still building” forever, never reaching the page fallback that
InstallKind::Unknown exists to provide.
Trait Implementations§
impl Eq for Release
impl StructuralPartialEq for Release
Auto Trait Implementations§
impl Freeze for Release
impl RefUnwindSafe for Release
impl Send for Release
impl Sync for Release
impl Unpin for Release
impl UnsafeUnpin for Release
impl UnwindSafe for Release
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
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync 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
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 more