cmake_parser/doc/command/project/
define_property.rs1use ::cmake_parser_derive::CMake;
2
3use crate::{CommandScope, ToCommandScope, Token};
4
5#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
9#[cmake(pkg = "crate")]
10pub struct DefineProperty<'t> {
11 #[cmake(positional)]
12 pub property_scope: PropertyScope,
13 #[cmake(rename = "PROPERTY", positional, transparent)]
14 pub property_name: Token<'t>,
15 pub inherited: bool,
16 pub brief_docs: Option<Vec<Token<'t>>>,
17 pub full_docs: Option<Vec<Token<'t>>>,
18 pub initialize_from_variable: Option<Token<'t>>,
19}
20
21impl<'t> ToCommandScope for DefineProperty<'t> {
22 fn to_command_scope(&self) -> CommandScope {
23 CommandScope::Project
24 }
25}
26
27#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
28#[cmake(pkg = "crate")]
29pub enum PropertyScope {
30 Global,
31 Directory,
32 Target,
33 Source,
34 Test,
35 Variable,
36 CachedVariable,
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42 use crate::doc::cmake_parse::tests::quoted_tokens;
43 use crate::*;
44
45 #[test]
46 fn define_property() {
47 let src = include_bytes!("../../../../../fixture/commands/project/define_property");
48 let cmakelists = parse_cmakelists(src).unwrap();
49 let doc = Doc::from(cmakelists);
50
51 assert_eq!(
52 doc.commands(),
53 Ok(vec![
54 Command::DefineProperty(Box::new(DefineProperty {
55 property_scope: PropertyScope::Target,
56 property_name: b"EXAMPLE_TYPE".into(),
57 inherited: false,
58 brief_docs: Some(
59 quoted_tokens([b"Whether given target describes example."]).to_vec()
60 ),
61 full_docs: Some(
62 quoted_tokens([b"Whether given target describes example."]).to_vec()
63 ),
64 initialize_from_variable: None,
65 })),
66 Command::DefineProperty(Box::new(DefineProperty {
67 property_scope: PropertyScope::CachedVariable,
68 property_name: b"A_PROPERTY".into(),
69 inherited: false,
70 brief_docs: Some(quoted_tokens([b"brief"]).to_vec()),
71 full_docs: Some(quoted_tokens([b"full"]).to_vec()),
72 initialize_from_variable: None,
73 })),
74 ])
75 )
76 }
77}