git-release 0.1.1

Set the release information based on all commits of a tag
use octocrab::Octocrab;

pub struct Release<'a> {
    pub token: &'a str,
    pub user: &'a str,
    pub repository: &'a str,
    pub tag: &'a str,
    pub description: &'a str,
}

impl<'a> Release<'a> {
    /// Creates a new release based on the given criteria.
    pub async fn create(&self) -> octocrab::Result<octocrab::models::repos::Release> {
        let name = format!("Release {}", self.tag);
        Octocrab::builder()
            .personal_token(self.token.to_owned())
            .build()?
            .repos(self.user, self.repository)
            .releases()
            .create(self.tag)
            .name(&name)
            .body(self.description)
            .send()
            .await
    }

    pub async fn release_id(&self) -> octocrab::Result<octocrab::models::ReleaseId> {
        Ok(Octocrab::builder()
            .personal_token(self.token.to_owned())
            .build()?
            .repos(self.user, self.repository)
            .releases()
            .get_by_tag(self.tag)
            .await?
            .id)
    }

    pub async fn update(&self, id: u64) -> octocrab::Result<octocrab::models::repos::Release> {
        let name = format!("Release {}", self.tag);
        Octocrab::builder()
            .personal_token(self.token.to_owned())
            .build()?
            .repos(self.user, self.repository)
            .releases()
            .update(id)
            .name(&name)
            .body(self.description)
            .send()
            .await
    }
}