pub struct Bsp(vbsp::Bsp);
impl Bsp{
	pub const fn new(value:vbsp::Bsp)->Self{
		Self(value)
	}
}
impl AsRef<vbsp::Bsp> for Bsp{
	fn as_ref(&self)->&vbsp::Bsp{
		&self.0
	}
}

pub struct MdlData(Vec<u8>);
impl MdlData{
	pub const fn new(value:Vec<u8>)->Self{
		Self(value)
	}
}
impl AsRef<[u8]> for MdlData{
	fn as_ref(&self)->&[u8]{
		self.0.as_ref()
	}
}
pub struct VtxData(Vec<u8>);
impl VtxData{
	pub const fn new(value:Vec<u8>)->Self{
		Self(value)
	}
}
impl AsRef<[u8]> for VtxData{
	fn as_ref(&self)->&[u8]{
		self.0.as_ref()
	}
}
pub struct VvdData(Vec<u8>);
impl VvdData{
	pub const fn new(value:Vec<u8>)->Self{
		Self(value)
	}
}
impl AsRef<[u8]> for VvdData{
	fn as_ref(&self)->&[u8]{
		self.0.as_ref()
	}
}

pub struct ModelData{
	pub mdl:MdlData,
	pub vtx:VtxData,
	pub vvd:VvdData,
}
impl ModelData{
	pub fn read_model(&self)->Result<vmdl::Model,vmdl::ModelError>{
		Ok(vmdl::Model::from_parts(
			vmdl::mdl::Mdl::read(self.mdl.as_ref())?,
			vmdl::vtx::Vtx::read(self.vtx.as_ref())?,
			vmdl::vvd::Vvd::read(self.vvd.as_ref())?,
		))
	}
}