aboutsummaryrefslogtreecommitdiff
path: root/src/subscription.rs
diff options
context:
space:
mode:
authorLibravatar Daniel López Azaña <daniloaz@gmail.com>2024-04-04 13:26:50 +0200
committerLibravatar Daniel López Azaña <daniloaz@gmail.com>2024-04-04 13:26:50 +0200
commit2565f3be410c71c35e0d70bbea1c7be627f4ecd2 (patch)
treeda8960baf0ffb86f0c1aebdfddb9ef419b391cb4 /src/subscription.rs
parentc094bf9c8bad3db0d6ae9b53f9087e081a3ba63b (diff)
♻️ (ls_client.rs): refactor subscription logic for clarity and maintainability
♻️ (ls_client.rs): remove hardcoded base_params and use dynamic params for session creation ♻️ (ls_client.rs): remove commented-out subscription code for cleanup ✨ (ls_client.rs): handle new server messages for connection errors and subscription confirmations 🚚 (ls_client.rs): remove unnecessary println at the end of connect function ✨ (main.rs): change adapter set from "QUOTE_ADAPTER" to "DEMO" for client initialization ✨ (subscription.rs): add Default trait implementation for Snapshot enum ✨ (subscription.rs): implement ToString trait for Snapshot and SubscriptionMode enums 🐛 (subscription.rs): fix error message in set_item_group method to be more descriptive
Diffstat (limited to 'src/subscription.rs')
-rw-r--r--src/subscription.rs33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/subscription.rs b/src/subscription.rs
index be10380..e008804 100644
--- a/src/subscription.rs
+++ b/src/subscription.rs
@@ -3,14 +3,32 @@ use std::collections::HashMap;
use std::fmt::{self, Debug, Formatter};
/// Enum representing the snapshot delivery preferences to be requested to Lightstreamer Server for the items in the Subscription.
-#[derive(Debug)]
+#[derive(Debug, Default)]
pub enum Snapshot {
Yes,
No,
Number(usize),
+ #[default]
None,
}
+impl Default for &Snapshot {
+ fn default() -> Self {
+ &Snapshot::None
+ }
+}
+
+impl ToString for Snapshot {
+ fn to_string(&self) -> String {
+ match self {
+ Snapshot::Yes => "true".to_string(),
+ Snapshot::No => "false".to_string(),
+ Snapshot::Number(n) => n.to_string(),
+ Snapshot::None => "none".to_string(),
+ }
+ }
+}
+
/// Enum representing the subscription mode.
#[derive(Debug, PartialEq, Eq)]
pub enum SubscriptionMode {
@@ -32,6 +50,17 @@ impl SubscriptionMode {
}
}
+impl ToString for SubscriptionMode {
+ fn to_string(&self) -> String {
+ match self {
+ SubscriptionMode::Merge => "MERGE".to_string(),
+ SubscriptionMode::Distinct => "DISTINCT".to_string(),
+ SubscriptionMode::Raw => "RAW".to_string(),
+ SubscriptionMode::Command => "COMMAND".to_string(),
+ }
+ }
+}
+
/// Struct representing a Subscription to be submitted to a Lightstreamer Server.
/// It contains subscription details and the listeners needed to process the real-time data.
pub struct Subscription {
@@ -187,7 +216,7 @@ impl Subscription {
/// - `group`: A String to be expanded into an item list by the Metadata Adapter.
pub fn set_item_group(&mut self, group: String) -> Result<(), String> {
if self.is_active {
- return Err("Subscription is active".to_string());
+ return Err("Subscription is active. This method can only be called while the Subscription instance is in its 'inactive' state.".to_string());
}
self.item_group = Some(group);
Ok(())