cmake_parser/doc/command/scripting/
get_directory_property.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    doc::command_scope::{CommandScope, ToCommandScope},
5    Token,
6};
7
8/// Get a property of DIRECTORY scope.
9///
10/// Reference: <https://cmake.org/cmake/help/v3.26/command/get_directory_property.html>
11#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cmake(pkg = "crate", positional)]
13pub struct GetDirectoryProperty<'t> {
14    pub name: Token<'t>,
15    #[cmake(transparent)]
16    pub directory: Option<Token<'t>>,
17    pub scope: Scope<'t>,
18}
19
20impl<'t> ToCommandScope for GetDirectoryProperty<'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 Scope<'t> {
29    #[cmake(transparent)]
30    Definition(Token<'t>),
31    Property(Token<'t>),
32}
33
34#[cfg(test)]
35mod tests {
36    use super::*;
37    use crate::doc::cmake_parse::tests::token;
38    use crate::*;
39    use pretty_assertions::assert_eq;
40
41    #[test]
42    fn get_directory_property() {
43        let src =
44            include_bytes!("../../../../../fixture/commands/scripting/get_directory_property");
45        let cmakelists = parse_cmakelists(src).unwrap();
46        let doc = Doc::from(cmakelists);
47        assert_eq!(
48            doc.to_commands_iter().collect::<Vec<_>>(),
49            vec![
50                Ok(Command::GetDirectoryProperty(Box::new(
51                    GetDirectoryProperty {
52                        name: token(b"name1"),
53                        directory: None,
54                        scope: Scope::Property(token(b"property1")),
55                    }
56                ))),
57                Ok(Command::GetDirectoryProperty(Box::new(
58                    GetDirectoryProperty {
59                        name: token(b"name1"),
60                        directory: Some(token(b"directory1")),
61                        scope: Scope::Property(token(b"property1")),
62                    }
63                ))),
64                Ok(Command::GetDirectoryProperty(Box::new(
65                    GetDirectoryProperty {
66                        name: token(b"name1"),
67                        directory: None,
68                        scope: Scope::Definition(token(b"var1")),
69                    }
70                ))),
71                Ok(Command::GetDirectoryProperty(Box::new(
72                    GetDirectoryProperty {
73                        name: token(b"name1"),
74                        directory: Some(token(b"directory1")),
75                        scope: Scope::Definition(token(b"var1")),
76                    }
77                ))),
78            ]
79        )
80    }
81}