interpreter/types/
alloc.rs1use crate::error;
2
3use super::BufValue;
4
5pub fn mkbuf(data: &str, file: &str) -> BufValue {
6 let (_, val) = data.split_at(1);
7
8 let (header, value) = val.split_at(1);
9
10 match header {
11 "'" => {
12 if value.contains(".") {
14 BufValue::Float(value.parse().unwrap())
15 }
16 else if let Ok(v) = value.parse() {
18 BufValue::U_Int(v)
19 }
20 else {
22 BufValue::Int(value.parse().unwrap())
23 }
24 }
25 "f" => BufValue::Float(value.parse().unwrap()),
26 "u" => BufValue::U_Int(value.parse().unwrap()),
27 "i" => BufValue::Int(value.parse().unwrap()),
28 "s" => {
29 if !val.ends_with("\"") {
30 error("Unknown String closing, expected `\"`", file);
31 }
32 if !val.starts_with("\"") {
33 error("Unknown String starting, expected `\"`", file);
34 }
35 BufValue::Str(val[2..].into())
36 }
37 "1" => BufValue::Bool(true),
38 "0" => BufValue::Bool(false),
39 e => {
40 error(format!("Unknown header `{}` used", e), file);
41 }
42 }
43}