diff --git a/Cargo.toml b/Cargo.toml index 4122003..ceddda0 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Rakshith Ravi "] edition = "2018" name = "juno" -version = "0.1.3-3" +version = "0.1.3-4" license = "MIT" description = "A helper rust library for the juno microservices framework" homepage = "https://github.com/bytesonus/juno-rust" diff --git a/src/juno_module.rs b/src/juno_module.rs index 16346f1..19a76e3 100644 --- a/src/juno_module.rs +++ b/src/juno_module.rs @@ -146,9 +146,9 @@ impl JunoModule { Ok(()) } - pub async fn trigger_hook(&mut self, hook: &str) -> Result<()> { + pub async fn trigger_hook(&mut self, hook: &str, data: Value) -> Result<()> { let hook = hook.to_string(); - let request = self.protocol.trigger_hook(hook); + let request = self.protocol.trigger_hook(hook, data); self.send_request(request).await?; Ok(()) } diff --git a/src/models/messages.rs b/src/models/messages.rs index a21d6d0..326edbd 100755 --- a/src/models/messages.rs +++ b/src/models/messages.rs @@ -30,10 +30,12 @@ pub enum BaseMessage { TriggerHookRequest { request_id: String, hook: String, + data: Value, }, TriggerHookResponse { request_id: String, hook: Option, + data: Value, }, DeclareFunctionRequest { request_id: String, diff --git a/src/protocol/base_protocol.rs b/src/protocol/base_protocol.rs index 79d2ef9..c4b2bc8 100644 --- a/src/protocol/base_protocol.rs +++ b/src/protocol/base_protocol.rs @@ -75,10 +75,11 @@ impl BaseProtocol { } } - pub fn trigger_hook(&self, hook: String) -> BaseMessage { + pub fn trigger_hook(&self, hook: String, data: Value) -> BaseMessage { BaseMessage::TriggerHookRequest { request_id: self.generate_request_id(), hook, + data, } } diff --git a/src/protocol/json_protocol.rs b/src/protocol/json_protocol.rs index 9cc7a4f..15a38c1 100644 --- a/src/protocol/json_protocol.rs +++ b/src/protocol/json_protocol.rs @@ -76,17 +76,33 @@ pub fn encode(protocol: &BaseProtocol, req: BaseMessage) -> Buffer { request_keys::TYPE: request_types::REGISTER_HOOK_RESPONSE, }), - BaseMessage::TriggerHookRequest { request_id, hook } => json!({ - request_keys::REQUEST_ID: request_id, - request_keys::TYPE: request_types::TRIGGER_HOOK_REQUEST, - request_keys::HOOK: hook, - }), + BaseMessage::TriggerHookRequest { + request_id, + hook, + data, + } => { + let json_data: Value = data.into(); + json!({ + request_keys::REQUEST_ID: request_id, + request_keys::TYPE: request_types::TRIGGER_HOOK_REQUEST, + request_keys::HOOK: hook, + request_keys::DATA: json_data, + }) + } - BaseMessage::TriggerHookResponse { request_id, hook } => json!({ - request_keys::REQUEST_ID: request_id, - request_keys::TYPE: request_types::TRIGGER_HOOK_RESPONSE, - request_keys::HOOK: hook - }), + BaseMessage::TriggerHookResponse { + request_id, + hook, + data, + } => { + let json_data: Value = data.into(); + json!({ + request_keys::REQUEST_ID: request_id, + request_keys::TYPE: request_types::TRIGGER_HOOK_RESPONSE, + request_keys::HOOK: hook, + request_keys::DATA: json_data, + }) + } BaseMessage::DeclareFunctionRequest { request_id, @@ -207,16 +223,32 @@ fn decode_internal(data: &[u8]) -> Option { } else if r#type == 7 { let request_id = result[request_keys::REQUEST_ID].as_str()?.to_string(); let hook = result[request_keys::HOOK].as_str()?.to_string(); + let data = result + .get(request_keys::DATA) + .unwrap_or(&Value::Null) + .clone(); - Some(BaseMessage::TriggerHookRequest { request_id, hook }) + Some(BaseMessage::TriggerHookRequest { + request_id, + hook, + data: data.into(), + }) } else if r#type == 8 { let request_id = result[request_keys::REQUEST_ID].as_str()?.to_string(); let hook = match result[request_keys::HOOK].as_str() { Some(string) => Some(string.to_string()), None => None, }; + let data = result + .get(request_keys::DATA) + .unwrap_or(&Value::Null) + .clone(); - Some(BaseMessage::TriggerHookResponse { request_id, hook }) + Some(BaseMessage::TriggerHookResponse { + request_id, + hook, + data: data.into(), + }) } else if r#type == 9 { let request_id = result[request_keys::REQUEST_ID].as_str()?.to_string(); let function = result[request_keys::FUNCTION].as_str()?.to_string(); diff --git a/tests/models/messages.rs b/tests/models/messages.rs index c96e10e..31c369b 100644 --- a/tests/models/messages.rs +++ b/tests/models/messages.rs @@ -32,10 +32,12 @@ fn check_types_are_storing_values() { BaseMessage::TriggerHookRequest { request_id: String::from("request_id"), hook: String::from("hook"), + data: Value::Null, }, BaseMessage::TriggerHookResponse { request_id: String::from("request_id"), hook: Some(String::from("hook")), + data: Value::Null, }, BaseMessage::DeclareFunctionRequest { request_id: String::from("request_id"), @@ -90,13 +92,23 @@ fn check_types_are_storing_values() { BaseMessage::RegisterHookResponse { request_id } => { assert_eq!(request_id, &String::from("request_id")); } - BaseMessage::TriggerHookRequest { request_id, hook } => { + BaseMessage::TriggerHookRequest { + request_id, + hook, + data, + } => { assert_eq!(request_id, &String::from("request_id")); assert_eq!(hook, &String::from("hook")); + assert_eq!(data, &Value::Null); } - BaseMessage::TriggerHookResponse { request_id, hook } => { + BaseMessage::TriggerHookResponse { + request_id, + hook, + data, + } => { assert_eq!(request_id, &String::from("request_id")); assert_eq!(hook, &Some(String::from("hook"))); + assert_eq!(data, &Value::Null); } BaseMessage::DeclareFunctionRequest { request_id,