use amplify::confinement::LargeVec;
use strict_encoding::STRICT_TYPES_LIB;
use crate::typesys::{TypeInfo, TypeTree};
#[derive(Clone, Eq, PartialEq, Debug)]
#[derive(StrictType, StrictDumb, StrictEncode, StrictDecode)]
#[strict_type(lib = STRICT_TYPES_LIB)]
pub struct MemoryLayout {
items: LargeVec<TypeInfo>,
}
impl From<TypeTree<'_>> for MemoryLayout {
fn from(tree: TypeTree) -> Self {
let mut layout = MemoryLayout::new();
layout.items.extend(&tree).expect("type layout exceeds billions of fields");
layout
}
}
impl<'a> From<&'a TypeTree<'_>> for MemoryLayout {
fn from(tree: &'a TypeTree) -> Self {
let mut layout = MemoryLayout::new();
layout.items.extend(tree).expect("type layout exceeds billions of fields");
layout
}
}
impl MemoryLayout {
fn new() -> Self { Self { items: empty!() } }
}