Files
gt-tool/src/structs/release.rs

76 lines
1.7 KiB
Rust

use std::fmt::Display;
use colored::Colorize;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
pub struct Release {
pub id: usize,
pub tag_name: String,
target_commitish: String,
name: String,
body: String,
url: String,
html_url: String,
tarball_url: String,
zipball_url: String,
upload_url: String,
draft: bool,
prerelease: bool,
created_at: String,
published_at: String,
author: Author,
}
impl Display for Release {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let tag = "Tag:".green().bold();
let name = "Name:".green();
let published = "Published:".bright_green();
let created = "Created:".green().dimmed();
let author = "Author:".blue();
let body = if self.body.len() > 0 {
&self.body.white()
} else {
&String::from("(empty body)").dimmed()
};
write!(f,
"{tag} {}
{name} {}
{}
{published} {} ({created} {})
{author} {} ({})",
self.tag_name.bold(),
self.name,
body,
self.published_at,
self.created_at.dimmed(),
self.author.login,
self.author.email,
)
}
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Author {
id: usize,
login: String,
login_name: String,
source_id: usize,
full_name: String,
email: String,
}
#[derive(Debug, Serialize)]
pub struct CreateReleaseOption {
pub body: String,
pub draft: bool,
pub name: String,
pub prerelease: bool,
pub tag_name: String,
pub target_commitish: String,
}
pub struct EditReleaseOption;