1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
//! `import prelude::*` so you can be ready to code! //! //! # Traits //! Not having common traits imported is one of the most annoying //! gotchas in rust when coming from other languages. When you are //! used to the language, you expect the methods you are used //! to to always work... not so. Using `Vec::from_iter` is extremely //! common, but you must first import the `FromIterator` trait. //! //! The following are the traits that are implemented and why: //! //! - `std::ascii::AsciiExt`: adds the `to_ascii_uppercase` onto //! `&str` types. //! - `std::fmt::Debug`: allows you to define Debug manually. //! - `std::fmt::Write as FmtWrite`: adds `write_str` onto byte buffers //! (such as `String`). Renamed `FmtWrite` to avoid conflict with //! `std::io::Write` //! - `std::io::BufRead`: the `BufRead` trait allows you to use the methods associated with //! the `BufReader` struct. //! - `std::io::Read`: allows you to use `file.read()` //! - `std::io::Seek`: allows you to use `file.seek()` //! - `std::io::Write as IoWrite`: allows you to use `file.write()` //! and `file.write_all()`. Renamed `IoWrite` to avoid conflict with //! `std::fmt::Write` //! - `std::ops::{Deref, DerefMut}`: allows deref through `*v` and also //! enables Deref coercions //! - `std::str::FromStr`: allows you to use `type::from_str` constructor //! for several types. This is what is implicitly called with //! `str::parse<_>()` //! //! # structs //! These are extremely commonly used types and it is annoying to have to //! reimport them all the time. //! //! - `std::collections::{BTreeMap, HashMap, HashSet}`: //! ordered-dict, dict and set //! - `std::ffi::OsString`: os agnostic (non unicode) string type //! `std::path::PathBuf` uses this. //! - `std::fs::File`: for opening files. //! - `File::open` to open a file for reading //! - `File::write` to open a file for writing //! - `std::fs::OpenOptions` for more file opening options //! - `std::fs::ReadDir`: to iterate over the entries in a directory. //! - `std::io::BufReader`: the BufRead struct wraps `io::Read` using a buffer reducing the number //! of OS calls and giving helpful methods //! - `read_line()`: read a single line //! - `lines()`: return an iterator over all lines. //! - `split(byte: u8)`: return an iterator which splits at the chosen byte. //! - `std::io::BufWriter`: similar to `BufReader`, buffers writes to reduce the number of calls to //! the OS. //! - `std::path::{Path, PathBuf}`: specifies an os path. //! - `std::rc::Rc`: reference counted pointer //! - `std::sync::Arc`: atomically reference counted pointer //! - `std::sync::Mutex`: mutual exclusion primitive for threading. //! - `std::sync::atomic::{AtomicBool, AtomicIsize, AtomicUsize}`: basic //! atomic types. Good for unique ids and lots of other use cases. //! - `std::sync::atomic::Ordering`: necessary for performing //! operations on atomic types. For incrementing a counter use //! `val.fetch_add(1, Ordering::SeqCst)`. //! - `std::sync::atomic::ATOMIC_USIZE_INIT`: initialized `AtomicUsize` //! of 0. Use with `static COUNTER: AtomicUsize = ATOMIC_USIZE_INIT;` //! - `std::time::Duration`: an amount of time, used for //! `std::thread::sleep`. //! //! # functions //! //! - `std::mem::{size_of, size_of_val}`: get the size of a type. This is //! safe and common enough that it should be always available. //! - `std::thread::sleep`: put the thread to sleep for a `Duration`. //! - `std::thread::spawn`: spawn a function in a new thread. In rust //! this is memory safe, so it is nice to have it always available. // traits pub use std::ascii::AsciiExt; pub use std::fmt::{Debug, Write as FmtWrite}; pub use std::io::{ BufRead, Read, Seek, SeekFrom, Write as IoWrite, }; pub use std::iter::FromIterator; pub use std::ops::{Deref, DerefMut}; pub use std::str::FromStr; // structs pub use std::collections::{BTreeMap, HashMap, HashSet}; pub use std::ffi::OsString; pub use std::fs::{ File, OpenOptions, ReadDir, }; pub use std::io::{ BufReader, BufWriter, }; pub use std::path::{Path, PathBuf}; pub use std::rc::Rc; pub use std::sync::{Arc, Mutex}; pub use std::sync::atomic::{ AtomicBool, AtomicIsize, AtomicUsize, Ordering, ATOMIC_USIZE_INIT, }; pub use std::time::Duration; // functions pub use std::mem::{size_of, size_of_val}; pub use std::thread::{sleep, spawn};