aboutsummaryrefslogtreecommitdiff
path: root/src/message/signalproxy/objects/highlightrulemanager.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/message/signalproxy/objects/highlightrulemanager.rs')
-rw-r--r--src/message/signalproxy/objects/highlightrulemanager.rs113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/message/signalproxy/objects/highlightrulemanager.rs b/src/message/signalproxy/objects/highlightrulemanager.rs
new file mode 100644
index 0000000..d579254
--- /dev/null
+++ b/src/message/signalproxy/objects/highlightrulemanager.rs
@@ -0,0 +1,113 @@
+use libquassel_derive::Network;
+
+use num_derive::{FromPrimitive, ToPrimitive};
+use num_traits::{FromPrimitive, ToPrimitive};
+
+#[derive(Debug, Clone, PartialEq, Network)]
+#[network(repr = "list")]
+pub struct HighlightRuleManager {
+ #[network(rename = "highlightRuleList", network, variant = "VariantMap")]
+ highlight_rule_list: Vec<HighlightRule>,
+ #[network(rename = "highlightNick", network, variant = "i32")]
+ highlight_nick: HighlightNickType,
+ #[network(rename = "nicksCaseSensitive")]
+ nicks_case_sensitive: bool,
+}
+
+#[derive(Debug, Clone, PartialEq, Network)]
+#[network(repr = "maplist")]
+pub struct HighlightRule {
+ id: i32,
+ #[network(variant = "StringList")]
+ name: String,
+ #[network(rename = "isRegEx")]
+ is_regex: bool,
+ #[network(rename = "isCaseSensitive")]
+ is_case_sensitive: bool,
+ #[network(rename = "isEnabled")]
+ is_enabled: bool,
+ #[network(rename = "isInverse")]
+ is_inverse: bool,
+ #[network(variant = "StringList")]
+ sender: String,
+ #[network(variant = "StringList")]
+ channel: String,
+}
+
+#[derive(Debug, Clone, PartialEq, FromPrimitive, ToPrimitive)]
+pub enum HighlightNickType {
+ NoNick = 0x00,
+ CurrentNick = 0x01,
+ AllNicks = 0x02,
+}
+
+impl crate::message::signalproxy::Network for HighlightNickType {
+ type Item = i32;
+
+ fn to_network(&self) -> Self::Item {
+ self.to_i32().unwrap()
+ }
+
+ fn from_network(input: &mut Self::Item) -> Self {
+ Self::from_i32(*input).unwrap()
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::message::signalproxy::translation::Network;
+ use crate::primitive::{Variant, VariantList};
+
+ use pretty_assertions::assert_eq;
+
+ fn get_network() -> VariantList {
+ vec![
+ Variant::ByteArray(s!("highlightRuleList")),
+ Variant::VariantMap(map! {
+ s!("isInverse") => Variant::VariantList(vec![Variant::bool(false)]),
+ s!("isEnabled") => Variant::VariantList(vec![Variant::bool(true)]),
+ s!("channel") => Variant::StringList(vec![s!("#test")]),
+ s!("sender") => Variant::StringList(vec![s!("testuser")]),
+ s!("isCaseSensitive") => Variant::VariantList(vec![Variant::bool(false)]),
+ s!("isRegEx") => Variant::VariantList(vec![Variant::bool(false)]),
+ s!("name") => Variant::StringList(vec![s!("testrule")]),
+ s!("id") => Variant::VariantList(vec![Variant::i32(1)]),
+ }),
+ Variant::ByteArray(s!("highlightNick")),
+ Variant::i32(1),
+ Variant::ByteArray(s!("nicksCaseSensitive")),
+ Variant::bool(false),
+ ]
+ }
+
+ fn get_runtime() -> HighlightRuleManager {
+ HighlightRuleManager {
+ highlight_rule_list: vec![HighlightRule {
+ id: 1,
+ name: s!("testrule"),
+ is_regex: false,
+ is_case_sensitive: false,
+ is_enabled: true,
+ is_inverse: false,
+ sender: s!("testuser"),
+ channel: s!("#test"),
+ }],
+ highlight_nick: HighlightNickType::CurrentNick,
+ nicks_case_sensitive: false,
+ }
+ }
+
+ #[test]
+ fn highlightrulemanager_to_network() {
+ assert_eq!(get_runtime().to_network(), get_network())
+ }
+
+ #[test]
+ fn highlightrulemanager_from_network() {
+ assert_eq!(
+ HighlightRuleManager::from_network(&mut get_network()),
+ get_runtime()
+ )
+ }
+}