feat+chore: factories to create forge adapters
ci/woodpecker/push/woodpecker Pipeline failed Details

This commit is contained in:
Aravinth Manivannan 2024-05-06 22:28:21 +05:30
parent c7f5619e7a
commit 63108e7341
Signed by: realaravinth
GPG Key ID: F8F50389936984FF
2 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,31 @@
use std::sync::Arc;
use mockall::predicate::*;
use mockall::*;
use super::forgejo::Forgejo;
use crate::auth::application::port::out::forge::oauth_auth_req_uri::OAuthAuthReqUri;
#[automock]
pub trait ForgeAdapterFactoryInterface: Send + Sync {
fn get_oauth_auth_req_uri_adapter(&self) -> Arc<dyn OAuthAuthReqUri>;
}
#[derive(Clone)]
pub struct ForgeAdapterFactory {
forgejo: Arc<Forgejo>,
}
impl ForgeAdapterFactoryInterface for ForgeAdapterFactory {
fn get_oauth_auth_req_uri_adapter(&self) -> Arc<dyn OAuthAuthReqUri> {
self.forgejo.clone()
}
}
impl ForgeAdapterFactory {
pub fn new(forgejo: Forgejo) -> Self {
Self {
forgejo: Arc::new(forgejo),
}
}
}

View File

@ -0,0 +1,71 @@
use std::collections::HashMap;
use std::sync::Arc;
use mockall::predicate::*;
use mockall::*;
use super::{
forge_factory::ForgeAdapterFactory, forge_factory::ForgeAdapterFactoryInterface,
forgejo::Forgejo, SupportedForges,
};
#[automock]
pub trait ForgeRepositoryInterface: Send + Sync {
fn add_forge(
&mut self,
name: SupportedForges,
forge_factory: Arc<dyn ForgeAdapterFactoryInterface>,
);
fn get_supported_forge_str(&self) -> Vec<String>;
fn get_supported_forges(&self) -> Vec<SupportedForges>;
fn get_forge_factory(
&self,
name: &SupportedForges,
) -> Option<Arc<dyn ForgeAdapterFactoryInterface>>;
}
#[derive(Clone, Default)]
pub struct ForgeRepository {
forges: HashMap<SupportedForges, Arc<dyn ForgeAdapterFactoryInterface>>,
}
impl ForgeRepositoryInterface for ForgeRepository {
fn add_forge(
&mut self,
name: SupportedForges,
forge_factory: Arc<dyn ForgeAdapterFactoryInterface>,
) {
self.forges.insert(name, forge_factory);
}
fn get_supported_forge_str(&self) -> Vec<String> {
self.forges
.clone()
.into_keys()
.map(|v| v.to_string())
.collect()
}
fn get_supported_forges(&self) -> Vec<SupportedForges> {
self.forges.clone().into_keys().collect()
}
fn get_forge_factory(
&self,
name: &SupportedForges,
) -> Option<Arc<dyn ForgeAdapterFactoryInterface>> {
self.forges.get(name).cloned()
}
}
impl ForgeRepository {
pub fn new(forgejo: Forgejo) -> Self {
let forgejo_adapter = ForgeAdapterFactory::new(forgejo);
let mut s = Self::default();
s.add_forge(SupportedForges::Forgejo, Arc::new(forgejo_adapter));
s
}
}