extern crate peg; peg::parser!(grammar borrows() for str { use std::borrow::{ToOwned, Cow}; pub rule borrowed() -> &'input str = $(['a'..='z']+) pub rule lifetime_parameter() -> Cow<'input, str> = x:$(['a'..='z']+) { x.into() } / "COW" { "cow".to_owned().into() } }); use self::borrows::*; fn main() { assert_eq!(borrowed("abcd"), Ok("abcd")); assert_eq!(&*lifetime_parameter("abcd").unwrap(), "abcd"); assert_eq!(&*lifetime_parameter("COW").unwrap(), "cow"); }