aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorveradec <glitchmill.dyj3d@simplelogin.co>2026-09-07 13:07:48 +0530
committerveradec <glitchmill.dyj3d@simplelogin.co>2026-09-07 13:07:48 +0530
commit541dc3b929117b1f7670e11fce37c9ea08b8c398 (patch)
tree40783cd0782db12f2a96cc0b16ffcb5b3c178a98
parent5895e6330b179e6f50d197b0ac8a69765a7d8aaf (diff)
add: matches value and enumerates accordingly
-rw-r--r--src/main.rs39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/main.rs b/src/main.rs
index 2752f9f..0cbc919 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,25 +3,25 @@ use log::{debug, error, info, trace, warn};
use std::fs;
use regex::Regex;
-
+#[derive(Debug)]
enum OkmlType {
String(String),
Boolean(bool),
Integer(i64),
- Null(*const i32),
+ Float(f64),
+ Null,
}
-
+#[derive(Debug)]
enum OkmlValue {
Value(OkmlType),
SubList(Vec<Okml>),
}
-
+#[derive(Debug)]
struct Okml {
key: String,
value: OkmlValue,
}
-
fn load_from_file(file_path: &str) {
let extension = &file_path[file_path.len()-4..file_path.len()];
@@ -38,7 +38,7 @@ fn load_from_file(file_path: &str) {
let tokens: Vec<&str> = re.split(&content).filter(|s| !s.is_empty()).collect();
let token_len = tokens.len();
- let parent: Vec<Okml> = Default::default();
+ let mut parent: Vec<Okml> = Default::default();
let count_braces: u64 = 0;
for (mut index) in 0..token_len {
@@ -63,16 +63,41 @@ fn load_from_file(file_path: &str) {
result.push_str(" ");
}
-
+ parent.push(Okml{
+ key: current.to_string(),
+ value: OkmlValue::Value(OkmlType::String(result.clone()))
+ });
info!("{} => {}", current, result);
} else {
+ let mut return_value: OkmlType;
+ match value {
+ &"true" | &"yes" => return_value = OkmlType::Boolean(true),
+ &"false" | &"no" => return_value = OkmlType::Boolean(false),
+ &"null" => return_value = OkmlType::Null,
+ &&_ => {
+ if let Ok(parsed) = value.parse::<i64>() {
+ return_value = OkmlType::Integer(parsed);
+ } else if let Ok(parsed) = value.parse::<f64>() {
+ return_value = OkmlType::Float(parsed);
+ } else {
+ return_value = OkmlType::String(value.to_string());
+ }
+ }
+ }
+ // match value
+ parent.push(Okml{
+ key: current.to_string(),
+ value: OkmlValue::Value(return_value)
+ });
info!("{} => {}", current, value);
}
} else {
// info!("{}", current);
}
}
+
+ println!("{:#?}", parent);
}