Advertisement
Guest User

Untitled

a guest
Apr 18th, 2021
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.88 KB | None | 0 0
  1. struct Foo {
  2.     v: Vec<u8>,
  3. }
  4.  
  5. impl<'a> Foo {
  6.    fn do_foo(&'a mut self) -> Result<Option<&'a [u8]>, ()> {
  7.        loop {
  8.            self.v.extend_from_slice(b"  [ eu ]  ");
  9.            if get_section_name(&self.v).is_some() {
  10.                break;
  11.            }
  12.         };
  13.        Ok(get_section_name(&self.v))
  14.    }
  15. }
  16.  
  17. fn strip(buf: &[u8]) -> &[u8] {
  18.    let is_blank = |ch: &&u8| (**ch as char).is_ascii_whitespace();
  19.    let i = buf.iter().take_while(is_blank).count();
  20.    let j = buf[i..].iter().rev().take_while(is_blank).count();
  21.    &buf[i..buf.len() - j]
  22. }
  23.  
  24. fn get_section_name(buf: &[u8]) -> std::option::Option<&[u8]> {
  25.    let buf = strip(buf);
  26.    (buf.len() > 2 && buf[0] == b'[' && buf[buf.len()-1] == b']').then(
  27.        || strip(&buf[1..buf.len()-1]))
  28. }
  29.  
  30. fn main() {
  31.    let mut foo = Foo{v: Vec::new()};
  32.    println!("{:?}", foo.do_foo());
  33. }
  34.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement