avila_molecule/
lib.rs

1//! # avila-molecule
2//!
3//! **Moléculas de Software - Protocolos de Rede**
4//!
5//! Assim como átomos se combinam em moléculas, as estruturas de dados
6//! básicas se combinam em protocolos de comunicação. Esta biblioteca
7//! fornece os building blocks fundamentais de rede:
8//!
9//! - TCP (Transmission Control Protocol)
10//! - UDP (User Datagram Protocol)
11//! - TLS (Transport Layer Security)
12//!
13//! ## Filosofia
14//!
15//! Moléculas são combinações estáveis de átomos que têm propriedades
16//! emergentes. TCP/UDP/TLS são "moléculas" de software - combinações
17//! de bits e bytes que criam protocolos de comunicação confiáveis.
18
19#![warn(missing_docs)]
20
21use avila_error::{Error, ErrorKind, Result};
22use tokio::net::{TcpListener, TcpStream, UdpSocket};
23use tokio::io::{AsyncReadExt, AsyncWriteExt};
24
25pub mod tcp;
26pub mod udp;
27pub mod tls;
28
29/// Versão da biblioteca
30pub const VERSION: &str = env!("CARGO_PKG_VERSION");
31
32/// Endereço de rede (host:porta)
33#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct NetworkAddress {
35    /// Host (IP ou domínio)
36    pub host: String,
37    /// Porta
38    pub port: u16,
39}
40
41impl NetworkAddress {
42    /// Cria novo endereço de rede
43    pub fn new(host: impl Into<String>, port: u16) -> Self {
44        Self {
45            host: host.into(),
46            port,
47        }
48    }
49
50    /// Converte para string "host:port"
51    pub fn to_string(&self) -> String {
52        format!("{}:{}", self.host, self.port)
53    }
54}
55
56impl std::fmt::Display for NetworkAddress {
57    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
58        write!(f, "{}:{}", self.host, self.port)
59    }
60}
61
62#[cfg(test)]
63mod tests {
64    use super::*;
65
66    #[test]
67    fn test_network_address() {
68        let addr = NetworkAddress::new("localhost", 8080);
69        assert_eq!(addr.to_string(), "localhost:8080");
70    }
71}