#![forbid(unsafe_code)]
#![warn(missing_docs)]
#![cfg_attr(docsrs, feature(doc_cfg))]
pub mod core;
pub mod safe_content_type;
pub mod safe_cookie;
pub mod safe_crypto;
pub mod safe_currency;
pub mod safe_datetime;
pub mod safe_email;
pub mod safe_float;
pub mod safe_header;
pub mod safe_hex;
pub mod safe_json;
pub mod safe_math;
pub mod safe_ml;
pub mod safe_network;
pub mod safe_password;
pub mod safe_path;
pub mod safe_phone;
pub mod safe_string;
pub mod safe_tensor;
pub mod safe_url;
pub mod safe_uuid;
pub use crate::core::{Bounded, Error, NonEmpty, Result};
pub use safe_content_type::{ContentType, MediaCategory, SafeContentType};
pub use safe_cookie::{Cookie, CookieAttributes, CookiePrefix, SafeCookie, SameSite};
pub use safe_crypto::SafeCrypto;
pub use safe_currency::{CurrencyCode, Money, SafeCurrency};
pub use safe_datetime::SafeDateTime;
pub use safe_email::SafeEmail;
pub use safe_header::{Header, SafeHeader};
pub use safe_hex::SafeHex;
pub use safe_json::SafeJson;
pub use safe_math::SafeMath;
pub use safe_network::SafeNetwork;
pub use safe_password::SafePassword;
pub use safe_path::SafePath;
pub use safe_phone::{PhoneNumber, SafePhone};
pub use safe_string::SafeString;
pub use safe_url::SafeUrl;
pub use safe_uuid::{SafeUuid, Uuid};
pub use safe_float::SafeFloat;
pub use safe_ml::SafeML;
pub use safe_tensor::SafeTensor;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_safe_add_overflow() {
let result = SafeMath::add(i64::MAX, 1);
assert!(result.is_err());
}
#[test]
fn test_safe_add_normal() {
let result = SafeMath::add(1, 2);
assert_eq!(result.unwrap(), 3);
}
#[test]
fn test_safe_div_by_zero() {
let result = SafeMath::div(10, 0);
assert!(result.is_err());
}
#[test]
fn test_html_escape() {
let escaped = SafeString::escape_html("<script>");
assert_eq!(escaped, "<script>");
}
#[test]
fn test_sql_escape() {
let escaped = SafeString::escape_sql("O'Brien");
assert_eq!(escaped, "O''Brien");
}
}