rspack_style 0.1.16

a rust toolkit bundled for front-end style files
Documentation
pub trait VecCharExtend {
  fn poly(&self) -> String;
  fn trim(&self) -> Self;
  fn trim_start(&self) -> Self;
}

pub trait VecCharOptionalExtend {
  fn try_getword(&self, index: usize, wordlength: usize) -> Result<String, String>;
}

impl VecCharOptionalExtend for Vec<char> {
  fn try_getword(&self, index: usize, wordlength: usize) -> Result<String, String> {
    if index < self.len() {
      let start = index;
      let mut end = index + wordlength;
      if end > self.len() {
        end = self.len();
      }
      Ok(self[start..end].to_vec().iter().collect::<String>())
    } else {
      Err("find index is over vec range!".to_string())
    }
  }
}

impl VecCharOptionalExtend for &[char] {
  fn try_getword(&self, index: usize, wordlength: usize) -> Result<String, String> {
    if index < self.len() {
      let start = index;
      let mut end = index + wordlength;
      if end > self.len() {
        end = self.len();
      }
      Ok(self[start..end].to_vec().iter().collect::<String>())
    } else {
      Err("find index is over vec range!".to_string())
    }
  }
}

impl VecCharExtend for Vec<char> {
  fn poly(&self) -> String {
    self.iter().collect::<String>()
  }

  fn trim(&self) -> Vec<char> {
    let mut start = 0;
    let mut end = self.len();
    for (index, val) in self.iter().enumerate() {
      if *val != ' ' && *val != '\r' && *val != '\n' {
        start = index;
        break;
      }
    }
    for (index, val) in self.iter().rev().enumerate() {
      if *val != ' ' && *val != '\r' && *val != '\n' {
        end = self.len() - (index);
        break;
      }
    }
    self[start..end].to_vec()
  }

  fn trim_start(&self) -> Vec<char> {
    let mut start = 0;
    let end = self.len();
    for (index, val) in self.iter().enumerate() {
      if *val != ' ' && *val != '\r' && *val != '\n' {
        start = index;
        break;
      }
    }
    self[start..end].to_vec()
  }
}