cmake_parser/doc/command/scripting/
cmake_policy.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", transparent)]
13pub enum CMakePolicy<'t> {
14 Version(PolicyVersion<'t>),
15 Set(PolicySet<'t>),
16 Get(PolicyGet<'t>),
17 Push,
18 Pop,
19}
20
21impl<'t> ToCommandScope for CMakePolicy<'t> {
22 fn to_command_scope(&self) -> CommandScope {
23 CommandScope::Scripting
24 }
25}
26
27#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
28#[cmake(pkg = "crate", positional)]
29pub struct PolicyVersion<'t> {
30 pub min: Token<'t>,
31}
32
33#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
34#[cmake(pkg = "crate", positional)]
35pub struct PolicySet<'t> {
36 pub policy: Token<'t>,
37 pub behavior: Behavior,
38}
39
40#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
41#[cmake(pkg = "crate", list)]
42pub enum Behavior {
43 New,
44 Old,
45}
46
47#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
48#[cmake(pkg = "crate", positional)]
49pub struct PolicyGet<'t> {
50 pub policy: Token<'t>,
51 pub variable: Token<'t>,
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57 use crate::doc::cmake_parse::tests::token;
58 use crate::*;
59 use pretty_assertions::assert_eq;
60
61 #[test]
62 fn cmake_policy() {
63 let src = include_bytes!("../../../../../fixture/commands/scripting/cmake_policy");
64 let cmakelists = parse_cmakelists(src).unwrap();
65 let doc = Doc::from(cmakelists);
66 assert_eq!(
67 doc.commands(),
68 Ok(vec![
69 Command::CMakePolicy(Box::new(CMakePolicy::Version(PolicyVersion {
70 min: token(b"min1"),
71 }))),
72 Command::CMakePolicy(Box::new(CMakePolicy::Set(PolicySet {
73 policy: token(b"CMP0001"),
74 behavior: Behavior::New,
75 }))),
76 Command::CMakePolicy(Box::new(CMakePolicy::Set(PolicySet {
77 policy: token(b"CMP0001"),
78 behavior: Behavior::Old,
79 }))),
80 Command::CMakePolicy(Box::new(CMakePolicy::Get(PolicyGet {
81 policy: token(b"CMP0001"),
82 variable: token(b"variable1"),
83 }))),
84 Command::CMakePolicy(Box::new(CMakePolicy::Push)),
85 Command::CMakePolicy(Box::new(CMakePolicy::Pop)),
86 ])
87 )
88 }
89}