gremlin_client/process/traversal/
mod.rs1use crate::conversion::FromGValue;
2use crate::structure::Traverser;
3use crate::GResultSet;
4use crate::GremlinResult;
5use std::marker::PhantomData;
6
7mod anonymous_traversal_source;
8mod builder;
9mod bytecode;
10mod graph_traversal;
11mod graph_traversal_source;
12mod order;
13pub(crate) mod remote;
14mod scope;
15mod step;
16mod strategies;
17pub use order::Order;
18pub use remote::{traversal, SyncTerminator, Terminator};
19
20pub use builder::TraversalBuilder;
21pub use bytecode::{Bytecode, WRITE_OPERATORS};
22pub use graph_traversal::GraphTraversal;
23pub use graph_traversal_source::GraphTraversalSource;
24pub use scope::Scope;
25
26pub use anonymous_traversal_source::AnonymousTraversalSource;
27
28use lazy_static::lazy_static;
29
30pub use step::*;
31
32pub trait Traversal<S, E> {
33 fn bytecode(&self) -> &Bytecode;
34}
35
36pub struct RemoteTraversalIterator<T: FromGValue> {
37 data: PhantomData<T>,
38 result: GResultSet,
39}
40
41impl<T: FromGValue> RemoteTraversalIterator<T> {
42 pub fn new(result: GResultSet) -> RemoteTraversalIterator<T> {
43 RemoteTraversalIterator {
44 result,
45 data: PhantomData,
46 }
47 }
48}
49
50impl<T: FromGValue> Iterator for RemoteTraversalIterator<T> {
51 type Item = GremlinResult<T>;
52
53 fn next(&mut self) -> Option<Self::Item> {
55 self.result
56 .next()
57 .map(|e| e.unwrap().take::<Traverser>())
58 .map(|t| t.unwrap().take::<T>())
59 }
60}
61
62lazy_static! {
63 pub static ref __: AnonymousTraversalSource = AnonymousTraversalSource::new();
64}