cmake_parser/doc/command/scripting/
get_directory_property.rs1use cmake_parser_derive::CMake;
2
3use crate::{
4 doc::command_scope::{CommandScope, ToCommandScope},
5 Token,
6};
7
8#[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}