mod master;
mod outstation;
pub use master::*;
pub use outstation::*;
use tokio_rustls::rustls::pki_types;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
pub enum CertificateMode {
AuthorityBased,
SelfSigned,
}
#[derive(Debug)]
pub enum TlsError {
InvalidPeerCertificate(std::io::Error),
InvalidLocalCertificate(std::io::Error),
InvalidPrivateKey(std::io::Error),
InvalidDnsName,
Other(std::io::Error),
}
impl From<sfio_rustls_config::Error> for TlsError {
fn from(err: sfio_rustls_config::Error) -> Self {
Self::Other(std::io::Error::new(
std::io::ErrorKind::InvalidData,
err.to_string(),
))
}
}
impl From<pki_types::InvalidDnsNameError> for TlsError {
fn from(_: pki_types::InvalidDnsNameError) -> Self {
Self::InvalidDnsName
}
}
impl std::fmt::Display for TlsError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
Self::InvalidPeerCertificate(err) => {
write!(f, "invalid peer certificate file: {err}")
}
Self::InvalidLocalCertificate(err) => {
write!(f, "invalid local certificate file: {err}")
}
Self::InvalidPrivateKey(err) => write!(f, "invalid private key file: {err}"),
Self::InvalidDnsName => write!(f, "invalid DNS name"),
Self::Other(err) => write!(f, "miscellaneous TLS error: {err}"),
}
}
}
impl std::error::Error for TlsError {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(
feature = "serialization",
derive(serde::Serialize, serde::Deserialize)
)]
pub enum MinTlsVersion {
V12,
V13,
}
impl From<MinTlsVersion> for sfio_rustls_config::ProtocolVersions {
fn from(value: MinTlsVersion) -> Self {
match value {
MinTlsVersion::V12 => sfio_rustls_config::ProtocolVersions::v12_only(),
MinTlsVersion::V13 => sfio_rustls_config::ProtocolVersions::new()
.enable_v12()
.enable_v13(),
}
}
}