#[cfg(any(feature = "id", feature = "time", feature = "net", feature = "web"))]
mod checked;
mod duration;
mod error;
#[cfg(feature = "id")]
mod id;
#[cfg(feature = "time")]
mod jiff_time;
#[cfg(feature = "net")]
mod net;
mod secret;
mod time;
#[cfg(feature = "web")]
mod web;

pub use error::TypeError;
#[cfg(feature = "id")]
pub use id::{NanoId, NanoIdLength, UuidId, UuidV4, UuidV7};
#[cfg(feature = "time")]
pub use jiff_time::{
    CivilDate, CivilDateTime, CivilTime, SignedDuration, Span, Timestamp, ZonedDateTime,
};
#[cfg(feature = "net")]
pub use net::{Host, IpAddress, Ipv4Address, Ipv6Address, Port, SocketAddress};
pub use secret::{SecretBytes, SecretString};
#[cfg(feature = "web")]
pub use web::{HttpUrl, HttpsUrl, Origin, Url};

#[doc(hidden)]
pub mod reexports {
    pub mod duration {
        pub use crate::duration::{DurationParseError, format_duration, parse_duration};
    }
    pub mod time {
        pub use crate::time::{TimeParseError, format_time, parse_time};
    }
    #[cfg(feature = "time")]
    pub use jiff;
    #[cfg(feature = "wire")]
    pub use rkyv;
    pub use serde;
    #[cfg(feature = "sqlx")]
    pub use sqlx;
    #[cfg(feature = "web")]
    pub use url;
    #[cfg(feature = "id")]
    pub use uuid;
}
