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 { 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 } }