Struct depends::InputNode

source ·
pub struct InputNode<T> { /* private fields */ }
Expand description

Input Node

Input Nodes are the leaves of the graph. They wrap a value of some type T and provide a public interface to mutate it.

UpdateInput

To construct an input node, the value must implement the UpdateInput trait. This specifies the type of the update and how it affects the wrapped value.

Updating values

InputNode uses interior mutability to allow the wrapped value to be updated with a shared reference.

To update the value, use update. A node which can update values from outside of the graph via update.

#[derive(Value, Hash)]
struct MyType {
    inner: String,
}

impl UpdateInput for MyType {
    type Update = String;

    fn update_mut(&mut self, update: Self::Update) {
        self.inner.extend(update.chars());
    }
}

// Create an input node.
let input = InputNode::new(MyType {
    inner: "Hello, ".to_string(),
});

// Update the internal value. This will fail if the node is currently
// being written to.
input.update("world!".to_string()).unwrap();

assert_eq!(input.value().unwrap().inner, "Hello, world!");

Implementations§

source§

impl<T> InputNode<T>
where T: UpdateInput,

source

pub fn new(value: T) -> Rc<Self>

Wrap this leaf in a node.

source

pub fn new_with_id(value: T, id: usize) -> Rc<Self>

Create this node with a specified Id. Useful for tests.

source

pub fn update(&self, input: T::Update) -> ResolveResult<()>

The public interface to provide data to mutate the inner value via a shared reference.

source

pub fn value(&self) -> Result<Ref<'_, NodeState<T>>, BorrowError>

Access the inner value.

Trait Implementations§

source§

impl<T: Debug> Debug for InputNode<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: Named> Identifiable for InputNode<T>

source§

fn id(&self) -> usize

source§

impl<T: Named> Named for InputNode<T>

source§

fn name() -> &'static str

source§

impl<T> Resolve for InputNode<T>
where T: UpdateInput,

§

type Output<'a> = Ref<'a, NodeState<T>> where Self: 'a

source§

fn resolve(&self, visitor: &mut impl Visitor) -> ResolveResult<Self::Output<'_>>

You’re probably looking for resolve_root. This is recursively called on each node when a graph is being resolved. Read more
source§

fn resolve_root( &self, visitor: &mut impl Visitor ) -> ResolveResult<Self::Output<'_>>

Pass a Visitor through this node, resolve the latest version of all dependencies, reset the visitor and return this node’s output.

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for InputNode<T>

§

impl<T> Send for InputNode<T>
where T: Send,

§

impl<T> !Sync for InputNode<T>

§

impl<T> Unpin for InputNode<T>
where T: Unpin,

§

impl<T> UnwindSafe for InputNode<T>
where T: UnwindSafe,

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>,

§

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>,

§

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.