feat+chore: factories to create forge adapters
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
This commit is contained in:
parent
c7f5619e7a
commit
63108e7341
31
src/auth/adapter/out/forge/forge_factory.rs
Normal file
31
src/auth/adapter/out/forge/forge_factory.rs
Normal 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),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
71
src/auth/adapter/out/forge/forge_repository.rs
Normal file
71
src/auth/adapter/out/forge/forge_repository.rs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue