repo_description: A modern replacement for ps written in Rust
repo_topics: cli process rust
code: use crate::process::ProcessInfo;
  use crate::{column_default, Column};
  use std::cmp;
  use std::collections::HashMap;
  
  pub struct MajFlt {
      header: String,
      unit: String,
      fmt_contents: HashMap<i32, String>,
      raw_contents: HashMap<i32, u64>,
      width: usize,
  }
  
  impl MajFlt {
      pub fn new(header: Option<String>) -> Self {
          let header = header.unwrap_or_else(|| String::from("MajorFaults"));
          let unit = String::new();
          Self {
              fmt_contents: HashMap::new(),
              raw_contents: HashMap::new(),
              width: 0,
              header,
              unit,
          }
      }
  }
  
  #[cfg(any(target_os = "linux", target_os = "android"))]
  impl Column for MajFlt {
      fn add(&mut self, proc: &ProcessInfo) {
          let raw_content = proc.curr_proc.stat().majflt;
          let fmt_content = format!("{raw_content}");
  
          self.fmt_contents.insert(proc.pid, fmt_content);
          self.raw_contents.insert(proc.pid, raw_content);
      }
  
      column_default!(u64, true);
  }
  
  #[cfg(target_os = "macos")]
  impl Column for MajFlt {
      fn add(&mut self, proc: &ProcessInfo) {
          let raw_content = proc.curr_task.ptinfo.pti_pageins as u64;
          let fmt_content = format!("{raw_content}");
  
          self.fmt_contents.insert(proc.pid, fmt_content);
          self.raw_contents.insert(proc.pid, raw_content);
      }
  
      column_default!(u64, true);
  }
  
  #[cfg(target_os = "windows")]
  impl Column for MajFlt {
      fn add(&mut self, proc: &ProcessInfo) {
          let raw_content = proc.memory_info.page_fault_count;
          let fmt_content = format!("{raw_content}");
  
          self.fmt_contents.insert(proc.pid, fmt_content);
          self.raw_contents.insert(proc.pid, raw_content);
      }
  
      column_default!(u64, true);
  }
  
  #[cfg(target_os = "freebsd")]
  impl Column for MajFlt {
      fn add(&mut self, proc: &ProcessInfo) {
          let raw_content = proc.curr_proc.info.rusage.majflt as u64;
          let fmt_content = format!("{raw_content}");
  
          self.fmt_contents.insert(proc.pid, fmt_content);
          self.raw_contents.insert(proc.pid, raw_content);
      }
  
      column_default!(u64, true);
  }
  