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
//! This is a simple library for dealing with the CR, LF, CRLF problem. //! It provides a trait `Enter`, And a default implement for `str` //! that trim corresponding newline characters `ENTER` of running OS's stdin /// Definations of newline characters. pub(crate) mod newlines { #![allow(dead_code)] const CR: &'static str = "\r"; const LF: &'static str = "\n"; const CRLF: &'static str = "\r\n"; #[cfg(target_os = "windows")] pub const ENTER: &'static str = CRLF; #[cfg(not(target_os = "windows"))] pub const ENTER: &'static str = LF; } /// Constant representing newline characters in the target OS. /// The mapping of newline characters is as follows: /// /// - Windows -> CRLF /// - not Windows -> LF pub use newlines::ENTER; pub trait Enter { fn enter(&self) -> &str; } impl Enter for str { /// trimming corresponding newline characters of running OS's stdin. /// /// # example(s) /// /// ```rust /// use enter::{ Enter, ENTER }; /// /// let mut str_with_enter = "Hello, World!".to_string(); /// str_with_enter.push_str(ENTER); /// assert_eq!(str_with_enter.enter(), "Hello, World!"); /// ``` fn enter(&self) -> &str { self.trim_right_matches(ENTER) } }