use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default)]
pub struct RelayLimitation {
#[serde(skip_serializing_if = "Option::is_none")]
pub max_message_length: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_subscriptions: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_filters: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_subid_length: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_event_tags: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_content_length: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_pow_difficulty: Option<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
pub auth_required: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_required: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub restricted_writes: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at_lower_limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at_upper_limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_limit: Option<u32>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_serializes_to_empty_object() {
let json = serde_json::to_string(&RelayLimitation::default()).unwrap();
assert_eq!(json, "{}");
}
#[test]
fn round_trip_subset() {
let limitation = RelayLimitation {
max_message_length: Some(16_384),
max_subscriptions: Some(20),
min_pow_difficulty: Some(20),
auth_required: Some(true),
..RelayLimitation::default()
};
let json = serde_json::to_string(&limitation).unwrap();
let parsed: RelayLimitation = serde_json::from_str(&json).unwrap();
assert_eq!(parsed, limitation);
}
}