#![deny(unused_must_use, unsafe_op_in_unsafe_fn)]
#![cfg_attr(not(test), warn(clippy::print_stdout, clippy::dbg_macro))]
use tokio::io::{AsyncRead, AsyncWrite};
pub trait EtherNetIpStream: AsyncRead + AsyncWrite + Unpin + Send {}
impl<S> EtherNetIpStream for S where S: AsyncRead + AsyncWrite + Unpin + Send {}
pub mod batch;
pub mod client;
pub mod config; pub mod error;
#[cfg(feature = "ffi")]
pub mod ffi;
pub mod fleet;
pub mod monitoring; pub mod plc_manager;
pub(crate) mod protocol;
pub mod route;
pub mod schema;
pub mod subscription;
pub mod tag_group;
pub mod tag_manager;
pub mod tag_path;
pub mod types;
pub mod udt;
pub mod version;
pub use batch::{BatchConfig, BatchError, BatchOperation, BatchResult};
pub use client::{Backoff, Client, ConnectionEvent, EipClient, RetryClient, RetryPolicy};
pub use config::{
ConnectionConfig, LogFormat, LogLevel, LogRotationSchedule, LoggingConfig, MonitoringConfig,
PerformanceConfig, PlcSpecificConfig, ProductionConfig, SecurityConfig,
};
pub use error::{EtherNetIpError, Result};
pub use fleet::{Fleet, FleetEvent};
pub use monitoring::{
ConnectionMetrics, DiagnosticsSnapshot, ErrorCategory, ErrorMetrics, HealthCheckMode,
HealthMetrics, HealthStatus, MonitoringMetrics, OperationMetrics, PerformanceMetrics,
ProductionMonitor,
};
pub use plc_manager::{PlcConfig, PlcConnection, PlcManager};
pub use route::{RouteHop, RoutePath};
pub use schema::{
SchemaCapabilities, SchemaDataType, SchemaExport, SchemaLibraryInfo, SchemaRoutePath,
SchemaScope, SchemaTag, SchemaTargetInfo, SchemaUdt, SchemaUdtMember,
};
pub use subscription::{
SubscriptionManager, SubscriptionManager as RealTimeSubscriptionManager, SubscriptionOptions,
SubscriptionOptions as RealTimeSubscriptionOptions, TagSubscription,
TagSubscription as RealTimeSubscription,
};
pub use tag_group::{
TagGroupConfig, TagGroupEvent, TagGroupEventKind, TagGroupFailureCategory,
TagGroupFailureDiagnostic, TagGroupSnapshot, TagGroupSubscription, TagGroupValueResult,
};
pub use tag_manager::{TagCache, TagManager, TagMetadata, TagPermissions, TagScope};
pub use tag_path::TagPath;
pub use types::{PlcValue, UdtData};
pub use udt::{TagAttributes, UdtDefinition, UdtMember, UdtTemplate};
#[cfg(feature = "ffi")]
pub(crate) use client::RUNTIME;
pub fn init_tracing() {
use tracing_subscriber::EnvFilter;
use tracing_subscriber::fmt;
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
let subscriber = fmt::Subscriber::builder()
.with_env_filter(filter)
.with_target(false) .finish();
tracing::subscriber::set_global_default(subscriber).expect("Failed to set tracing subscriber");
}
pub fn try_init_tracing() -> crate::error::Result<()> {
use tracing_subscriber::EnvFilter;
use tracing_subscriber::fmt;
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
let subscriber = fmt::Subscriber::builder()
.with_env_filter(filter)
.with_target(false)
.finish();
tracing::subscriber::set_global_default(subscriber)
.map_err(|e| crate::error::EtherNetIpError::Other(e.to_string()))?;
Ok(())
}