Skip to content

Commit 99fbdf1

Browse files
committed
Simplify json creation in query
1 parent d67e3fe commit 99fbdf1

File tree

4 files changed

+40
-26
lines changed

4 files changed

+40
-26
lines changed

mithril-aggregator/src/event_store/database/query.rs

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::event_store::{Event, EventMessage};
22
use chrono::Utc;
33
use mithril_common::StdResult;
44
use mithril_persistence::sqlite::{Query, SourceAlias, SqLiteEntity, WhereCondition};
5+
use serde_json::json;
56

67
/// Queries to insert [EventMessage] to the sqlite database.
78
pub struct InsertEventQuery {
@@ -15,11 +16,10 @@ impl InsertEventQuery {
1516
vec![
1617
sqlite::Value::String(message.source),
1718
sqlite::Value::String(message.action),
18-
sqlite::Value::String(format!(
19-
r#"{{"headers": {}, "content": {}}}"#,
20-
serde_json::to_string(&message.headers)?,
21-
message.content
22-
)),
19+
sqlite::Value::String(serde_json::to_string(&json!({
20+
"content": message.content,
21+
"headers": message.headers,
22+
}))?),
2323
sqlite::Value::String(Utc::now().to_rfc3339()),
2424
],
2525
);
@@ -48,13 +48,38 @@ mod tests {
4848

4949
#[test]
5050
fn provider_sql() {
51-
let message = EventMessage::new("source", "action", "content");
52-
let (parameters, values) = InsertEventQuery::one(message).unwrap().filters().expand();
51+
let message = EventMessage::new("source", "action", serde_json::json!("content"));
52+
53+
let (final_expression, parameters) =
54+
InsertEventQuery::one(message).unwrap().filters().expand();
5355

5456
assert_eq!(
5557
"(source, action, content, created_at) values (?1, ?2, ?3, ?4)".to_string(),
56-
parameters
58+
final_expression
59+
);
60+
assert_eq!(4, parameters.len());
61+
}
62+
63+
#[test]
64+
fn build_a_json_for_content_field_with_content_and_headers() {
65+
let content = serde_json::json!({
66+
"attr1": "content".to_string(),
67+
"attr2": 123,
68+
});
69+
70+
let mut message = EventMessage::new("source", "action", content);
71+
message
72+
.headers
73+
.insert("key".to_string(), "value".to_string());
74+
75+
let (_, parameters) = InsertEventQuery::one(message).unwrap().filters().expand();
76+
77+
assert_eq!(
78+
sqlite::Value::String(
79+
r#"{"content":{"attr1":"content","attr2":123},"headers":{"key":"value"}}"#
80+
.to_string()
81+
),
82+
parameters[2]
5783
);
58-
assert_eq!(4, values.len());
5984
}
6085
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ mod tests {
4242
let connection = Arc::new(event_store_db_connection().unwrap());
4343

4444
let persister = EventPersister::new(connection);
45-
let message = EventMessage::new("source", "action", "content");
45+
let message = EventMessage::new("source", "action", serde_json::json!("content"));
4646

4747
let _event = persister.persist(message)?;
4848
Ok(())
@@ -53,7 +53,7 @@ mod tests {
5353
let connection = Arc::new(event_store_db_connection().unwrap());
5454

5555
let persister = EventPersister::new(connection);
56-
let message = EventMessage::new("source", "action", "content");
56+
let message = EventMessage::new("source", "action", serde_json::json!("content"));
5757

5858
let _event = persister.persist(message)?;
5959
Ok(())

mithril-aggregator/src/event_store/event.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,22 @@ pub struct EventMessage {
1616
pub action: String,
1717

1818
/// JSON content of the message, its type is declared in the action property.
19-
pub content: String,
19+
pub content: serde_json::Value,
2020

2121
/// Headers
2222
pub headers: HashMap<String, String>,
2323
}
2424

2525
impl EventMessage {
2626
/// Instantiate a new EventMessage.
27-
pub fn new(source: &str, action: &str, content: &str) -> Self {
27+
pub fn new(source: &str, action: &str, content: serde_json::Value) -> Self {
2828
Self {
2929
source: source.to_string(),
3030
action: action.to_string(),
31-
content: content.to_string(),
31+
content,
3232
headers: HashMap::new(),
3333
}
3434
}
35-
36-
/// forge a new instance adding the given header
37-
pub fn add_header(mut self, name: &str, value: &str) -> Self {
38-
let _ = self.headers.insert(name.to_owned(), value.to_owned());
39-
40-
self
41-
}
4235
}
4336

4437
/// Event persisted in the Event Store.

mithril-aggregator/src/event_store/transmitter_service.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,8 @@ impl TransmitterService<EventMessage> {
5050
where
5151
T: Serialize,
5252
{
53-
let content = serde_json::to_string(content).map_err(|e| {
54-
let error_msg = format!("Serialization error while forging event message: {e}");
55-
warn!(self.logger, "Event message error"; "error" => &error_msg);
53+
let content = serde_json::json!(content);
5654

57-
error_msg
58-
})?;
5955
let message = EventMessage {
6056
source: source.to_string(),
6157
action: action.to_string(),

0 commit comments

Comments
 (0)