use std::path::Path;
use std::fs::read_to_string;
pub fn head(path: &Path, n: usize) -> Vec<String> {
let mut result = Vec::new();
for line in read_to_string(path).unwrap().lines() {
result.push(line.to_string())
}
let len = result.len();
if len < n {
panic!("file too short!");
}
result[0..n].to_vec()
}
pub fn tail(path: &Path, n: usize) -> Vec<String> {
let mut result = Vec::new();
for line in read_to_string(path).unwrap().lines() {
result.push(line.to_string())
}
let len = result.len();
if len < n {
panic!("file too short!");
}
result[len-n..].to_vec()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_head() {
let path = Path::new("test_data/file.txt");
assert_eq!(head(path, 2), vec!["aaa", "bbb"]);
}
#[test]
fn test_tail() {
let path = Path::new("test_data/file.txt");
assert_eq!(tail(path, 2), vec!["bbb", "ccc"]);
}
}