use crate::error::Result;
#[cfg(not(feature = "libc"))]
use crate::error::{Error, ErrorKind};
use super::{Connection, Transport};
enum BusKind {
Session,
System,
}
#[derive(Debug, Clone, Copy)]
pub(crate) enum AuthKind {
None,
Uid,
}
impl AuthKind {
#[cfg(not(feature = "libc"))]
const DEFAULT: Self = Self::None;
#[cfg(feature = "libc")]
const DEFAULT: Self = Self::Uid;
}
pub struct ConnectionBuilder {
bus: BusKind,
auth: AuthKind,
}
impl ConnectionBuilder {
pub fn new() -> Self {
Self {
bus: BusKind::Session,
auth: AuthKind::DEFAULT,
}
}
pub fn no_auth(&mut self) -> &mut Self {
self.auth = AuthKind::None;
self
}
pub fn session_bus(&mut self) -> &mut Self {
self.bus = BusKind::Session;
self
}
pub fn system_bus(&mut self) -> &mut Self {
self.bus = BusKind::System;
self
}
pub fn build(&self) -> Result<Connection> {
let transport = match self.bus {
BusKind::Session => Transport::session_bus()?,
BusKind::System => Transport::system_bus()?,
};
Ok(Connection::new(self.auth, transport)?)
}
}
impl Default for ConnectionBuilder {
#[inline]
fn default() -> Self {
Self::new()
}
}