gitql_std/
meta_types.rs

1use gitql_ast::types::array::ArrayType;
2use gitql_ast::types::DataType;
3
4/// Returns the type of of first element
5/// (T1, T2, ...) -> T1
6#[inline(always)]
7pub fn first_element_type(elements: &[Box<dyn DataType>]) -> Box<dyn DataType> {
8    elements[0].clone()
9}
10
11/// Returns the type of second element
12/// (T1, T2, ...) -> T2
13#[inline(always)]
14pub fn second_element_type(elements: &[Box<dyn DataType>]) -> Box<dyn DataType> {
15    elements[0].clone()
16}
17
18/// Returns Array type of the passed element type
19/// T -> Array<T>
20#[inline(always)]
21pub fn array_of_type(element_type: Box<dyn DataType>) -> Box<dyn DataType> {
22    Box::new(ArrayType::new(element_type.clone()))
23}
24
25/// Returns element type of passed Array type
26/// Array<T> -> T
27#[inline(always)]
28pub fn array_element_type(array: Box<dyn DataType>) -> Box<dyn DataType> {
29    if let Some(other_array) = array.as_any().downcast_ref::<ArrayType>() {
30        return other_array.base.clone();
31    }
32    panic!("Expect Array type")
33}