feat+chore: factories to create forge adapters
ci/woodpecker/push/woodpecker Pipeline failed
Details
ci/woodpecker/push/woodpecker Pipeline failed
Details
This commit is contained in:
parent
c7f5619e7a
commit
63108e7341
|
@ -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),
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 New Issue