cmake_parser/doc/command/project/
build_command.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 BuildCommand<'t> {
14 Variable(VariableBuildCommand<'t>),
15 CacheVariable(CacheVariableBuildCommand<'t>),
16}
17
18impl<'t> ToCommandScope for BuildCommand<'t> {
19 fn to_command_scope(&self) -> CommandScope {
20 CommandScope::Project
21 }
22}
23
24#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
25#[cmake(pkg = "crate")]
26pub struct VariableBuildCommand<'t> {
27 #[cmake(positional)]
28 pub variable: Token<'t>,
29 pub configuration: Option<Token<'t>>,
30 pub parallel_level: Option<Token<'t>>,
31 pub target: Option<Token<'t>>,
32 pub project_name: Option<Token<'t>>,
33}
34
35#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
36#[cmake(pkg = "crate", positional)]
37pub struct CacheVariableBuildCommand<'t> {
38 pub cachevariable: Token<'t>,
39 pub makecommand: Token<'t>,
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45 use crate::*;
46
47 #[test]
48 fn build_command() {
49 let src = include_bytes!("../../../../../fixture/commands/project/build_command");
50 let cmakelists = parse_cmakelists(src).unwrap();
51 let doc = Doc::from(cmakelists);
52 assert_eq!(
53 doc.commands(),
54 Ok(vec![
55 Command::BuildCommand(Box::new(BuildCommand::Variable(VariableBuildCommand {
56 variable: b"var1".into(),
57 configuration: Some(b"cfg1".into()),
58 parallel_level: Some(b"plevel2".into()),
59 target: Some(b"target3".into()),
60 project_name: Some(b"project_name4".into())
61 }))),
62 Command::BuildCommand(Box::new(BuildCommand::CacheVariable(
63 CacheVariableBuildCommand {
64 cachevariable: b"cachevar1".into(),
65 makecommand: b"makecommand1".into(),
66 }
67 ))),
68 ])
69 );
70 }
71}