use serde::{Deserialize, Serialize};
use crate::identifier::Identifier;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Subscription {
pub name: Identifier,
pub connection: String,
pub publications: Vec<Identifier>,
pub options: SubscriptionOptions,
pub owner: Option<Identifier>,
pub comment: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct SubscriptionOptions {
pub enabled: Option<bool>,
pub slot_name: Option<Identifier>,
pub create_slot: Option<bool>,
pub copy_data: Option<bool>,
pub synchronous_commit: Option<String>,
pub binary: Option<bool>,
pub streaming: Option<StreamingMode>,
pub two_phase: Option<bool>,
pub disable_on_error: Option<bool>,
pub password_required: Option<bool>,
pub run_as_owner: Option<bool>,
pub origin: Option<OriginMode>,
pub failover: Option<bool>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum StreamingMode {
Off,
On,
Parallel,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum OriginMode {
Any,
None,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn options_default_all_none() {
let o = SubscriptionOptions::default();
assert!(o.enabled.is_none());
assert!(o.slot_name.is_none());
assert!(o.create_slot.is_none());
assert!(o.copy_data.is_none());
assert!(o.synchronous_commit.is_none());
assert!(o.binary.is_none());
assert!(o.streaming.is_none());
assert!(o.two_phase.is_none());
assert!(o.disable_on_error.is_none());
assert!(o.password_required.is_none());
assert!(o.run_as_owner.is_none());
assert!(o.origin.is_none());
assert!(o.failover.is_none());
}
#[test]
fn streaming_off_does_not_equal_on() {
assert_ne!(StreamingMode::Off, StreamingMode::On);
assert_ne!(StreamingMode::On, StreamingMode::Parallel);
}
#[test]
fn origin_any_does_not_equal_none() {
assert_ne!(OriginMode::Any, OriginMode::None);
}
}