cmake_parser/doc/command/deprecated/
install_programs.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", untagged)]
13pub enum InstallPrograms<'t> {
14 RegEx(InstallProgramsRegEx<'t>),
15 Files(InstallProgramsFiles<'t>),
16 FilesAlt(InstallProgramsFilesAlt<'t>),
17}
18
19impl<'t> ToCommandScope for InstallPrograms<'t> {
20 fn to_command_scope(&self) -> CommandScope {
21 CommandScope::Deprecated
22 }
23}
24
25#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
26#[cmake(pkg = "crate")]
27pub struct InstallProgramsFiles<'t> {
28 #[cmake(positional)]
29 pub dir: Token<'t>,
30 pub files: Vec<Token<'t>>,
31}
32
33#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
34#[cmake(pkg = "crate", positional)]
35pub struct InstallProgramsFilesAlt<'t> {
36 pub dir: Token<'t>,
37 pub files: Vec<Token<'t>>,
38}
39
40#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
41#[cmake(pkg = "crate", positional, complete)]
42pub struct InstallProgramsRegEx<'t> {
43 pub dir: Token<'t>,
44 pub regex: Token<'t>,
45}
46
47#[cfg(test)]
48mod tests {
49 use super::*;
50 use crate::doc::cmake_parse::tests::{token, tokens_vec};
51 use crate::*;
52 use pretty_assertions::assert_eq;
53
54 #[test]
55 fn install_programs() {
56 let src = include_bytes!("../../../../../fixture/commands/deprecated/install_programs");
57 let cmakelists = parse_cmakelists(src).unwrap();
58 let doc = Doc::from(cmakelists);
59 assert_eq!(
60 doc.commands(),
61 Ok(vec![
62 Command::InstallPrograms(Box::new(InstallPrograms::Files(InstallProgramsFiles {
63 dir: token(b"dir1"),
64 files: tokens_vec([b"file1", b"file2"]),
65 }))),
66 Command::InstallPrograms(Box::new(InstallPrograms::RegEx(InstallProgramsRegEx {
67 dir: token(b"dir1"),
68 regex: token(b"regex1"),
69 }))),
70 Command::InstallPrograms(Box::new(InstallPrograms::FilesAlt(
71 InstallProgramsFilesAlt {
72 dir: token(b"dir1"),
73 files: tokens_vec([b"file1", b"file2"]),
74 }
75 ))),
76 ])
77 )
78 }
79}