[−][src]Function tweetr::util::prompt_multiline
pub fn prompt_multiline<R, W, F>(
input: &mut R,
output: &mut W,
prompt_s: &str,
verifier: F
) -> IoResult<String> where
R: BufRead,
W: Write,
F: Fn(&String) -> bool,
Ask the user to input a multiline string, (re)prompting as necessary.
Each line is separated by a \
, but can be escaped by \\
, e.g.
Prompt: Abolish\
the\
burgeoisie!
Will yield "Abolish\nthe\nburgeoisie!"
, but
Prompt: Capitalism\\
Will yield r"Capitalism\"
.
Examples
Reading multiple lines:
assert_eq!(prompt_multiline(&mut Cursor::new(b"Line 1\\\nLine 2\\\nLine 3"), &mut Vec::new(), "Lines", |_| true).unwrap(), "Line 1\nLine 2\nLine 3".to_string());
Escaping newline:
assert_eq!(prompt_multiline(&mut Cursor::new(b"Line 0\\\\\n"), &mut Vec::new(), "Escaped line", |_| true).unwrap(), "Line 0\\".to_string());
Accepting only two-line strings:
assert_eq!(prompt_multiline(&mut Cursor::new(b"Line 1\\\nLine 2\n"), &mut Vec::new(), "2 lines", |s| s.lines().count() == 2).unwrap(), "Line 1\nLine 2".to_string());