Skip to content

Commit a9e3910

Browse files
committed
Update Artifact builder service to trait
1 parent 1553cd9 commit a9e3910

File tree

3 files changed

+41
-15
lines changed

3 files changed

+41
-15
lines changed

mithril-aggregator/src/artifact_builder/artifact_builder_service.rs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use async_trait::async_trait;
2+
13
use std::sync::Arc;
24

35
use mithril_common::{
@@ -10,14 +12,29 @@ use crate::artifact_builder::ArtifactBuilder;
1012

1113
use super::MithrilStakeDistribution;
1214

13-
/// ArtifactBuilder Service
14-
pub struct ArtifactBuilderService {
15+
#[cfg(test)]
16+
use mockall::automock;
17+
18+
/// ArtifactBuilder Service trait
19+
#[cfg_attr(test, automock)]
20+
#[async_trait]
21+
pub trait ArtifactBuilderService: Send + Sync {
22+
/// Compute artifact from signed entity type
23+
async fn compute_artifact(
24+
&self,
25+
signed_entity_type: SignedEntityType,
26+
certificate: &Certificate,
27+
) -> StdResult<Arc<dyn Artifact>>;
28+
}
29+
30+
/// Mithril ArtifactBuilder Service
31+
pub struct MithrilArtifactBuilderService {
1532
mithril_stake_distribution_artifact_builder:
1633
Arc<dyn ArtifactBuilder<Epoch, MithrilStakeDistribution>>,
1734
}
1835

19-
impl ArtifactBuilderService {
20-
/// ArtifactBuilderService factory
36+
impl MithrilArtifactBuilderService {
37+
/// MithrilArtifactBuilderService factory
2138
#[allow(dead_code)]
2239
pub fn new(
2340
mithril_stake_distribution_artifact_builder: Arc<
@@ -30,13 +47,14 @@ impl ArtifactBuilderService {
3047
}
3148
}
3249

33-
impl ArtifactBuilderService {
50+
#[async_trait]
51+
impl ArtifactBuilderService for MithrilArtifactBuilderService {
3452
#[allow(dead_code)]
3553
async fn compute_artifact(
3654
&self,
3755
signed_entity_type: SignedEntityType,
3856
certificate: &Certificate,
39-
) -> StdResult<Arc<impl Artifact>> {
57+
) -> StdResult<Arc<dyn Artifact>> {
4058
let artifact = match signed_entity_type {
4159
SignedEntityType::MithrilStakeDistribution(e) => Arc::new(
4260
self.mithril_stake_distribution_artifact_builder
@@ -70,18 +88,21 @@ mod tests {
7088
.once()
7189
.return_once(move |_, _| Ok(mithril_stake_distribution_clone));
7290

73-
let artifact_builder_service =
74-
ArtifactBuilderService::new(Arc::new(mock_mithril_stake_distribution_artifact_builder));
91+
let artifact_builder_service = MithrilArtifactBuilderService::new(Arc::new(
92+
mock_mithril_stake_distribution_artifact_builder,
93+
));
7594
let certificate = Certificate::default();
7695

7796
let signed_entity_type = SignedEntityType::MithrilStakeDistribution(Epoch(1));
7897
let artifact = artifact_builder_service
7998
.compute_artifact(signed_entity_type, &certificate)
8099
.await
81100
.unwrap();
101+
let mithril_stake_distribution_computed: MithrilStakeDistribution =
102+
serde_json::from_str(&serde_json::to_string(&artifact).unwrap()).unwrap();
82103
assert_eq!(
83104
serde_json::to_string(&mithril_stake_distribution_expected).unwrap(),
84-
serde_json::to_string(&artifact).unwrap()
105+
serde_json::to_string(&mithril_stake_distribution_computed).unwrap()
85106
);
86107
}
87108
}

mithril-aggregator/src/dependency.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ pub struct DependencyManager {
115115
pub signable_builder_service: Arc<SignableBuilderService>,
116116

117117
/// Artifact Builder Service
118-
pub artifact_builder_service: Arc<ArtifactBuilderService>,
118+
pub artifact_builder_service: Arc<dyn ArtifactBuilderService>,
119119

120120
/// Certifier Service
121121
pub certifier_service: Arc<dyn CertifierService>,

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ use tokio::{
3333
use warp::Filter;
3434

3535
use crate::{
36-
artifact_builder::{ArtifactBuilderService, MithrilStakeDistributionArtifactBuilder},
36+
artifact_builder::{
37+
ArtifactBuilderService, MithrilArtifactBuilderService,
38+
MithrilStakeDistributionArtifactBuilder,
39+
},
3740
certifier_service::{CertifierService, MithrilCertifierService},
3841
configuration::{ExecutionEnvironment, LIST_SNAPSHOTS_MAX_ITEMS},
3942
database::provider::{
@@ -170,7 +173,7 @@ pub struct DependenciesBuilder {
170173
pub signable_builder_service: Option<Arc<SignableBuilderService>>,
171174

172175
/// Artifact Builder Service
173-
pub artifact_builder_service: Option<Arc<ArtifactBuilderService>>,
176+
pub artifact_builder_service: Option<Arc<dyn ArtifactBuilderService>>,
174177

175178
/// Certifier service
176179
pub certifier_service: Option<Arc<dyn CertifierService>>,
@@ -897,19 +900,21 @@ impl DependenciesBuilder {
897900
Ok(self.signable_builder_service.as_ref().cloned().unwrap())
898901
}
899902

900-
async fn build_artifact_builder_service(&mut self) -> Result<Arc<ArtifactBuilderService>> {
903+
async fn build_artifact_builder_service(&mut self) -> Result<Arc<dyn ArtifactBuilderService>> {
901904
let multi_signer = self.get_multi_signer().await?;
902905
let mithril_stake_distribution_artifact_builder =
903906
Arc::new(MithrilStakeDistributionArtifactBuilder::new(multi_signer));
904-
let artifact_builder_service = Arc::new(ArtifactBuilderService::new(
907+
let artifact_builder_service = Arc::new(MithrilArtifactBuilderService::new(
905908
mithril_stake_distribution_artifact_builder,
906909
));
907910

908911
Ok(artifact_builder_service)
909912
}
910913

911914
/// [ArtifactBuilderService] service
912-
pub async fn get_artifact_builder_service(&mut self) -> Result<Arc<ArtifactBuilderService>> {
915+
pub async fn get_artifact_builder_service(
916+
&mut self,
917+
) -> Result<Arc<dyn ArtifactBuilderService>> {
913918
if self.artifact_builder_service.is_none() {
914919
self.artifact_builder_service = Some(self.build_artifact_builder_service().await?);
915920
}

0 commit comments

Comments
 (0)