Skip to content

Commit 90c2be3

Browse files
committed
Replace Fromby TryFrom to avoid panics
1 parent ff75cc5 commit 90c2be3

File tree

2 files changed

+28
-18
lines changed

2 files changed

+28
-18
lines changed

mithril-aggregator/src/database/record/certificate_pending.rs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
use chrono::{DateTime, Utc};
2-
use mithril_common::entities::{CertificatePending, Epoch};
2+
use mithril_common::{
3+
entities::{CertificatePending, Epoch},
4+
StdError,
5+
};
36
use mithril_persistence::sqlite::{HydrationError, Projection, SourceAlias, SqLiteEntity};
47

58
/// CertificatePending record is the representation of a stored pending certificate.
@@ -61,26 +64,31 @@ impl SqLiteEntity for CertificatePendingRecord {
6164
}
6265
}
6366

64-
impl From<CertificatePending> for CertificatePendingRecord {
65-
fn from(value: CertificatePending) -> Self {
66-
Self {
67+
impl TryFrom<CertificatePending> for CertificatePendingRecord {
68+
type Error = StdError;
69+
70+
fn try_from(value: CertificatePending) -> Result<Self, Self::Error> {
71+
let record = Self {
6772
epoch: value.epoch,
68-
certificate: serde_json::to_string(&value).unwrap(),
73+
certificate: serde_json::to_string(&value)?,
6974
created_at: Utc::now(),
70-
}
75+
};
76+
Ok(record)
7177
}
7278
}
7379

74-
impl From<CertificatePendingRecord> for CertificatePending {
75-
fn from(record: CertificatePendingRecord) -> Self {
76-
let c: CertificatePending = serde_json::from_str(&record.certificate).unwrap();
77-
Self {
80+
impl TryFrom<CertificatePendingRecord> for CertificatePending {
81+
type Error = StdError;
82+
fn try_from(record: CertificatePendingRecord) -> Result<Self, Self::Error> {
83+
let c: CertificatePending = serde_json::from_str(&record.certificate)?;
84+
let pending_certificate = Self {
7885
epoch: record.epoch,
7986
signed_entity_type: c.signed_entity_type,
8087
protocol_parameters: c.protocol_parameters,
8188
next_protocol_parameters: c.next_protocol_parameters,
8289
signers: c.signers,
8390
next_signers: c.next_signers,
84-
}
91+
};
92+
Ok(pending_certificate)
8593
}
8694
}

mithril-aggregator/src/database/repository/pending_certificate_repository.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,28 @@ impl CertificatePendingRepository {
2828
impl CertificatePendingStorer for CertificatePendingRepository {
2929
/// Fetch the current [CertificatePending] if any.
3030
async fn get(&self) -> StdResult<Option<CertificatePending>> {
31-
Ok(self
32-
.connection
31+
self.connection
3332
.fetch_first(GetPendingCertificateRecordQuery::get())?
34-
.map(Into::into))
33+
.map(TryInto::try_into)
34+
.transpose()
3535
}
3636

3737
/// Save the given [CertificatePending].
3838
async fn save(&self, certificate: CertificatePending) -> StdResult<()> {
3939
self.connection
40-
.apply(SavePendingCertificateRecordQuery::save(certificate.into()))?;
40+
.apply(SavePendingCertificateRecordQuery::save(
41+
certificate.try_into()?,
42+
))?;
4143

4244
Ok(())
4345
}
4446

4547
/// Remove the current [CertificatePending] if any.
4648
async fn remove(&self) -> StdResult<Option<CertificatePending>> {
47-
Ok(self
48-
.connection
49+
self.connection
4950
.fetch_first(DeletePendingCertificateRecordQuery::get())?
50-
.map(Into::into))
51+
.map(TryInto::try_into)
52+
.transpose()
5153
}
5254
}
5355

0 commit comments

Comments
 (0)