mdbook_cat_prep/error.rs
1//! modul obsahující chybový typ
2//! `cat-prepu`
3//!
4//! `cat-prep` používá na zpracování chyb knihovnu
5//! `failure`, které umožňuje jednoduché formátování
6//! a propagaci chyb.
7//!
8//! Bohužel,
9//! místo správných chybových jsou v některých
10//! variantách [`CatError`] typu uloženy stringy,
11//! protože trait `Error` nemá podmínku [`Clone`
12//! a některé chyby jsou tudíž neklonovatelné.
13
14use failure::Fail;
15use toml::de::Error as TomlError;
16
17use crate::render::RenderType;
18
19/// výčet obsahující možné chyby
20#[derive(Debug, Fail, Clone)]
21pub enum CatError {
22 /// Složka `teachers` neexistuje
23 #[fail(display = "teachers folder doesn't exist")]
24 NoTeacherFolder,
25 /// Soubor `teachers` není složka
26 #[fail(display = "file 'teachers' is not a folder")]
27 TeachersArentFolder,
28 /// Karta učitele nemá správný formát
29 #[fail(display = "invalid teacher file: {}: {}", name, err)]
30 InvalidTeacherCard {
31 /// název souboru s neplatnou kartou učitele
32 name: String,
33 /// chyba parsování
34 err: TomlError,
35 },
36 /// Souboru chybí header, nebo je nesprávně ukončený
37 #[fail(display = "the header is either missing or invalid")]
38 InvalidOrMissingHeader,
39 /// Header souboru není možné naparsovat jako TOML,
40 /// nebo neobsahuje všechny povinné hodnoty
41 #[fail(display = "the header has invalid format: {}", err)]
42 InvalidHeaderFormat {
43 /// chyba parsování
44 err: TomlError,
45 },
46 /// Nepodařilo se spustit příkaz v shell,
47 /// nšbo došlo k chybě při běhu.
48 ///
49 /// Může implikovat, že některý z následujících nástrojů není dostupný:
50 /// - git
51 /// - ls
52 /// - xargs
53 /// - true
54 /// - sh
55 #[fail(
56 display = "failed to run command: {} exited with code {} and output '{}'",
57 name, status, error
58 )]
59 CommandFailed {
60 /// název programu (může obsahovat buď název samotného programu nebo celý příkaz)
61 name: String,
62 /// status, se kterým příkaz skončil
63 status: i32,
64 /// chybový výstup příkazu
65 error: String,
66 },
67 /// `mdBook` neběží v repozitáři.
68 /// Pro uživatelské funkce vyžaduje `cat-prep` gitový repozitář
69 #[fail(
70 display = "mdbook isn't running in a git repository or the repository is bare: {}",
71 error
72 )]
73 NotARepo {
74 /// Chybový výstup příkazu ke zjištění,
75 /// zda se daná kniha nachází v repozitáři.
76 ///
77 /// Výstup je zachován, protože také může indikovat,
78 /// že `git` není nainstalovaný, repozitář je porušený
79 /// nebo se nepodařilo přečíst soubory `gitu`
80 error: String,
81 },
82 /// v šablonovém enginu `tinytemplate` došlo k chybě
83 #[fail(display = "tiny template encountered an error: {}", error)]
84 TinyError {
85 /// chyba z šablonového enginu
86 /// `tinytemplate`
87 error: String,
88 }, // TinyError is not Clone :(
89 /// některý render zůstal po zavolání funkce `render::execute_renders` nevyužitý
90 #[fail(display = "orphan renders: {} at {}", render, site)]
91 OrphanRender {
92 /// soubor, který měl tento render modifikoat
93 site: String,
94 /// samotný render
95 render: RenderType,
96 },
97 /// jiná chyba (pro využití 3. stranou)
98 #[fail(display = "other error: {}", msg)]
99 OtherError {
100 /// text jiné chyby
101 msg: String,
102 },
103}