#![cfg_attr(feature = "client_lib", doc = include_str!("../example.md"))]
#[cfg(feature = "client_lib")]
mod client;
#[cfg(feature = "client_lib")]
pub mod error;
#[cfg(feature = "client_lib")]
pub use client::Gazenot;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
pub type ArtifactSetId = String;
pub type Owner = String;
pub type SourceHost = String;
pub type PackageName = String;
pub type ReleaseTag = String;
pub type UnparsedUrl = String;
pub type UnparsedVersion = String;
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct ArtifactSet {
pub package: PackageName,
pub public_id: ArtifactSetId,
pub set_download_url: Option<UnparsedUrl>,
pub upload_url: Option<UnparsedUrl>,
pub release_url: Option<UnparsedUrl>,
pub announce_url: Option<UnparsedUrl>,
}
pub const MOCK_ARTIFACT_SET_PUBLIC_ID: &str = "fake-id-do-not-upload";
impl ArtifactSet {
pub fn new(package: String, public_id: ArtifactSetId) -> Self {
Self {
package,
public_id,
set_download_url: None,
upload_url: None,
release_url: None,
announce_url: None,
}
}
pub fn mock(package: String) -> Self {
let set_download_url = Some(format!(
"https://fake.axo.dev/faker/{package}/{MOCK_ARTIFACT_SET_PUBLIC_ID}"
));
Self {
package,
public_id: MOCK_ARTIFACT_SET_PUBLIC_ID.to_owned(),
set_download_url,
upload_url: None,
release_url: None,
announce_url: None,
}
}
pub fn is_mock(&self) -> bool {
self.public_id == MOCK_ARTIFACT_SET_PUBLIC_ID
}
pub fn to_release(&self, tag: ReleaseTag) -> Release {
Release {
package: self.package.clone(),
tag,
announce_url: self.announce_url.clone(),
release_download_url: None,
}
}
}
#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
pub struct Release {
pub package: PackageName,
pub tag: ReleaseTag,
pub release_download_url: Option<UnparsedUrl>,
pub announce_url: Option<UnparsedUrl>,
}
impl Release {
pub fn new(package: String, tag: ReleaseTag) -> Self {
Self {
package,
tag,
release_download_url: None,
announce_url: None,
}
}
}
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone)]
pub struct ReleaseKey {
pub tag: ReleaseTag,
pub version: UnparsedVersion,
pub is_prerelease: bool,
}
#[derive(Debug, Clone)]
pub struct AnnouncementKey {
pub body: String,
}
#[derive(Debug, Clone)]
pub struct ReleaseList {
pub package_name: PackageName,
pub releases: Vec<PublicRelease>,
}
#[derive(Debug, Clone)]
pub struct PublicRelease {
pub name: String,
pub tag_name: ReleaseTag,
pub version: UnparsedVersion,
pub body: String,
pub prerelease: bool,
pub created_at: String,
pub assets: Vec<ReleaseAsset>,
}
#[derive(Debug, Clone)]
pub struct ReleaseAsset {
pub browser_download_url: String,
pub name: String,
pub uploaded_at: String,
}