use crate::{
metadata::{
streams::Strings,
tables::{LocalVariable, LocalVariableRc, TableInfoRef, TableRow},
token::Token,
},
Result,
};
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct LocalVariableRaw {
pub rid: u32,
pub token: Token,
pub offset: usize,
pub attributes: u16,
pub index: u16,
pub name: u32,
}
impl LocalVariableRaw {
pub fn to_owned(&self, strings: &Strings) -> Result<LocalVariableRc> {
let name = if self.name == 0 {
String::new()
} else {
strings.get(self.name as usize)?.to_string()
};
let variable = LocalVariable {
rid: self.rid,
token: self.token,
offset: self.offset,
attributes: self.attributes,
index: self.index,
name,
};
Ok(Arc::new(variable))
}
}
impl TableRow for LocalVariableRaw {
#[rustfmt::skip]
fn row_size(sizes: &TableInfoRef) -> u32 {
u32::from(
2 + 2 + sizes.str_bytes() )
}
}