clairs.rs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. use serde::{Deserialize, Serialize};
  2. use std::str::FromStr;
  3. pub type ClairSInfo = String;
  4. #[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
  5. pub struct ClairSFormat {
  6. pub gt: String,
  7. pub gq: u32,
  8. pub dp: u32,
  9. pub af: f64,
  10. pub ad: Vec<u32>,
  11. pub naf: f64,
  12. pub ndp: u32,
  13. pub nad: Vec<u32>,
  14. pub au: u32,
  15. pub cu: u32,
  16. pub gu: u32,
  17. pub tu: u32,
  18. pub nau: u32,
  19. pub ncu: u32,
  20. pub ngu: u32,
  21. pub ntu: u32,
  22. }
  23. impl FromStr for ClairSFormat {
  24. type Err = anyhow::Error;
  25. fn from_str(s: &str) -> anyhow::Result<Self> {
  26. let vals = s.split(':').collect::<Vec<&str>>();
  27. Ok(ClairSFormat {
  28. gt: vals.get(0).unwrap().to_string(),
  29. gq: vals.get(1).unwrap().parse()?,
  30. dp: vals.get(2).unwrap().parse()?,
  31. af: vals.get(3).unwrap().parse()?,
  32. ad: vals
  33. .get(4)
  34. .unwrap()
  35. .split(',')
  36. .map(|e| e.parse().unwrap())
  37. .collect(),
  38. naf: vals.get(5).unwrap().parse()?,
  39. ndp: vals.get(6).unwrap().parse()?,
  40. nad: vals
  41. .get(7)
  42. .unwrap()
  43. .split(',')
  44. .map(|e| e.parse().unwrap())
  45. .collect(),
  46. au: vals.get(8).unwrap().parse()?,
  47. cu: vals.get(9).unwrap().parse()?,
  48. gu: vals.get(10).unwrap().parse()?,
  49. tu: vals.get(11).unwrap().parse()?,
  50. nau: vals.get(12).unwrap().parse()?,
  51. ncu: vals.get(13).unwrap().parse()?,
  52. ngu: vals.get(14).unwrap().parse()?,
  53. ntu: vals.get(15).unwrap().parse()?,
  54. })
  55. }
  56. }