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
/// Type alias for an owned text, i.e. ``Vec<u8>``.
pub type Text = Vec<u8>;
/// Type alias for a text slice, i.e. ``&[u8]``.
pub type TextSlice<'a> = &'a [u8];
/// Remove a trailing newline from the given string in place.
pub fn trim_newline(s: &mut String) {
if s.ends_with('\n') {
s.pop();
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::ops::Deref;
/// This function demonstrates the use of the IntoSequenceIterator alias, which takes both
/// slices and iterators.
fn print_sequence<Item: Deref<Target = u8>, T: IntoIterator<Item = Item>>(sequence: T) {
for c in sequence {
println!("{}", *c);
}
}
#[test]
fn test_print_sequence() {
let s = b"ACGT";
// use iterator
print_sequence(s.iter().step_by(1));
// use slice
print_sequence(&s[..]);
// use vec
print_sequence(&vec![b'A', b'C']);
// keep ownership
println!("{:?}", s);
}
#[test]
fn test_trim_newline_from_string() {
let mut s = String::from("AGCT\n");
trim_newline(&mut s);
assert_eq!(s, String::from("AGCT"));
}
}