Skip to main content

rust_dynamic/
conv_inner.rs

1use crate::types::*;
2use crate::value::Value;
3
4
5impl Value {
6    pub fn conv_inner(&self, t: u16) -> Result<Self, Box<dyn std::error::Error>> {
7        match &self.data {
8            Val::Matrix(m_val) => {
9                let mut res: Vec<Vec<Value>> = Vec::new();
10                for r in m_val {
11                    let mut row: Vec<Value> = Vec::new();
12                    for v in r {
13                        match v.conv(t) {
14                            Ok(value) => {
15                                row.push(value);
16                            }
17                            Err(err) => {
18                                return Err(format!("Can not convert element of matrix row: {}", err).into());
19                            }
20                        }
21                    }
22                    res.push(row);
23                }
24                return Result::Ok(Value::from_matrix(res));
25            }
26            Val::List(l_val) => {
27                let mut res: Vec<Value> = Vec::new();
28                for v in l_val {
29                    match v.conv(t) {
30                        Ok(value) => {
31                            res.push(value);
32                        }
33                        Err(err) => {
34                            return Err(format!("Can not convert element of list: {}", err).into());
35                        }
36                    }
37                }
38                return Result::Ok(Value::from_list(res));
39            }
40            _ => {
41                return self.conv(t);
42            }
43        }
44    }
45}