Reader

Struct Reader 

Source
pub struct Reader<'a> { /* private fields */ }
Expand description

Main struct for reading .blend files.

This struct is created by the read function.

§Examples

use blend_rs::blend::{read, Reader, ReadError};

let blend_data = std::fs::read("examples/example-3.2.blend")
    .expect("file 'examples/example-3.2.blend' should exist and be readable");

let reader: Result<Reader, ReadError> = read(&blend_data);

Implementations§

Source§

impl<'a> Reader<'a>

Source

pub fn iter<S>(&self) -> Result<StructIter<'_, S>, ReadError>
where S: 'a + GeneratedBlendStruct,

Returns an iterator over all structs of the specified type.

§Errors
§Examples
use blend_rs::blend::{read, StructIter};
use blend_rs::blender3_2::Mesh;

let blend_data = std::fs::read("examples/example-3.2.blend")
    .expect("file 'examples/example-3.2.blend' to be readable");

let reader = read(&blend_data)
    .expect("Blender file should be parsable");

let meshes: StructIter<Mesh> = reader.iter::<Mesh>()
    .expect("Blender file should contains Meshes");
Source

pub fn deref<P, S>(&self, pointer: &P) -> Result<StructIter<'_, S>, ReadError>

Dereferences the specified PointerLike and returns an iterator over the structs.

§Errors
§Examples
use blend_rs::blend::{read, PointerLike, NameLike, StructIter};
use blend_rs::blender3_2::{Mesh, MLoop, MPoly};

let blend_data = std::fs::read("examples/example-3.2.blend")
    .expect("file 'examples/example-3.2.blend' should exist and be readable");

let reader = read(&blend_data)
    .expect("Blender file should be parsable");

let mesh: &Mesh = reader.iter::<Mesh>()
   .expect("Blender file should contains Meshes")
   .find(|mesh| mesh.id.name.to_name_str_unchecked() == "Cube")
   .expect("Blender file should contain a Mesh with name 'Cube'");

let polygons: StructIter<MPoly> = reader.deref(&mesh.mpoly)
    .expect("an iterator over all polygons of the Mesh");
Source

pub fn deref_single<P, S>(&self, pointer: &P) -> Result<&'a S, ReadError>

Dereferences the specified PointerLike and returns the struct.

§Errors
§Examples
use blend_rs::blend::{read, PointerLike, NameLike};
use blend_rs::blender3_2::{Object, Mesh};

let blend_data = std::fs::read("examples/example-3.2.blend")
    .expect("file 'examples/example-3.2.blend' should exist and be readable");

let reader = read(&blend_data)
    .expect("Blender file should be parsable");

let cube: &Object = reader.iter::<Object>()
   .expect("Blender file should contains Objects")
   .find(|object| object.id.name.to_name_str_unchecked() == "Cube")
   .expect("Blender file should contain an Object with name 'Cube'");

let mesh: &Mesh = reader.deref_single(&cube.data.as_instance_of::<Mesh>())
    .expect("object 'Cube' should have a Mesh");
Source

pub fn deref_raw<P, S>(&self, pointer: &P) -> Result<Data<'a>, ReadError>

Dereferences the specified PointerLike and returns a slice of the raw data.

§Errors
§Examples
use blend_rs::blend::{read, PointerLike, NameLike};
use blend_rs::blender3_2::{PackedFile};

let blend_data = std::fs::read("examples/example-3.2.blend")
    .expect("file 'examples/example-3.2.blend' should exist and be readable");

let reader = read(&blend_data)
    .expect("Blender data should be parsable");

let packed_file: &PackedFile = reader.iter::<PackedFile>()
   .expect("an iterator over all PackedFiles")
   .first()
   .expect("at least one PackedFile");

let data = reader.deref_raw(&packed_file.data)
    .expect("raw data of the PackedFile");
Source

pub fn deref_raw_range<P, S>( &self, pointer: &P, range: Range<usize>, ) -> Result<Data<'a>, ReadError>

Dereferences the specified PointerLike and returns a sub-slice of the raw data.

§Errors
§Examples
use blend_rs::blend::{read, PointerLike, NameLike};
use blend_rs::blender3_2::{PackedFile};

let blend_data = std::fs::read("examples/example-3.2.blend")
    .expect("file 'examples/example-3.2.blend' should exist and be readable");

let reader = read(&blend_data)
    .expect("Blender file should be parsable");

let packed_file: &PackedFile = reader.iter::<PackedFile>()
   .expect("Blender file should contains PackedFiles")
   .first()
   .expect("Blender file should contain at least one PackedFiles");

let magic_number = reader.deref_raw_range(&packed_file.data, 0..4 as usize)
    .expect("a range of raw data of the PackedFile");
Source

pub fn traverse_double_linked<PD, D, PT>( &self, pointer: &PD, ) -> Result<DoubleLinkedIter<'_, D, PT>, ReadError>
where PD: PointerLike<D>, D: 'a + DoubleLinked<PT> + GeneratedBlendStruct + PointerTarget<D>, PT: PointerLike<D>,

Auto Trait Implementations§

§

impl<'a> Freeze for Reader<'a>

§

impl<'a> RefUnwindSafe for Reader<'a>

§

impl<'a> Send for Reader<'a>

§

impl<'a> Sync for Reader<'a>

§

impl<'a> Unpin for Reader<'a>

§

impl<'a> UnwindSafe for Reader<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.