Skip to main content

usiagent/
input.rs

1//! 入力の読み取り
2use std::io;
3use std::io::BufRead;
4
5/// 入力を読み取る
6pub trait USIInputReader {
7	fn read(&mut self) -> io::Result<Option<String>>;
8}
9/// 標準入力から読み取る`USIInputReader`の実装
10pub struct USIStdInputReader {
11
12}
13impl USIStdInputReader {
14	/// `USIStdInputReader`の生成
15	pub fn new() -> USIStdInputReader {
16		USIStdInputReader {
17
18		}
19	}
20}
21impl USIInputReader for USIStdInputReader {
22	/// 入力を一行読み取る
23	fn read(&mut self) -> io::Result<Option<String>> {
24		let stdin = io::stdin();
25		let mut lock = stdin.lock();
26		let mut buf = String::new();
27
28		if lock.read_line(&mut buf)? == 0 {
29			Ok(None)
30		} else {
31			let ptn:&[_] = &['\r','\n'];
32
33			Ok(Some(buf.as_str().trim_end_matches(ptn).to_string()))
34		}
35	}
36}