From f869c7f52d8fd1f1ef61e218bbec4d0dac27673d Mon Sep 17 00:00:00 2001 From: Max Audron Date: Tue, 7 Jun 2022 12:28:18 +0200 Subject: init --- src/forge/mod.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/forge/mod.rs (limited to 'src/forge/mod.rs') diff --git a/src/forge/mod.rs b/src/forge/mod.rs new file mode 100644 index 0000000..3e94812 --- /dev/null +++ b/src/forge/mod.rs @@ -0,0 +1,48 @@ +use std::ops::Deref; + +use anyhow::{Result, bail}; +use serde::{Deserialize, Serialize}; + +use crate::config::ForgeConfig; + +pub mod gitlab; + +#[derive(Clone, Debug)] +pub enum Forge { + Gitlab(self::gitlab::Gitlab), +} + +impl Forge { + pub async fn new(config: &ForgeConfig) -> Result { + match config { + ForgeConfig::Gitlab(config) => { + Ok(Forge::Gitlab(gitlab::Gitlab::from_config(config).await?)) + } + _ => bail!("wrong forge type found"), + } + } +} + +#[async_trait::async_trait] +pub trait ForgeTrait { + async fn projects(&self, scope: &str) -> Result>; +} + +impl Deref for Forge { + type Target = dyn ForgeTrait; + + fn deref(&self) -> &Self::Target { + match self { + Forge::Gitlab(forge) => forge, + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Project { + pub id: String, + pub name: String, + pub path: String, + pub ssh_clone_url: Option, + pub http_clone_url: Option, +} -- cgit v1.2.3