Download node-graph/gstd/src/any.rs from openfree/graphite2: direct link, hf CLI and curl.
- Browser
- Download file 1.4 kB
-
https://huggingface.co/spaces/openfree/graphite2/resolve/main/node-graph/gstd/src/any.rs
- Command line
-
hf download hf://spaces/openfree/graphite2/node-graph/gstd/src/any.rs
-
curl -L -o any.rs https://huggingface.co/spaces/openfree/graphite2/resolve/main/node-graph/gstd/src/any.rs
1.4 kB
| use dyn_any::StaticType; | |
| pub use graph_craft::proto::{Any, NodeContainer, TypeErasedBox, TypeErasedNode}; | |
| use graph_craft::proto::{DynFuture, FutureAny, SharedNodeContainer}; | |
| use graphene_core::NodeIO; | |
| use graphene_core::WasmNotSend; | |
| pub use graphene_core::registry::{DowncastBothNode, DynAnyNode, FutureWrapperNode, PanicNode}; | |
| pub use graphene_core::{Node, generic, ops}; | |
| pub trait IntoTypeErasedNode<'n> { | |
| fn into_type_erased(self) -> TypeErasedBox<'n>; | |
| } | |
| impl<'n, N: 'n> IntoTypeErasedNode<'n> for N | |
| where | |
| N: for<'i> NodeIO<'i, Any<'i>, Output = FutureAny<'i>> + Sync + WasmNotSend, | |
| { | |
| fn into_type_erased(self) -> TypeErasedBox<'n> { | |
| Box::new(self) | |
| } | |
| } | |
| pub struct ComposeTypeErased { | |
| first: SharedNodeContainer, | |
| second: SharedNodeContainer, | |
| } | |
| impl<'i> Node<'i, Any<'i>> for ComposeTypeErased { | |
| type Output = DynFuture<'i, Any<'i>>; | |
| fn eval(&'i self, input: Any<'i>) -> Self::Output { | |
| Box::pin(async move { | |
| let arg = self.first.eval(input).await; | |
| self.second.eval(arg).await | |
| }) | |
| } | |
| } | |
| impl ComposeTypeErased { | |
| pub const fn new(first: SharedNodeContainer, second: SharedNodeContainer) -> Self { | |
| ComposeTypeErased { first, second } | |
| } | |
| } | |
| pub fn input_node<O: StaticType>(n: SharedNodeContainer) -> DowncastBothNode<(), O> { | |
| downcast_node(n) | |
| } | |
| pub fn downcast_node<I: StaticType, O: StaticType>(n: SharedNodeContainer) -> DowncastBothNode<I, O> { | |
| DowncastBothNode::new(n) | |
| } | |