gremlin_client/process/traversal/
mod.rs

1use 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    // todo remove unwrap
54    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}