1use pest::iterators::Pair;
2
3use crate::{
4 parser::Rule,
5 selects::{Attr, Variable},
6};
7
8pub fn get_select_name(pair: &Pair<Rule>) -> String {
9 let rule = pair.as_rule();
10 if rule != Rule::select {
11 String::from("")
12 } else {
13 for child in pair.clone().into_inner() {
14 if child.as_rule() == Rule::selectName {
15 let str = child.as_span().as_str().to_string();
16 return str;
17 }
18 }
19 String::from("")
20 }
21}
22
23pub fn get_attr_and_variable(pair: &Pair<Rule>) -> (Vec<Attr>, Vec<Variable>) {
24 if pair.as_rule() != Rule::select {
25 panic!("Not a select");
26 }
27 let mut attr_list = vec![];
28 let mut variable_list = vec![];
29 for child in pair.clone().into_inner() {
30 if child.as_rule() == Rule::attr {
31 attr_list.push(get_attr(child));
32 } else if child.as_rule() == Rule::variable {
33 variable_list.insert(0, get_variable(child));
34 }
35 }
36
37 return (attr_list, variable_list);
38}
39
40pub fn get_attr(pair: Pair<Rule>) -> Attr {
41 if pair.as_rule() != Rule::attr {
42 panic!("Not a attr");
43 }
44 let mut name = String::from("");
45 let mut value = String::from("");
46 for child in pair.into_inner() {
47 if child.as_rule() == Rule::attrName {
48 name = child.as_span().as_str().to_string();
49 }
50 if child.as_rule() == Rule::attrValue {
51 value = child.as_span().as_str().to_string();
52 }
53 }
54 return Attr(name, value);
55}
56
57pub fn get_variable(pair: Pair<Rule>) -> Variable {
58 if pair.as_rule() != Rule::variable {
59 panic!("Not a variable");
60 }
61 let mut name = String::from("");
62 let mut value = String::from("");
63 for child in pair.into_inner() {
64 if child.as_rule() == Rule::variableName {
65 name = child.as_span().as_str().to_string();
66 }
67 if child.as_rule() == Rule::variableValue {
68 value = child.as_span().as_str().to_string();
69 }
70 }
71 return Variable(name, value);
72}
73
74pub fn get_media_query_expression(pair: &Pair<Rule>) -> String {
75 if pair.as_rule() != Rule::mediaQuery {
76 panic!("Not a media query");
77 }
78
79 for child in pair.clone().into_inner() {
80 if child.as_rule() == Rule::mediaQueryExpression {
81 return child.as_span().as_str().to_string();
82 }
83 }
84
85 String::from("")
86}