use crate::{
metadata::{
importscope::{parse_imports_blob, ImportsInfo},
streams::Blob,
tables::{ImportScope, ImportScopeRc, TableId, TableInfoRef, TableRow},
token::Token,
},
Result,
};
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct ImportScopeRaw {
pub rid: u32,
pub token: Token,
pub offset: usize,
pub parent: u32,
pub imports: u32,
}
impl ImportScopeRaw {
pub fn to_owned(&self, blobs: &Blob) -> Result<ImportScopeRc> {
let imports = if self.imports == 0 {
ImportsInfo::new()
} else {
let blob_data = blobs.get(self.imports as usize)?;
parse_imports_blob(blob_data, blobs)?
};
let scope = ImportScope {
rid: self.rid,
token: self.token,
offset: self.offset,
parent: self.parent,
imports,
};
Ok(Arc::new(scope))
}
}
impl TableRow for ImportScopeRaw {
#[rustfmt::skip]
fn row_size(sizes: &TableInfoRef) -> u32 {
u32::from(
sizes.table_index_bytes(TableId::ImportScope) +
sizes.blob_bytes()
)
}
}