cmake_parser/doc/command/scripting/
message.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    doc::command_scope::{CommandScope, ToCommandScope},
5    Token,
6};
7
8/// Log a message.
9///
10/// Reference: <https://cmake.org/cmake/help/v3.26/command/message.html>
11#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cmake(pkg = "crate", untagged)]
13pub enum Message<'t> {
14    ReportingChecks(MessageReportingChecks<'t>),
15    #[cmake(transparent)]
16    ConfigureLog(Vec<Token<'t>>),
17    General(MessageGeneral<'t>),
18}
19
20impl<'t> ToCommandScope for Message<'t> {
21    fn to_command_scope(&self) -> CommandScope {
22        CommandScope::Scripting
23    }
24}
25
26#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
27#[cmake(pkg = "crate", untagged)]
28pub enum MessageGeneral<'t> {
29    #[cmake(transparent)]
30    FatalError(Vec<Token<'t>>),
31    #[cmake(transparent)]
32    SendError(Vec<Token<'t>>),
33    #[cmake(transparent)]
34    Warning(Vec<Token<'t>>),
35    #[cmake(transparent)]
36    AuthorWarning(Vec<Token<'t>>),
37    #[cmake(transparent)]
38    Deprecation(Vec<Token<'t>>),
39    #[cmake(transparent)]
40    Notice(Vec<Token<'t>>),
41    #[cmake(transparent)]
42    Status(Vec<Token<'t>>),
43    #[cmake(transparent)]
44    Verbose(Vec<Token<'t>>),
45    #[cmake(transparent)]
46    Debug(Vec<Token<'t>>),
47    #[cmake(transparent)]
48    Trace(Vec<Token<'t>>),
49    // TODO: implement `default` cmake attribute to add to [MessageGeneral::Notice]
50    NoticeDefault(Vec<Token<'t>>),
51}
52
53#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
54#[cmake(pkg = "crate", untagged, transparent)]
55pub enum MessageReportingChecks<'t> {
56    CheckStart(Vec<Token<'t>>),
57    CheckPass(Vec<Token<'t>>),
58    CheckFail(Vec<Token<'t>>),
59}
60
61#[cfg(test)]
62mod tests {
63    use super::*;
64    use crate::doc::cmake_parse::tests::quoted_tokens_vec;
65    use crate::*;
66    use pretty_assertions::assert_eq;
67
68    #[test]
69    fn message() {
70        let src = include_bytes!("../../../../../fixture/commands/scripting/message");
71        let cmakelists = parse_cmakelists(src).unwrap();
72        let doc = Doc::from(cmakelists);
73        assert_eq!(
74            doc.to_commands_iter().collect::<Vec<_>>(),
75            vec![
76                Ok(Command::Message(Box::new(Message::General(
77                    MessageGeneral::FatalError(quoted_tokens_vec([b"msg1"]))
78                )))),
79                Ok(Command::Message(Box::new(Message::General(
80                    MessageGeneral::SendError(quoted_tokens_vec([b"msg1"]))
81                )))),
82                Ok(Command::Message(Box::new(Message::General(
83                    MessageGeneral::Warning(quoted_tokens_vec([b"msg1"]))
84                )))),
85                Ok(Command::Message(Box::new(Message::General(
86                    MessageGeneral::AuthorWarning(quoted_tokens_vec([b"msg1"]))
87                )))),
88                Ok(Command::Message(Box::new(Message::General(
89                    MessageGeneral::Deprecation(quoted_tokens_vec([b"msg1"]))
90                )))),
91                Ok(Command::Message(Box::new(Message::General(
92                    MessageGeneral::Notice(quoted_tokens_vec([b"msg1"]))
93                )))),
94                Ok(Command::Message(Box::new(Message::General(
95                    MessageGeneral::Status(quoted_tokens_vec([b"msg1"]))
96                )))),
97                Ok(Command::Message(Box::new(Message::General(
98                    MessageGeneral::Verbose(quoted_tokens_vec([b"msg1"]))
99                )))),
100                Ok(Command::Message(Box::new(Message::General(
101                    MessageGeneral::Debug(quoted_tokens_vec([b"msg1"]))
102                )))),
103                Ok(Command::Message(Box::new(Message::General(
104                    MessageGeneral::Trace(quoted_tokens_vec([b"msg1"]))
105                )))),
106                Ok(Command::Message(Box::new(Message::General(
107                    MessageGeneral::NoticeDefault(quoted_tokens_vec([b"msg1"]))
108                )))),
109                Ok(Command::Message(Box::new(Message::ReportingChecks(
110                    MessageReportingChecks::CheckStart(quoted_tokens_vec([b"msg1"]))
111                )))),
112                Ok(Command::Message(Box::new(Message::ReportingChecks(
113                    MessageReportingChecks::CheckPass(quoted_tokens_vec([b"msg1"]))
114                )))),
115                Ok(Command::Message(Box::new(Message::ReportingChecks(
116                    MessageReportingChecks::CheckFail(quoted_tokens_vec([b"msg1"]))
117                )))),
118                Ok(Command::Message(Box::new(Message::ConfigureLog(
119                    quoted_tokens_vec([b"msg1"])
120                )))),
121            ]
122        )
123    }
124}