use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use zbus_names::{BusName, OwnedUniqueName};
use zvariant::{as_value::optional, OwnedValue, Type};
use super::Result;
use crate::proxy;
#[proxy(
interface = "org.freedesktop.DBus.Debug.Stats",
default_service = "org.freedesktop.DBus",
default_path = "/org/freedesktop/DBus"
)]
pub trait Stats {
fn get_stats(&self) -> Result<Stats>;
fn get_connection_stats(&self, name: BusName<'_>) -> Result<ConnectionStats>;
fn get_all_match_rules(&self) -> Result<HashMap<OwnedUniqueName, Vec<crate::OwnedMatchRule>>>;
}
#[derive(Debug, Default, Deserialize, PartialEq, Serialize, Type)]
#[zvariant(signature = "a{sv}", rename_all = "PascalCase")]
#[serde(default, rename_all = "PascalCase")]
pub struct Stats {
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) serial: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) active_connections: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) incomplete_connections: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) match_rules: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_match_rules: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_match_rules_per_connection: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) bus_names: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_bus_names: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_bus_names_per_connection: Option<u32>,
#[serde(flatten)]
pub(crate) rest: HashMap<String, OwnedValue>,
}
impl Stats {
pub fn serial(&self) -> Option<u32> {
self.serial
}
pub fn active_connections(&self) -> Option<u32> {
self.active_connections
}
pub fn incomplete_connections(&self) -> Option<u32> {
self.incomplete_connections
}
pub fn match_rules(&self) -> Option<u32> {
self.match_rules
}
pub fn peak_match_rules(&self) -> Option<u32> {
self.peak_match_rules
}
pub fn peak_match_rules_per_connection(&self) -> Option<u32> {
self.peak_match_rules_per_connection
}
pub fn bus_names(&self) -> Option<u32> {
self.bus_names
}
pub fn peak_bus_names(&self) -> Option<u32> {
self.peak_bus_names
}
pub fn peak_bus_names_per_connection(&self) -> Option<u32> {
self.peak_bus_names_per_connection
}
pub fn rest(&self) -> &HashMap<String, OwnedValue> {
&self.rest
}
}
#[derive(Debug, Default, Deserialize, PartialEq, Serialize, Type)]
#[zvariant(signature = "a{sv}")]
#[serde(default, rename_all = "PascalCase")]
pub struct ConnectionStats {
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) serial: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) unique_name: Option<OwnedUniqueName>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) match_rules: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_match_rules: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) bus_names: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_bus_names: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) incoming_messages: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) outgoing_messages: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) incoming_bytes: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) outgoing_bytes: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) incoming_fds: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) outgoing_fds: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_incoming_messages: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_outgoing_messages: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_incoming_bytes: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_outgoing_bytes: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_incoming_fds: Option<u32>,
#[serde(with = "optional", skip_serializing_if = "Option::is_none")]
pub(crate) peak_outgoing_fds: Option<u32>,
#[serde(flatten)]
pub(crate) rest: HashMap<String, OwnedValue>,
}
impl ConnectionStats {
pub fn serial(&self) -> Option<u32> {
self.serial
}
pub fn unique_name(&self) -> Option<&OwnedUniqueName> {
self.unique_name.as_ref()
}
pub fn match_rules(&self) -> Option<u32> {
self.match_rules
}
pub fn peak_match_rules(&self) -> Option<u32> {
self.peak_match_rules
}
pub fn bus_names(&self) -> Option<u32> {
self.bus_names
}
pub fn peak_bus_names(&self) -> Option<u32> {
self.peak_bus_names
}
pub fn incoming_messages(&self) -> Option<u32> {
self.incoming_messages
}
pub fn outgoing_messages(&self) -> Option<u32> {
self.outgoing_messages
}
pub fn incoming_bytes(&self) -> Option<u32> {
self.incoming_bytes
}
pub fn outgoing_bytes(&self) -> Option<u32> {
self.outgoing_bytes
}
pub fn incoming_fds(&self) -> Option<u32> {
self.incoming_fds
}
pub fn outgoing_fds(&self) -> Option<u32> {
self.outgoing_fds
}
pub fn peak_incoming_messages(&self) -> Option<u32> {
self.peak_incoming_messages
}
pub fn peak_outgoing_messages(&self) -> Option<u32> {
self.peak_outgoing_messages
}
pub fn peak_incoming_bytes(&self) -> Option<u32> {
self.peak_incoming_bytes
}
pub fn peak_outgoing_bytes(&self) -> Option<u32> {
self.peak_outgoing_bytes
}
pub fn peak_incoming_fds(&self) -> Option<u32> {
self.peak_incoming_fds
}
pub fn peak_outgoing_fds(&self) -> Option<u32> {
self.peak_outgoing_fds
}
pub fn rest(&self) -> &HashMap<String, OwnedValue> {
&self.rest
}
}