rust_less/
utils.rs

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}