Skip to main content

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}