cargo_tarpaulin/config/
types.rs

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    /// This can never fail, so the error type is uninhabited.
118    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}