summaryrefslogtreecommitdiffstats
path: root/crates/core/c8y_smartrest
diff options
context:
space:
mode:
authorAlbin Suresh <albin.suresh@softwareag.com>2022-03-07 17:42:04 +0530
committerAlbin Suresh <albin.suresh@softwareag.com>2022-03-11 12:40:45 +0530
commit59fd1aa5ec16cc6a8cd89fc8f3541cf33f763ff3 (patch)
tree128406c2a056d723574d8496cc1f033efb9484c8 /crates/core/c8y_smartrest
parentc02fd97270b026536ed4d3e12f793299e9e76b70 (diff)
Closes #893 Support custom fields and fragments in Thin Edge JSON events
Diffstat (limited to 'crates/core/c8y_smartrest')
-rw-r--r--crates/core/c8y_smartrest/src/event.rs141
-rw-r--r--crates/core/c8y_smartrest/src/lib.rs1
2 files changed, 0 insertions, 142 deletions
diff --git a/crates/core/c8y_smartrest/src/event.rs b/crates/core/c8y_smartrest/src/event.rs
deleted file mode 100644
index ef2e9662..00000000
--- a/crates/core/c8y_smartrest/src/event.rs
+++ /dev/null
@@ -1,141 +0,0 @@
-use thin_edge_json::event::ThinEdgeEvent;
-use time::{format_description::well_known::Rfc3339, OffsetDateTime};
-
-use crate::error::SmartRestSerializerError;
-
-const CREATE_EVENT_SMARTREST_CODE: u16 = 400;
-
-/// Converts from thin-edge event to C8Y event SmartREST message
-pub fn serialize_event(event: ThinEdgeEvent) -> Result<String, SmartRestSerializerError> {
- let current_timestamp = OffsetDateTime::now_utc();
- match event.data {
- None => Ok(format!(
- "{CREATE_EVENT_SMARTREST_CODE},{},{},{}",
- event.name,
- event.name,
- current_timestamp.format(&Rfc3339)?
- )),
- Some(event_data) => {
- let smartrest_message = format!(
- "{CREATE_EVENT_SMARTREST_CODE},{},\"{}\",{}",
- event.name.clone(),
- event_data.text.unwrap_or(event.name),
- event_data.time.map_or_else(
- || current_timestamp.format(&Rfc3339),
- |timestamp| timestamp.format(&Rfc3339)
- )?
- );
-
- Ok(smartrest_message)
- }
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use anyhow::Result;
- use assert_matches::assert_matches;
- use serde::Deserialize;
- use test_case::test_case;
- use thin_edge_json::event::ThinEdgeEventData;
- use time::macros::datetime;
-
- #[test_case(
- ThinEdgeEvent {
- name: "click_event".into(),
- data: Some(ThinEdgeEventData {
- text: Some("Someone clicked".into()),
- time: Some(datetime!(2021-04-23 19:00:00 +05:00)),
- }),
- },
- "400,click_event,\"Someone clicked\",2021-04-23T19:00:00+05:00"
- ;"event translation"
- )]
- #[test_case(
- ThinEdgeEvent {
- name: "click_event".into(),
- data: Some(ThinEdgeEventData {
- text: None,
- time: Some(datetime!(2021-04-23 19:00:00 +05:00)),
- }),
- },
- "400,click_event,\"click_event\",2021-04-23T19:00:00+05:00"
- ;"event translation without message"
- )]
- #[test_case(
- ThinEdgeEvent {
- name: "click_event".into(),
- data: Some(ThinEdgeEventData {
- text: Some("Someone, clicked, it".into()),
- time: Some(datetime!(2021-04-23 19:00:00 +05:00)),
- }),
- },
- "400,click_event,\"Someone, clicked, it\",2021-04-23T19:00:00+05:00"
- ;"event translation with commas in message"
- )]
- fn check_event_translation(event: ThinEdgeEvent, expected_smartrest_msg: &str) {
- let result = serialize_event(event);
-
- assert_eq!(result.unwrap(), expected_smartrest_msg);
- }
-
- #[derive(Debug, Deserialize)]
- struct SmartRestEvent {
- pub code: i32,
- pub name: String,
- pub message: Option<String>,
- pub time: Option<String>,
- }
-
- #[test]
- fn event_translation_empty_json_payload_generates_timestamp() -> Result<()> {
- let event = ThinEdgeEvent {
- name: "empty_event".into(),
- data: Some(ThinEdgeEventData {
- text: None,
- time: None,
- }),
- };
-
- let smartrest_message = serialize_event(event)?;
- let mut reader = csv::ReaderBuilder::new()
- .has_headers(false)
- .from_reader(smartrest_message.as_bytes());
- let mut iter = reader.deserialize();
- let result = iter.next();
-
- assert!(result.is_some());
- let smartrest_event: SmartRestEvent = result.expect("One entry expected")?;
- assert_eq!(smartrest_event.code, 400);
- assert_eq!(smartrest_event.name, "empty_event".to_string());
- assert_eq!(smartrest_event.message, Some("empty_event".to_string()));
- assert_matches!(smartrest_event.time, Some(_));
-
- Ok(())
- }
-
- #[test]
- fn event_translation_empty_payload() -> Result<()> {
- let event = ThinEdgeEvent {
- name: "empty_event".into(),
- data: None,
- };
-
- let smartrest_message = serialize_event(event)?;
- let mut reader = csv::ReaderBuilder::new()
- .has_headers(false)
- .from_reader(smartrest_message.as_bytes());
- let mut iter = reader.deserialize();
- let result = iter.next();
-
- assert!(result.is_some());
- let smartrest_event: SmartRestEvent = result.expect("One entry expected")?;
- assert_eq!(smartrest_event.code, 400);
- assert_eq!(smartrest_event.name, "empty_event".to_string());
- assert_eq!(smartrest_event.message, Some("empty_event".to_string()));
- assert_matches!(smartrest_event.time, Some(_));
-
- Ok(())
- }
-}
diff --git a/crates/core/c8y_smartrest/src/lib.rs b/crates/core/c8y_smartrest/src/lib.rs
index b6338b06..ddb3bd2c 100644
--- a/crates/core/c8y_smartrest/src/lib.rs
+++ b/crates/core/c8y_smartrest/src/lib.rs
@@ -1,6 +1,5 @@
pub mod alarm;
pub mod error;
-pub mod event;
pub mod operations;
pub mod smartrest_deserializer;
pub mod smartrest_serializer;