chie_shared/
utils.rs

1//! Utility functions for CHIE Protocol.
2
3// Module declarations
4mod calculations;
5mod circuit_breaker;
6mod collections;
7mod content;
8mod formatting;
9mod network;
10mod security;
11mod statistics;
12mod time;
13mod time_window;
14mod validation;
15
16// Re-export statistics types
17pub use statistics::{ExponentialBackoff, Histogram, SlidingWindow, StreamingStats};
18
19// Re-export circuit breaker types
20pub use circuit_breaker::{CircuitBreaker, CircuitState};
21
22// Re-export time window types
23pub use time_window::{BucketedTimeSeries, SlidingWindowRateLimiter, TimeBucket, TimeWindow};
24
25// Re-export time functions
26pub use time::{
27    format_timestamp, is_timestamp_valid, ms_to_secs, now_ms, now_secs, parse_duration_str,
28    secs_to_ms,
29};
30
31// Re-export formatting functions
32pub use formatting::{
33    cid_to_short_id, format_bandwidth, format_bytes, format_duration_ms, format_points,
34    format_ratio_as_percentage, generate_slug, normalize_tag, sanitize_string, sanitize_tag,
35    sanitize_tags, truncate_string,
36};
37
38// Re-export validation functions
39pub use validation::{
40    is_private_ipv4, is_safe_string, is_valid_cid, is_valid_email, is_valid_hex, is_valid_ipv4,
41    is_valid_ipv6, is_valid_multiaddr, is_valid_peer_id, is_valid_port, is_valid_url,
42    is_valid_username, validate_and_sanitize_tag, validate_bandwidth_reasonable,
43    validate_blake3_hash, validate_challenge_nonce, validate_chunk_indices_batch,
44    validate_chunk_size, validate_cids_batch, validate_content_size_in_range,
45    validate_ed25519_public_key, validate_ed25519_signature, validate_emails_batch,
46    validate_hash_length, validate_latency, validate_nonce_length, validate_price_range,
47    validate_proof_freshness, validate_public_key_length, validate_signature_length,
48    validate_tags_list, validate_usernames_batch,
49};
50
51// Re-export calculation functions
52pub use calculations::{
53    actual_chunk_size, average, bps_to_mbps, byte_to_chunk_index, bytes_to_gb_f64,
54    calculate_bandwidth_mbps, calculate_content_price, calculate_creator_share,
55    calculate_demand_multiplier, calculate_ema, calculate_growth_rate, calculate_latency_ms,
56    calculate_mean, calculate_median, calculate_moving_average, calculate_percentage,
57    calculate_percentage_change, calculate_percentile, calculate_platform_fee,
58    calculate_provider_earnings, calculate_rate, calculate_reputation_bonus,
59    calculate_reputation_decay, calculate_reward_with_penalty, calculate_sliding_window_count,
60    calculate_stats, calculate_std_dev, calculate_storage_cost, calculate_token_bucket,
61    calculate_uptime_percentage, calculate_z_score, chunk_byte_range, chunk_offset, clamp,
62    estimate_transfer_time, gb_to_bytes_f64, is_outlier_iqr, is_rate_limit_allowed,
63    is_valid_chunk_index, is_within_tolerance, lerp, mbps_to_bps, normalize,
64    round_down_to_multiple, round_up_to_multiple, update_reputation,
65};
66
67// Re-export security functions
68pub use security::{
69    constant_time_eq, constant_time_eq_32, count_set_bits, decode_hex, encode_hex, generate_nonce,
70    is_all_zeros, random_jitter, rotate_bytes_left, rotate_bytes_right, xor_bytes,
71};
72
73// Re-export network functions
74pub use network::{
75    chunk_vec, extract_peer_id_from_multiaddr, generate_session_id, is_valid_peer_id_format,
76    parse_bandwidth_str,
77};
78
79// Re-export content functions
80pub use content::{get_file_extension, has_valid_extension, mime_to_category_hint};
81
82// Re-export collection functions
83pub use collections::{
84    batch_by_size, deduplicate_preserve_order, find_duplicates, flatten, group_by, merge_sorted,
85    partition, skip, take, zip_with,
86};