[][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());