use indexmap::IndexMap;
use crate::{Label, LocString, ResRef};
use crate::index::{U64Index, I64Index, F64Index, StringIndex, ResRefIndex, LocStringIndex, BinaryIndex};
#[derive(Debug, Clone, PartialEq)]
pub enum SimpleValueRef {
Byte(u8),
Char(i8),
Word(u16),
Short(i16),
Dword(u32),
Int(i32),
Dword64(U64Index),
Int64(I64Index),
Float(f32),
Double(F64Index),
String(StringIndex),
ResRef(ResRefIndex),
LocString(LocStringIndex),
Void(BinaryIndex),
}
#[derive(Debug, Clone, PartialEq)]
pub enum SimpleValue {
Byte(u8),
Char(i8),
Word(u16),
Short(i16),
Dword(u32),
Int(i32),
Dword64(u64),
Int64(i64),
Float(f32),
Double(f64),
String(String),
ResRef(ResRef),
LocString(LocString),
Void(Vec<u8>),
}
#[derive(Debug, Clone, PartialEq)]
pub enum Value {
Byte(u8),
Char(i8),
Word(u16),
Short(i16),
Dword(u32),
Int(i32),
Dword64(u64),
Int64(i64),
Float(f32),
Double(f64),
String(String),
ResRef(ResRef),
LocString(LocString),
Void(Vec<u8>),
Struct(IndexMap<Label, Value>),
List(Vec<Value>),
}
impl From<SimpleValue> for Value {
#[inline]
fn from(value: SimpleValue) -> Value {
use self::SimpleValue::*;
match value {
Byte(val) => Value::Byte(val),
Char(val) => Value::Char(val),
Word(val) => Value::Word(val),
Short(val) => Value::Short(val),
Dword(val) => Value::Dword(val),
Int(val) => Value::Int(val),
Dword64(val) => Value::Dword64(val),
Int64(val) => Value::Int64(val),
Float(val) => Value::Float(val),
Double(val) => Value::Double(val),
String(val) => Value::String(val),
ResRef(val) => Value::ResRef(val),
LocString(val) => Value::LocString(val),
Void(val) => Value::Void(val),
}
}
}