pub mod builder;
pub mod config;
pub mod hooks;
pub mod http;
pub use builder::ClientBuilder;
pub use config::{Network, api_path, endpoints};
pub use hooks::{ConsoleLogger, Hook, LogLevel, Logger, LoggingHook};
pub use http::Client;
#[cfg(test)]
mod tests {
use std::time::Duration;
use super::*;
#[test]
fn test_client_module_exports() {
let builder = ClientBuilder::new().network(Network::Mainnet);
assert!(builder.build().is_ok(), "ClientBuilder should be accessible");
let networks = [Network::Mainnet, Network::Testnet, Network::Local];
for network in networks {
assert!(!network.url().is_empty(), "Network URLs should not be empty");
}
let path = api_path("/test");
assert!(path.starts_with("/v1"), "API path should have version prefix");
let logger = ConsoleLogger;
let _hook = LoggingHook::new(Box::new(logger));
}
#[test]
fn test_client_creation_workflow() {
let client = ClientBuilder::new()
.network(Network::Local)
.timeout(Duration::from_secs(30))
.build()
.expect("Client creation should work with re-exported interfaces");
let debug_str = format!("{:?}", client);
assert!(debug_str.contains("Client"), "Client should be properly created");
}
#[test]
fn test_endpoints_accessibility() {
use endpoints::*;
assert_eq!(chains::CHAIN_ID, "/chains/chain_id");
assert_eq!(tokens::MINT, "/tokens/mint");
assert_eq!(transactions::PAYMENT, "/transactions/payment");
assert_eq!(accounts::NONCE, "/accounts/nonce");
}
#[test]
fn test_logging_functionality() {
let logger = ConsoleLogger;
let _hook = LoggingHook::new(Box::new(logger));
let levels = [LogLevel::Error, LogLevel::Warn, LogLevel::Info, LogLevel::Debug];
for _level in levels {
let _logger = ConsoleLogger;
}
}
#[test]
fn test_network_configuration() {
for network in [Network::Mainnet, Network::Testnet, Network::Local] {
let client = ClientBuilder::new()
.network(network.clone())
.build()
.expect("Network configuration should work");
let debug_str = format!("{:?}", client);
assert!(debug_str.contains("Client"));
let url = network.url();
assert!(!url.is_empty(), "Network URL should not be empty");
assert!(url.starts_with("http"), "Network URL should be valid HTTP(S) URL");
}
}
#[test]
fn test_module_organization() {
let _builder = ClientBuilder::new();
let _network = Network::default();
let _logger = ConsoleLogger;
let path = api_path("/test/endpoint");
assert_eq!(path, "/v1/test/endpoint");
assert!(endpoints::tokens::MINT.contains("tokens"));
assert!(endpoints::chains::CHAIN_ID.contains("chains"));
}
}