Struct Visitor

Source
pub struct Visitor {
    pub blackboard: Blackboard,
    pub flags: VisitorFlags,
    /* private fields */
}
Expand description

A collection of nodes that stores data that can be read or write values of types with the Visit trait.

Instead of calling methods of the visitor in order to read or write the visitor’s data, reading and writing happens in the Visit::visit method of a variable that will either store the read value or holds the value to be written.

For example, x.visit("MyValue", &mut visitor) will do one of:

  1. Take the value of x and store it in visitor under the name “MyValue”, if visitor.is_reading() is false.
  2. Read a value named “MyValue” from visitor and store it in x, if visitor.is_reading() is true.

Whether the value of x gets written into visitor or overwitten with a value from visitor is determined by whether Visitor::is_reading() returns true or false.

Fields§

§blackboard: Blackboard

A place to store whatever objects may be needed to assist with reading and writing values.

§flags: VisitorFlags

Flags that can activate special behaviour in some Visit values, such as crate::variable::InheritableVariable.

Implementations§

Source§

impl Visitor

Source

pub const MAGIC: &'static str = "RG3D"

Sequence of bytes that is automatically written at the start when a visitor is encoded into bytes. It is written by Visitor::save_binary, Visitor::save_binary_to_memory, and Visitor::save_binary_to_vec.

Visitor::load_binary will return an error if this sequence of bytes is not present at the beginning of the file, and Visitor::load_from_memory will return an error of these bytes are not at the beginning of the given slice.

Source

pub fn new() -> Visitor

Creates a Visitor containing only a single node called “__ROOT__” which will be the current region of the visitor.

Source

pub fn is_reading(&self) -> bool

True if this Visitor is changing the values that it visits. In other words x.visit("MyValue", &mut visitor) will result in x being mutated to match whatever value is stored in visitor.

False if this visitor is copying and storing the values that it visits. In other words x.visit("MyValue", &mut visitor) will result in x being unchanged, but visitor will be mutated to store the value of x under the name “MyValue”.

Source

pub fn enter_region( &mut self, name: &str, ) -> Result<RegionGuard<'_>, VisitError>

If Visitor::is_reading, find a node with the given name that is a child of the current node, and return a Visitor for the found node. Return an error if no node with that name exists.

If not reading, create a node with the given name as a chld of the current node, and return a visitor for the new node. Return an error if a node with that name already exists.

Source

pub fn current_region(&self) -> Option<&str>

The name of the current region. This should never be None if the Visitor is operating normally, because there should be no way to leave the initial __ROOT__ region.

Source

pub fn save_text(&self) -> String

Create a String containing all the data of this Visitor. The String is formatted to be human-readable with each node on its own line and tabs to indent child nodes.

Source

pub fn save_binary_to_memory<W>(&self, writer: W) -> Result<(), VisitError>
where W: Write,

Write the data of this Visitor to the given writer. Begin by writing Visitor::MAGIC.

Source

pub fn save_binary_to_vec(&self) -> Result<Vec<u8>, VisitError>

Encode the data of this visitor into bytes and push the bytes into the given Vec<u8>. Begin by writing Visitor::MAGIC.

Source

pub fn save_binary<P>(&self, path: P) -> Result<(), VisitError>
where P: AsRef<Path>,

Create a file at the given path and write the data of this visitor into that file in a non-human-readable binary format so that the data can be reconstructed using Visitor::load_binary. Begin by writing Visitor::MAGIC.

Source

pub async fn load_binary<P>(path: P) -> Result<Visitor, VisitError>
where P: AsRef<Path>,

Create a visitor by reading data from the file at the given path, assuming that the file was created using Visitor::save_binary. Return a VisitError::NotSupportedFormat if Visitor::MAGIC is not the first bytes read from the file.

Source

pub fn load_from_memory(data: &[u8]) -> Result<Visitor, VisitError>

Create a visitor by decoding data from the given byte slice, assuming that the bytes are in the format that would be produced by Visitor::save_binary_to_vec. Return a VisitError::NotSupportedFormat if Visitor::MAGIC is not the first bytes read from the slice.

Trait Implementations§

Source§

impl Default for Visitor

Source§

fn default() -> Visitor

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl Freeze for Visitor

§

impl !RefUnwindSafe for Visitor

§

impl !Send for Visitor

§

impl !Sync for Visitor

§

impl Unpin for Visitor

§

impl !UnwindSafe for Visitor

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts self reference as a reference to Any. Could be used to downcast a trait object to a particular type.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts self reference as a reference to Any. Could be used to downcast a trait object to a particular type.
Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Source§

impl<T> FieldValue for T
where T: 'static,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Casts self to a &dyn Any
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more