cmake_parser/doc/command/scripting/
mark_as_advanced.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    doc::command_scope::{CommandScope, ToCommandScope},
5    Token,
6};
7
8/// Mark cmake cached variables as advanced.
9///
10/// Reference: <https://cmake.org/cmake/help/v3.26/command/mark_as_advanced.html>
11#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cmake(pkg = "crate", default = "vars")]
13pub struct MarkAsAdvanced<'t> {
14    #[cmake(positional)]
15    pub mode: Option<Mode>,
16    #[cmake(rename = "")]
17    pub vars: Vec<Token<'t>>,
18}
19
20impl<'t> ToCommandScope for MarkAsAdvanced<'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", list)]
28pub enum Mode {
29    Clear,
30    Force,
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36    use crate::doc::cmake_parse::tests::tokens_vec;
37    use crate::*;
38    use pretty_assertions::assert_eq;
39
40    #[test]
41    fn mark_as_advanced() {
42        let src = include_bytes!("../../../../../fixture/commands/scripting/mark_as_advanced");
43        let cmakelists = parse_cmakelists(src).unwrap();
44        let doc = Doc::from(cmakelists);
45        assert_eq!(
46            doc.to_commands_iter().collect::<Vec<_>>(),
47            vec![
48                Ok(Command::MarkAsAdvanced(Box::new(MarkAsAdvanced {
49                    mode: None,
50                    vars: tokens_vec([b"name1", b"name2"]),
51                }))),
52                Ok(Command::MarkAsAdvanced(Box::new(MarkAsAdvanced {
53                    mode: Some(Mode::Clear),
54                    vars: tokens_vec([b"name1"]),
55                }))),
56            ]
57        )
58    }
59}