Implémentation de Buffer et utilisation dans io/mod.rs
This commit is contained in:
parent
d8fb7a5478
commit
6ca8606081
3 changed files with 38 additions and 16 deletions
24
src/io/in.rs
24
src/io/in.rs
|
@ -0,0 +1,24 @@
|
||||||
|
use std::io as stdio;
|
||||||
|
use stdio::stdin;
|
||||||
|
|
||||||
|
pub struct Buffer {
|
||||||
|
buffer: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Buffer {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self {
|
||||||
|
buffer: String::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn read_line(&mut self) -> stdio::Result<usize> {
|
||||||
|
self.buffer.clear();
|
||||||
|
let result: stdio::Result<usize> = stdin().read_line(&mut self.buffer);
|
||||||
|
if result.is_err() {
|
||||||
|
eprintln!("error: invalid UTF-8 characters were read");
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,4 @@
|
||||||
use std::io;
|
use std::io;
|
||||||
use io::{
|
|
||||||
stdin,
|
|
||||||
stdout,
|
|
||||||
Write,
|
|
||||||
};
|
|
||||||
|
|
||||||
mod r#in;
|
mod r#in;
|
||||||
mod r#out;
|
mod r#out;
|
||||||
|
@ -11,27 +6,21 @@ mod r#out;
|
||||||
mod parser;
|
mod parser;
|
||||||
|
|
||||||
pub fn run() -> i32 {
|
pub fn run() -> i32 {
|
||||||
let mut buffer = String::new();
|
let mut buffer = r#in::Buffer::new();
|
||||||
let mut bytes_read_result: io::Result<usize>;
|
let mut bytes_read_result: io::Result<usize>;
|
||||||
let mut bytes_read: usize = 1;
|
let mut bytes_read: usize = 1;
|
||||||
|
|
||||||
while bytes_read != 0 {
|
while bytes_read != 0 {
|
||||||
buffer.clear();
|
out::print_ps1();
|
||||||
|
bytes_read_result = buffer.read_line();
|
||||||
print!("$ ");
|
|
||||||
if stdout().flush().is_err() {
|
|
||||||
eprintln!("error: can't fully flush stdout or reached EOF");
|
|
||||||
}
|
|
||||||
bytes_read_result = stdin().read_line(&mut buffer);
|
|
||||||
|
|
||||||
if bytes_read_result.is_err() {
|
if bytes_read_result.is_err() {
|
||||||
eprintln!("error: invalid UTF-8 characters were read");
|
|
||||||
bytes_read = 1;
|
bytes_read = 1;
|
||||||
} else {
|
} else {
|
||||||
bytes_read = bytes_read_result.unwrap();
|
bytes_read = bytes_read_result.unwrap();
|
||||||
if bytes_read != 0 {
|
if bytes_read != 0 {
|
||||||
let command_vec: Vec<String> = parser::parse(&buffer);
|
//let command_vec: Vec<String> = parser::parse(&buffer);
|
||||||
println!("{:?}", command_vec);
|
//println!("{:?}", command_vec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
use std::io::stdout;
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
|
pub fn print_ps1() {
|
||||||
|
print!("$ ");
|
||||||
|
if stdout().flush().is_err() {
|
||||||
|
eprintln!("error: can't fully flush stdout or reached EOF");
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue