df_ls_structure/shared_token_args/material_token_args/
local_plant_mat_arg.rs1use df_ls_core::Reference;
2use df_ls_diagnostics::DiagnosticsInfo;
3use df_ls_syntax_analysis::{Token, TryFromArgumentGroup};
4use serde::{Deserialize, Serialize};
5
6#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq, Eq)]
11pub struct LocalPlantMatArg(pub Reference);
12
13impl TryFromArgumentGroup for LocalPlantMatArg {
14 fn try_from_argument_group(
15 token: &mut Token,
16 source: &str,
17 diagnostics: &mut DiagnosticsInfo,
18 add_diagnostics_on_err: bool,
19 ) -> Result<Self, ()> {
20 let arg0 = match token.get_current_arg() {
22 Ok(arg) => Ok(arg.clone()),
23 Err(err) => Err(err),
24 };
25 let reference_arg0 =
27 Reference::try_from_argument_group(token, source, diagnostics, add_diagnostics_on_err)?;
28 let material_type = match reference_arg0.0.as_ref() {
30 "LOCAL_PLANT_MAT" => {
31 Reference::try_from_argument_group(
33 token,
34 source,
35 diagnostics,
36 add_diagnostics_on_err,
37 )?
38 }
39 _ => {
40 Self::diagnostics_wrong_enum_type(
41 &arg0?,
42 vec!["LOCAL_PLANT_MAT"],
43 source,
44 diagnostics,
45 add_diagnostics_on_err,
46 );
47 return Err(());
48 }
49 };
50 Ok(Self(material_type))
51 }
52}
53
54#[cfg(test)]
56mod tests {
57 use super::*;
58 use df_ls_lexical_analysis::test_utils::LexerTestBuilder;
59 use df_ls_syntax_analysis::test_tree_structure;
60 use df_ls_syntax_analysis::test_utils::SyntaxTestBuilder;
61
62 #[test]
63 fn test_material_correct() {
64 let test_builder = SyntaxTestBuilder::from_lexer_test_builder(
65 LexerTestBuilder::test_source(
66 "header
67 [REF:LOCAL_PLANT_MAT:LEAF]
68 ",
69 )
70 .add_test_lexer_diagnostics_codes(vec![])
71 .add_test_lexer_diagnostics_ranges(vec![]),
72 )
73 .add_test_syntax_diagnostics_codes(vec![])
74 .add_test_syntax_diagnostics_ranges(vec![]);
75
76 test_tree_structure!(
77 test_builder,
78 [
79 (LocalPlantMatArg,) => (LocalPlantMatArg(Reference("LEAF".to_owned())),),
80 ]
81 );
82 }
83}