refactor: extensions
All checks were successful
continuous-integration/drone/push Build is passing

Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
Kasper Juul Hermansen 2024-02-11 22:10:08 +01:00
parent ab3d1d9817
commit 21dcca47b5
Signed by: kjuulh
GPG Key ID: 57B6E1465221F912
7 changed files with 1075 additions and 36 deletions

1064
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,8 @@ tonic = "0.11.0"
uuid = { version = "1.7.0", features = ["v7", "v4"] } uuid = { version = "1.7.0", features = ["v7", "v4"] }
async-trait = "0.1.77" async-trait = "0.1.77"
mockall_double = "0.3.1" mockall_double = "0.3.1"
aws-config = { version = "1.1.5", features = ["behavior-version-latest"] }
aws-sdk-s3 = { version = "1.15.0", features = ["behavior-version-latest"] }
[build-dependencies] [build-dependencies]
tonic-build = "0.11.0" tonic-build = "0.11.0"

View File

@ -11,28 +11,21 @@ impl Deref for SharedApp {
} }
} }
impl Default for SharedApp {
fn default() -> Self {
Self::new()
}
}
impl SharedApp { impl SharedApp {
pub fn new() -> Self { pub fn new(app: App) -> Self {
Self(Arc::new(App::new())) Self(Arc::new(app))
} }
} }
pub struct App {} pub struct App {
pub s3_client: aws_sdk_s3::Client,
impl Default for App {
fn default() -> Self {
Self::new()
}
} }
impl App { impl App {
pub fn new() -> Self { pub async fn new() -> anyhow::Result<Self> {
Self {} let shared_config = aws_config::load_from_env().await;
let client = aws_sdk_s3::Client::new(&shared_config);
Ok(Self { s3_client: client })
} }
} }

View File

@ -1,7 +1,11 @@
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
use std::net::SocketAddr; use std::net::SocketAddr;
use crate::{api::axum_serve, app::SharedApp, grpc::tonic_serve}; use crate::{
api::axum_serve,
app::{App, SharedApp},
grpc::tonic_serve,
};
#[derive(Parser)] #[derive(Parser)]
#[command(author, version, about, long_about = None, subcommand_required = true)] #[command(author, version, about, long_about = None, subcommand_required = true)]
@ -29,7 +33,7 @@ impl Command {
tracing::info!("Starting service"); tracing::info!("Starting service");
let app = SharedApp::new(); let app = SharedApp::new(App::new().await?);
tokio::select! { tokio::select! {
res = axum_serve(host, app.clone()) => { res = axum_serve(host, app.clone()) => {

View File

@ -5,15 +5,17 @@ use super::release_manager::models::ArtifactID;
pub mod extensions; pub mod extensions;
#[derive(Clone)] #[derive(Clone)]
pub struct FileStore {} pub struct FileStore {
client: aws_sdk_s3::Client,
}
#[cfg(test)] #[cfg(test)]
use mockall::{automock, mock, predicate::*}; use mockall::{automock, mock, predicate::*};
#[cfg_attr(test, automock)] #[cfg_attr(test, automock)]
impl FileStore { impl FileStore {
pub fn new() -> Self { pub fn new(client: aws_sdk_s3::Client) -> Self {
Self {} Self { client }
} }
pub async fn upload_files( pub async fn upload_files(

View File

@ -9,6 +9,6 @@ pub trait FileStoreExt {
impl FileStoreExt for SharedApp { impl FileStoreExt for SharedApp {
fn file_store(&self) -> FileStore { fn file_store(&self) -> FileStore {
FileStore::new() FileStore::new(self.s3_client.clone())
} }
} }

View File

@ -37,7 +37,7 @@ mod test {
#[tokio::test] #[tokio::test]
async fn generated_artifact_id() -> anyhow::Result<()> { async fn generated_artifact_id() -> anyhow::Result<()> {
let mut file_store = MockFileStore::new(); let mut file_store = MockFileStore::default();
file_store file_store
.expect_upload_files() .expect_upload_files()
.times(1) .times(1)