generated from PlexSheep/rs-base
58 lines
1.6 KiB
Rust
58 lines
1.6 KiB
Rust
use crate::{
|
|
config::{Api, Config},
|
|
error::*,
|
|
serverapi::{PublishContext, ReleaseContext, ServerApi},
|
|
};
|
|
use async_trait::async_trait;
|
|
use forgejo_api;
|
|
|
|
pub struct Forgejo {
|
|
api: Api,
|
|
api_wrapper: forgejo_api::Forgejo,
|
|
}
|
|
|
|
impl Forgejo {
|
|
pub async fn build(api: &Api) -> Result<Self> {
|
|
let api_wrapper: forgejo_api::Forgejo = forgejo_api::Forgejo::new(
|
|
forgejo_api::Auth::Token(&api.auth.clone().unwrap().pass.get_pass()?),
|
|
api.endpoint.clone().unwrap(),
|
|
)
|
|
.map_err(ServerApiError::from)?;
|
|
Ok(Self {
|
|
api: api.clone(),
|
|
api_wrapper,
|
|
})
|
|
}
|
|
}
|
|
|
|
#[async_trait]
|
|
impl ServerApi for Forgejo {
|
|
async fn init(&mut self, _cfg: &Config) -> Result<()> {
|
|
Ok(())
|
|
}
|
|
async fn push_release(&mut self, rc: ReleaseContext) -> Result<()> {
|
|
let body: forgejo_api::structs::CreateReleaseOption =
|
|
forgejo_api::structs::CreateReleaseOption {
|
|
body: Some(rc.text),
|
|
draft: Some(rc.draft),
|
|
name: Some(rc.tag.clone()),
|
|
prerelease: Some(rc.prerelease),
|
|
tag_name: rc.tag,
|
|
target_commitish: Some(rc.commit_sig),
|
|
};
|
|
self.api_wrapper
|
|
.repo_create_release(&rc.username, &rc.repository, body)
|
|
.await
|
|
.map_err(ServerApiError::from)?;
|
|
Ok(())
|
|
}
|
|
async fn push_release_artifact(&mut self, _rc: ReleaseContext) -> Result<()> {
|
|
todo!()
|
|
}
|
|
async fn push_pkg(&mut self, _pc: PublishContext) -> Result<()> {
|
|
todo!()
|
|
}
|
|
fn get_cfg(&self) -> &Api {
|
|
&self.api
|
|
}
|
|
}
|