Skip to main content

domain_check_lib/
lib.rs

1//! # Domain Check Library
2//!
3//! A fast, robust library for checking domain availability using RDAP and WHOIS protocols.
4//!
5//! This library provides both high-level and low-level APIs for domain availability checking,
6//! with support for concurrent processing, multiple protocols, and comprehensive error handling.
7//!
8//! ## Quick Start
9//!
10//! ```rust,no_run
11//! use domain_check_lib::{DomainChecker, CheckConfig};
12//!
13//! #[tokio::main]
14//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
15//!     let checker = DomainChecker::new();
16//!     let result = checker.check_domain("example.com").await?;
17//!     
18//!     println!("Domain: {} - Available: {:?}", result.domain, result.available);
19//!     Ok(())
20//! }
21//! ```
22//!
23//! ## Features
24//!
25//! - **RDAP Protocol**: Modern registration data access protocol
26//! - **WHOIS Fallback**: Automatic fallback when RDAP is unavailable
27//! - **Concurrent Processing**: Efficient parallel domain checking
28//! - **Bootstrap Registry**: Dynamic RDAP endpoint discovery
29//! - **Configurable**: Extensive configuration options
30
31// Re-export main public API types and functions
32// This makes them available as domain_check_lib::TypeName
33pub use checker::DomainChecker;
34pub use config::{load_env_config, ConfigManager, FileConfig, GenerationConfig};
35pub use error::DomainCheckError;
36pub use protocols::registry::{
37    get_all_known_tlds, get_available_presets, get_preset_tlds, get_preset_tlds_with_custom,
38};
39pub use types::{CheckConfig, CheckMethod, DomainInfo, DomainResult, OutputMode};
40pub use utils::expand_domain_inputs;
41
42// Public modules
43pub mod generate;
44
45// Re-export generation types for convenience
46pub use generate::{apply_affixes, estimate_pattern_count, expand_pattern, generate_names};
47pub use types::{GenerateConfig, GenerationResult};
48
49// Internal modules - these are not part of the public API
50mod checker;
51mod concurrent;
52mod config;
53mod error;
54mod protocols;
55mod types;
56mod utils;
57
58// Type alias for convenience
59pub type Result<T> = std::result::Result<T, DomainCheckError>;
60
61// Library version and metadata
62pub const VERSION: &str = env!("CARGO_PKG_VERSION");
63pub const AUTHOR: &str = env!("CARGO_PKG_AUTHORS");
64
65/// Initialize the library with default settings.
66///
67/// This function can be called to set up global state like logging,
68/// registry caches, etc. It's optional - the library will work without it.
69pub fn init() {
70    // Future: Initialize global caches, logging, etc.
71    // For now, this is a no-op but provides future extensibility
72}
73
74/// Get library information for debugging or display purposes.
75pub fn info() -> LibraryInfo {
76    LibraryInfo {
77        version: VERSION,
78        author: AUTHOR,
79        features: get_enabled_features(),
80    }
81}
82
83/// Information about the library build and features
84#[derive(Debug, Clone)]
85pub struct LibraryInfo {
86    pub version: &'static str,
87    pub author: &'static str,
88    pub features: Vec<&'static str>,
89}
90
91/// Get list of enabled features at compile time
92#[allow(clippy::vec_init_then_push)] // ← Add this line
93fn get_enabled_features() -> Vec<&'static str> {
94    let mut features = Vec::new();
95
96    #[cfg(feature = "rdap")]
97    features.push("rdap");
98
99    #[cfg(feature = "whois")]
100    features.push("whois");
101
102    #[cfg(feature = "bootstrap")]
103    features.push("bootstrap");
104
105    #[cfg(feature = "debug")]
106    features.push("debug");
107
108    features
109}