1use clap::ValueEnum;
2#[cfg(feature = "coveralls")]
3use coveralls_api::CiService;
4use serde::{Deserialize, Serialize};
5use std::fmt;
6use std::str::FromStr;
7
8#[derive(
9 Debug, Copy, Clone, PartialEq, Eq, Hash, Ord, PartialOrd, Deserialize, Serialize, ValueEnum,
10)]
11#[value(rename_all = "PascalCase")]
12pub enum Color {
13 Auto,
14 Always,
15 Never,
16}
17
18impl fmt::Display for Color {
19 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20 match self {
21 Color::Auto => write!(f, "Auto"),
22 Color::Always => write!(f, "Always"),
23 Color::Never => write!(f, "Never"),
24 }
25 }
26}
27
28#[derive(
29 Debug,
30 Default,
31 Copy,
32 Clone,
33 PartialEq,
34 Eq,
35 Hash,
36 Ord,
37 PartialOrd,
38 Deserialize,
39 Serialize,
40 ValueEnum,
41)]
42#[value(rename_all = "PascalCase")]
43pub enum TraceEngine {
44 Auto,
45 #[cfg_attr(ptrace_supported, default)]
46 Ptrace,
47 #[cfg_attr(not(ptrace_supported), default)]
48 Llvm,
49}
50
51impl TraceEngine {
52 pub const fn supported() -> &'static [TraceEngine] {
53 cfg_if::cfg_if! {
54 if #[cfg(ptrace_supported)] {
55 &[TraceEngine::Ptrace, TraceEngine::Llvm]
56 } else {
57 &[TraceEngine::Llvm]
58 }
59 }
60 }
61}
62
63#[derive(
64 Debug, Copy, Clone, PartialEq, Eq, Hash, Ord, PartialOrd, Deserialize, Serialize, ValueEnum,
65)]
66#[value(rename_all = "PascalCase")]
67pub enum Mode {
68 Test,
69 Build,
70}
71
72#[derive(
73 Debug, Copy, Clone, PartialEq, Eq, Hash, Ord, PartialOrd, Deserialize, Serialize, ValueEnum,
74)]
75#[value(rename_all = "PascalCase")]
76pub enum RunType {
77 Tests,
78 Doctests,
79 Benchmarks,
80 Examples,
81 Lib,
82 Bins,
83 AllTargets,
84}
85
86#[derive(
87 Debug,
88 Default,
89 Copy,
90 Clone,
91 Eq,
92 PartialEq,
93 Ord,
94 PartialOrd,
95 Hash,
96 Deserialize,
97 Serialize,
98 ValueEnum,
99)]
100#[value(rename_all = "PascalCase")]
101#[non_exhaustive]
102pub enum OutputFile {
103 Json,
104 #[default]
105 Stdout,
106 Xml,
107 Html,
108 Lcov,
109}
110
111#[cfg(feature = "coveralls")]
112#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Deserialize, Serialize)]
113pub struct Ci(pub CiService);
114
115#[cfg(feature = "coveralls")]
116impl FromStr for Ci {
117 type Err = std::convert::Infallible;
119
120 #[inline]
121 fn from_str(x: &str) -> Result<Ci, Self::Err> {
122 match x {
123 "circle-ci" => Ok(Ci(CiService::Circle)),
124 "codeship" => Ok(Ci(CiService::Codeship)),
125 "jenkins" => Ok(Ci(CiService::Jenkins)),
126 "semaphore" => Ok(Ci(CiService::Semaphore)),
127 "travis-ci" => Ok(Ci(CiService::Travis)),
128 "travis-pro" => Ok(Ci(CiService::TravisPro)),
129 other => Ok(Ci(CiService::Other(other.to_string()))),
130 }
131 }
132}