main.rs 904 B

123456789101112131415161718192021222324252627282930313233343536
  1. #[derive(Debug)]
  2. struct PreviewPlan<'a> {
  3. filename: &'a str,
  4. renderer: &'a str,
  5. lazy: bool,
  6. }
  7. fn extension(filename: &str) -> &str {
  8. filename.rsplit_once('.').map(|(_, ext)| ext).unwrap_or("")
  9. }
  10. fn renderer_for(ext: &str) -> &'static str {
  11. match ext {
  12. "pdf" => "pdfjs-dist",
  13. "ofd" => "DLTech21/ofd.js",
  14. "dxf" | "dwg" | "dwf" | "dwfx" | "xps" => "@flyfish-dev/cad-viewer",
  15. "rs" | "json" | "yaml" => "highlight.js",
  16. _ => "fallback",
  17. }
  18. }
  19. fn plan(filename: &str) -> PreviewPlan<'_> {
  20. let renderer = renderer_for(extension(filename));
  21. PreviewPlan {
  22. filename,
  23. renderer,
  24. lazy: renderer != "fallback",
  25. }
  26. }
  27. fn main() {
  28. let files = ["invoice.ofd", "drawing.dxf", "house.dwfx", "main.rs", "archive.bin"];
  29. for item in files.iter().map(|filename| plan(filename)) {
  30. println!("{:?}", item);
  31. }
  32. }