From 31be915ab71dcab004b64b313b20188af85c5d24 Mon Sep 17 00:00:00 2001
From: David Li
Date: Mon, 19 Oct 2015 08:36:50 -0400
Subject: Initial commit
---
src/message.rs | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+)
create mode 100644 src/message.rs
(limited to 'src/message.rs')
diff --git a/src/message.rs b/src/message.rs
new file mode 100644
index 0000000..c0a766c
--- /dev/null
+++ b/src/message.rs
@@ -0,0 +1,94 @@
+extern crate rustc_serialize;
+
+use self::rustc_serialize::{json, Decodable, Decoder};
+
+#[derive(Debug)]
+pub enum Push {
+ Mirror {
+ notification_id: i32,
+ title: String,
+ body: String,
+ application_name: String,
+ package_name: String,
+ icon: String
+ },
+ Dismissal {
+ notification_id: i32
+ }
+}
+
+#[derive(Debug)]
+pub enum Message {
+ Nop,
+ Push(Push)
+}
+
+impl Decodable for Push {
+ fn decode(d: &mut D) -> Result {
+ d.read_struct("root", 0, |d| {
+ let type_ : String = try!(d.read_struct_field("type", 0, Decodable::decode));
+ match type_.as_ref() {
+ "mirror" => {
+ let id = try!(
+ d.read_struct_field("notification_id", 0, Decodable::decode));
+ let title = try!(
+ d.read_struct_field("title", 0, Decodable::decode));
+ let body = try!(
+ d.read_struct_field("body", 0, Decodable::decode));
+ let app_name = try!(
+ d.read_struct_field("application_name", 0, Decodable::decode));
+ let package_name = try!(
+ d.read_struct_field("package_name", 0, Decodable::decode));
+ let icon = try!(
+ d.read_struct_field("icon", 0, Decodable::decode));
+
+ Ok(Push::Mirror {
+ title: title,
+ body: body,
+ application_name: app_name,
+ package_name: package_name,
+ notification_id: id,
+ icon: icon
+ })
+ }
+ "dismissal" => {
+ let id = try!(
+ d.read_struct_field("notification_id", 0, Decodable::decode));
+
+ Ok(Push::Dismissal {
+ notification_id: id
+ })
+ }
+ _ => {
+ let err_msg = format!(
+ "Invalid value for push type: {} (expected 'mirror' or 'dismissal')",
+ type_);
+ Err(d.error(err_msg.as_ref()))
+ }
+ }
+ })
+ }
+}
+
+impl Decodable for Message {
+ fn decode(d: &mut D) -> Result {
+ d.read_struct("root", 0, |d| {
+ let type_ : String = try!(d.read_struct_field("type", 0, Decodable::decode));
+
+ match type_.as_ref() {
+ "nop" => Ok(Message::Nop),
+ "push" => {
+ d.read_struct_field("push", 0, |d| {
+ Ok(Message::Push(try!(Decodable::decode(d))))
+ })
+ },
+ _ => {
+ let err_msg = format!(
+ "Invalid value for message type: {}",
+ type_);
+ Err(d.error(err_msg.as_ref()))
+ }
+ }
+ })
+ }
+}
--
cgit v1.2.3