1#![doc = include_str!("../doc-src/root-docs.md")]
2#![allow(clippy::needless_doctest_main)]
3#![no_std]
5
6pub mod prelude {
9 #[cfg(all(feature = "rmx-rustlib-core", not(feature = "rmx-rustlib-std")))]
14 pub use ::core::prelude::rust_2021::*;
15
16 #[cfg(feature = "rmx-rustlib-std")]
17 pub use ::std::prelude::rust_2021::*;
18
19 #[cfg(feature = "rmx-rustlib-alloc")]
22 pub use ::alloc::{format, vec};
23
24 #[cfg(feature = "rmx-rustlib-alloc")]
25 pub use crate::extras::fmt;
26
27 #[cfg(feature = "rmx-rustlib-core")]
35 pub use ::core::cmp::Ordering;
36
37 #[cfg(feature = "futures")]
40 pub use ::futures::prelude::*;
41
42 #[cfg(feature = "anyhow")]
45 pub use ::anyhow::{Context as _, anyhow, bail};
46
47 #[cfg(feature = "anyhow")]
48 pub use crate::extras::{A, AnyError, AnyResult};
49
50 #[cfg(feature = "cfg-if")]
51 pub use ::cfg_if::cfg_if;
52
53 #[cfg(feature = "extension-trait")]
54 pub use ::extension_trait::extension_trait;
55
56 #[cfg(feature = "log")]
57 pub use ::log::{debug, error, info, trace, warn};
58
59 #[cfg(all(feature = "futures", feature = "rmx-feature-default"))]
60 pub use ::futures::{executor::block_on, future::Either};
61
62 #[cfg(feature = "itertools")]
63 pub use ::itertools::Itertools as _;
64
65 #[cfg(feature = "rand")]
66 pub use ::rand::RngCore as _;
67 #[cfg(feature = "rand")]
68 pub use ::rand::Rng as _;
69 #[cfg(feature = "rand")]
70 pub use ::rand::SeedableRng as _;
71 #[cfg(feature = "rand")]
72 pub use ::rand::Fill as _;
73
74 pub use crate::extras::default;
77
78 #[cfg(feature = "rmx-rustlib-core")]
79 pub use crate::bug;
80
81 #[cfg(feature = "extension-trait")]
82 pub use crate::extras::RangeExt as _;
83
84 #[cfg(feature = "powerletters")]
87 pub use ::powerletters::*;
88}
89
90pub mod extras {
91 #[cfg(feature = "rmx-rustlib-core")]
95 #[macro_export]
96 macro_rules! bug {
97 () => {
98 core::panic!("unexpected case (bug!)")
99 };
100 ($($arg:tt)+) => {
101 core::panic!("unexpected case (bug!): {}", $crate::format_args!($($arg)+))
102 };
103 }
104
105 #[cfg(feature = "anyhow")]
106 pub use ::anyhow::{Error as AnyError, Result as AnyResult, anyhow as A};
107
108 #[cfg(feature = "rmx-rustlib-alloc")]
109 pub use ::alloc::format as fmt;
110
111 pub fn default<T: Default>() -> T {
112 Default::default()
113 }
114
115 pub fn init() {
116 #[cfg(feature = "env_logger")]
117 fn maybe_init_env_logger() {
118 crate::env_logger::Builder::new()
119 .filter_level(log::LevelFilter::Info)
120 .format_timestamp(None)
121 .parse_default_env()
122 .init();
123 }
124 #[cfg(not(feature = "env_logger"))]
125 fn maybe_init_env_logger() {}
126
127 maybe_init_env_logger();
128 }
129
130 pub fn init_crate_name(crate_name: &str) {
131 #[cfg(feature = "env_logger")]
132 fn maybe_init_env_logger(crate_name: &str) {
133 crate::env_logger::Builder::new()
134 .filter_module(crate_name, log::LevelFilter::Info)
135 .format_timestamp(None)
136 .parse_default_env()
137 .init();
138 }
139 #[cfg(not(feature = "env_logger"))]
140 fn maybe_init_env_logger(_crate_name: &str) {}
141
142 maybe_init_env_logger(crate_name);
143 }
144
145 pub fn recurse<F, R>(f: F) -> R
146 where
147 F: FnOnce() -> R,
148 {
149 f()
151 }
152
153 #[cfg(feature = "extension-trait")]
156 #[extension_trait::extension_trait]
157 pub impl RangeExt for core::ops::Range<usize> {
158 fn from_start_len(start: usize, len: usize) -> Option<core::ops::Range<usize>> {
159 Some(start..start.checked_add(len)?)
160 }
161
162 fn subrange(&self, sub: core::ops::Range<usize>) -> Option<core::ops::Range<usize>> {
163 if sub.start >= self.len() || sub.end > self.len() {
164 return None;
165 }
166 let new_start = self.start.checked_add(sub.start);
167 let new_end = self.start.checked_add(sub.end);
168 match (new_start, new_end) {
169 (Some(new_start), Some(new_end)) => Some(new_start..new_end),
170 _ => None,
171 }
172 }
173
174 fn checked_sub(&self, other: usize) -> Option<core::ops::Range<usize>> {
175 let new_start = self.start.checked_sub(other);
176 let new_end = self.end.checked_sub(other);
177 match (new_start, new_end) {
178 (Some(new_start), Some(new_end)) => Some(new_start..new_end),
179 _ => None,
180 }
181 }
182 }
183
184 #[cfg(feature = "rmx-rustlib-std")]
185 pub fn copy_dir_recursive(
186 src: &crate::std::path::Path,
187 dst: &crate::std::path::Path,
188 ) -> crate::std::io::Result<()> {
189 crate::std::fs::create_dir_all(dst)?;
190
191 for entry in crate::std::fs::read_dir(src)? {
192 let entry = entry?;
193 let file_type = entry.file_type()?;
194 let src_path = entry.path();
195 let dst_path = dst.join(entry.file_name());
196
197 if file_type.is_dir() {
198 copy_dir_recursive(&src_path, &dst_path)?;
199 } else {
200 crate::std::fs::copy(&src_path, &dst_path)?;
201 }
202 }
203
204 Ok(())
205 }
206
207 pub const fn assert_send_sync<T: Send + Sync>() { }
218}
219
220#[cfg(feature = "rmx-rustlib-core")]
223#[doc(inline)]
224pub extern crate core;
225
226#[cfg(feature = "rmx-rustlib-alloc")]
227#[doc(inline)]
228pub extern crate alloc;
229
230#[cfg(feature = "rmx-rustlib-std")]
231#[doc(inline)]
232pub extern crate std;
233
234#[cfg(feature = "rmx-rustlib-proc_macro")]
235#[doc(inline)]
236pub extern crate proc_macro;
237
238#[cfg(feature = "ahash")]
241pub mod ahash {
242 #![doc = include_str!("../doc-src/crate-ahash.md")]
243
244 pub use ::ahash::*;
245}
246
247#[cfg(feature = "anyhow")]
248pub mod anyhow {
249 #![doc = include_str!("../doc-src/crate-anyhow.md")]
250
251 pub use ::anyhow::*;
252}
253
254#[cfg(feature = "axum")]
255pub mod axum {
256 pub use ::axum::*;
261}
262
263#[cfg(feature = "backtrace")]
264pub mod backtrace {
265 pub use ::backtrace::*;
270}
271
272#[cfg(feature = "base64")]
273pub mod base64 {
274 #![doc = include_str!("../doc-src/crate-base64.md")]
275
276 pub use ::base64::*;
277}
278
279#[cfg(feature = "bindgen")]
280pub mod bindgen {
281 pub use ::bindgen::*;
286}
287
288#[cfg(feature = "bitflags")]
289pub mod bitflags {
290 #![doc = include_str!("../doc-src/crate-bitflags.md")]
291
292 pub use ::bitflags::*;
293}
294
295#[cfg(feature = "blake3")]
296pub mod blake3 {
297 #![doc = include_str!("../doc-src/crate-blake3.md")]
298
299 pub use ::blake3::*;
300}
301
302#[cfg(feature = "bytes")]
303pub mod bytes {
304 #![doc = include_str!("../doc-src/crate-bytes.md")]
305
306 pub use ::bytes::*;
307}
308
309#[cfg(feature = "cc")]
310pub mod cc {
311 pub use ::cc::*;
316}
317
318#[cfg(feature = "cfg-if")]
319pub mod cfg_if {
320 pub use ::cfg_if::*;
325}
326
327#[cfg(feature = "chrono")]
328pub mod chrono {
329 #![doc = include_str!("../doc-src/crate-chrono.md")]
330
331 pub use ::chrono::*;
332}
333
334#[cfg(feature = "clap")]
335pub mod clap {
336 #![doc = include_str!("../doc-src/crate-clap.md")]
337
338 pub use ::clap::*;
339}
340
341
342#[cfg(feature = "ctrlc")]
343pub mod ctrlc {
344 pub use ::ctrlc::*;
349}
350
351#[cfg(feature = "crossbeam")]
352pub mod crossbeam {
353 #![doc = include_str!("../doc-src/crate-crossbeam.md")]
354
355 pub use ::crossbeam::*;
356}
357
358#[cfg(feature = "cxx")]
359pub mod cxx {
360 pub use ::cxx::*;
365}
366
367#[cfg(feature = "cxx-build")]
368pub mod cxx_build {
369 pub use ::cxx::*;
374}
375
376#[cfg(feature = "derive_more")]
377pub mod derive_more {
378 #![doc = include_str!("../doc-src/crate-derive_more.md")]
379
380 pub use ::derive_more::*;
381}
382
383#[cfg(feature = "env_logger")]
384pub mod env_logger {
385 #![doc = include_str!("../doc-src/crate-env_logger.md")]
386
387 pub use ::env_logger::*;
388}
389
390#[cfg(feature = "extension-trait")]
391pub mod extension_trait {
392 pub use ::extension_trait::*;
397}
398
399#[cfg(feature = "flate2")]
400pub mod flate2 {
401 #![doc = include_str!("../doc-src/crate-flate2.md")]
402
403 pub use ::flate2::*;
404}
405
406#[cfg(feature = "futures")]
407pub mod futures {
408 #![doc = include_str!("../doc-src/crate-futures.md")]
409
410 pub use ::futures::*;
411}
412
413#[cfg(feature = "glob")]
414pub mod glob {
415 #![doc = include_str!("../doc-src/crate-glob.md")]
416
417 pub use ::glob::*;
418}
419
420#[cfg(feature = "hex")]
421pub mod hex {
422 #![doc = include_str!("../doc-src/crate-hex.md")]
423
424 pub use ::hex::*;
425}
426
427#[cfg(feature = "http")]
428pub mod http {
429 pub use ::http::*;
434}
435
436#[cfg(feature = "hyper")]
437pub mod hyper {
438 pub use ::hyper::*;
443}
444
445#[cfg(feature = "itertools")]
446pub mod itertools {
447 #![doc = include_str!("../doc-src/crate-itertools.md")]
448
449 pub use ::itertools::*;
450}
451
452#[cfg(feature = "jiff")]
453pub mod jiff {
454 #![doc = include_str!("../doc-src/crate-jiff.md")]
455
456 pub use ::jiff::*;
457}
458
459#[cfg(feature = "json5")]
460pub mod json5 {
461 pub use ::json5::*;
466}
467
468#[cfg(feature = "libc")]
469pub mod libc {
470 pub use ::libc::*;
475}
476
477#[cfg(feature = "log")]
478pub mod log {
479 #![doc = include_str!("../doc-src/crate-log.md")]
480
481 pub use ::log::*;
482}
483
484#[cfg(feature = "mime")]
485pub mod mime {
486 #![doc = include_str!("../doc-src/crate-mime.md")]
487
488 pub use ::mime::*;
489}
490
491#[cfg(feature = "nom")]
492pub mod nom {
493 #![doc = include_str!("../doc-src/crate-nom.md")]
494
495 pub use ::nom::*;
496}
497
498#[cfg(feature = "num-bigint")]
499pub mod num_bigint {
500 #![doc = include_str!("../doc-src/crate-num-bigint.md")]
501
502 pub use ::num_bigint::*;
503}
504
505#[cfg(feature = "num_cpus")]
506pub mod num_cpus {
507 pub use ::num_cpus::*;
512}
513
514#[cfg(feature = "num_enum")]
515pub mod num_enum {
516 #![doc = include_str!("../doc-src/crate-num_enum.md")]
517
518 pub use ::num_enum::*;
519}
520
521#[cfg(feature = "powerletters")]
522pub mod powerletters {
523 #![doc = include_str!("../doc-src/crate-powerletters.md")]
524
525 pub use ::powerletters::*;
526}
527
528#[cfg(feature = "proc-macro2")]
529pub mod proc_macro2 {
530 pub use ::proc_macro2::*;
535}
536
537#[cfg(feature = "proptest")]
538pub mod proptest {
539 #![doc = include_str!("../doc-src/crate-proptest.md")]
540
541 pub use ::proptest::*;
542}
543
544#[cfg(feature = "quote")]
545pub mod quote {
546 pub use ::quote::*;
551}
552
553#[cfg(feature = "rand")]
554pub mod rand {
555 #![doc = include_str!("../doc-src/crate-rand.md")]
556
557 pub use ::rand::*;
558}
559
560#[cfg(feature = "rand_chacha")]
561pub mod rand_chacha {
562 pub use ::rand_chacha::*;
567}
568
569#[cfg(feature = "rand_pcg")]
570pub mod rand_pcg {
571 pub use ::rand_pcg::*;
576}
577
578#[cfg(feature = "rayon")]
579pub mod rayon {
580 #![doc = include_str!("../doc-src/crate-rayon.md")]
581
582 pub use ::rayon::*;
583}
584
585#[cfg(feature = "regex")]
586pub mod regex {
587 #![doc = include_str!("../doc-src/crate-regex.md")]
588
589 pub use ::regex::*;
590}
591
592#[cfg(feature = "reqwest")]
593pub mod reqwest {
594 pub use ::reqwest::*;
599}
600
601
602#[cfg(feature = "rustyline")]
603pub mod rustyline {
604 pub use ::rustyline::*;
609}
610
611#[cfg(feature = "semver")]
612pub mod semver {
613 #![doc = include_str!("../doc-src/crate-semver.md")]
614
615 pub use ::semver::*;
616}
617
618#[cfg(feature = "serde")]
619pub mod serde {
620 #![doc = include_str!("../doc-src/crate-serde.md")]
621
622 pub use ::serde::*;
623}
624
625#[cfg(feature = "serde_json")]
626pub mod serde_json {
627 #![doc = include_str!("../doc-src/crate-serde_json.md")]
628
629 pub use ::serde_json::*;
630}
631
632#[cfg(feature = "sha2")]
633pub mod sha2 {
634 #![doc = include_str!("../doc-src/crate-sha2.md")]
635
636 pub use ::sha2::*;
637}
638
639#[cfg(feature = "socket2")]
640pub mod socket2 {
641 pub use ::socket2::*;
646}
647
648#[cfg(feature = "static_assertions")]
649pub mod static_assertions {
650 #![doc = include_str!("../doc-src/crate-static_assertions.md")]
651
652 pub use ::static_assertions::*;
653}
654
655#[cfg(feature = "syn")]
656pub mod syn {
657 pub use ::syn::*;
662}
663
664#[cfg(feature = "tempfile")]
665pub mod tempfile {
666 #![doc = include_str!("../doc-src/crate-tempfile.md")]
667
668 pub use ::tempfile::*;
669}
670
671#[cfg(feature = "tera")]
672pub mod tera {
673 pub use ::tera::*;
678}
679
680#[cfg(feature = "termcolor")]
681pub mod termcolor {
682 pub use ::termcolor::*;
687}
688
689#[cfg(feature = "thiserror")]
690pub mod thiserror {
691 #![doc = include_str!("../doc-src/crate-thiserror.md")]
692
693 pub use ::thiserror::*;
694}
695
696#[cfg(feature = "tokio")]
697pub mod tokio {
698 #![doc = include_str!("../doc-src/crate-tokio.md")]
699
700 pub use ::tokio::*;
701}
702
703#[cfg(feature = "tower")]
704pub mod tower {
705 pub use ::tower::*;
711}
712
713#[cfg(feature = "toml")]
714pub mod toml {
715 #![doc = include_str!("../doc-src/crate-toml.md")]
716
717 pub use ::toml::*;
718}
719
720#[cfg(feature = "unicode-segmentation")]
721pub mod unicode_segmentation {
722 #![doc = include_str!("../doc-src/crate-unicode-segmentation.md")]
723
724 pub use ::unicode_segmentation::*;
725}
726
727#[cfg(feature = "url")]
728pub mod url {
729 #![doc = include_str!("../doc-src/crate-url.md")]
730
731 pub use ::url::*;
732}
733
734#[cfg(feature = "walkdir")]
735pub mod walkdir {
736 #![doc = include_str!("../doc-src/crate-walkdir.md")]
737
738 pub use ::walkdir::*;
739}
740
741#[cfg(feature = "xshell")]
742pub mod xshell {
743 pub use ::xshell::*;
748}