
/// An APIs and common interfaces.
pub mod syslog_trait;

//-- SYNC --

/// A syslog instance which is shared between threads.
pub mod syslog_sync_shared;

pub use syslog_sync_shared::DefaultLocalSyslogDestination;

//-- SYNC QUEUE --

/// A syslog intance which uses an MPSC channels.
#[cfg(feature = "build_with_queue")]
pub mod syslog_sync_queue;

/// A queue adapter based on the `crossbeam` MPSC.
#[cfg(all(feature = "build_with_queue", not(feature = "async_embedded")))]
pub(crate) mod crossbeam_queue_adapter;

/// A streamer for the syslog.
pub mod syslog_stream;

/// Internal logic of the syslog client. (UNIX)
//#[cfg(target_family = "unix")]
pub mod syslog_sync_internal;

//#[cfg(target_family = "windows")]
//pub mod syslog_sync_internal_windows;

/// A single threaded or thread_local syslog.
#[cfg(feature = "build_with_thread_local")]
pub mod syslog_threadlocal;

//pub mod syslog;

//-- SYNC SOCKET --

/// A sockets (communication).
pub(crate) mod socket;


#[cfg(all(feature = "build_with_queue", not(feature = "async_embedded")))]
pub(crate) use crossbeam_queue_adapter as q_adapter;

#[cfg(all(feature = "async_embedded", feature = "build_with_queue"))]
pub(crate) use crate::a_sync::async_queue_adapter::q_adapter as q_adapter;

#[cfg(all(feature = "build_with_queue"))]
pub use q_adapter::DefaultQueueAdapter;

/// Exposing API for streaming to syslog.
pub use syslog_stream::{SyStream, SyStreamApi};

//#[cfg(target_family = "unix")]
pub(crate) use syslog_sync_internal::LogItems;

//#[cfg(target_family = "windows")]
//pub(crate) use syslog_sync_internal_windows::LogItems;
