gremlin_client/structure/
result.rs1use crate::message::Response;
2use crate::pool::GremlinConnectionManager;
3use crate::structure::GValue;
4use crate::{GremlinClient, GremlinResult};
5use r2d2::PooledConnection;
6use std::collections::VecDeque;
7
8#[derive(Debug)]
9pub struct GResultSet {
10 client: GremlinClient,
11 results: VecDeque<GValue>,
12 response: Response,
13 conn: PooledConnection<GremlinConnectionManager>,
14}
15
16impl GResultSet {
17 pub(crate) fn new(
18 client: GremlinClient,
19 results: VecDeque<GValue>,
20 response: Response,
21 conn: PooledConnection<GremlinConnectionManager>,
22 ) -> GResultSet {
23 GResultSet {
24 client,
25 results,
26 response,
27 conn,
28 }
29 }
30
31 fn fetch(&mut self) -> GremlinResult<()> {
32 if self.results.is_empty() && self.response.status.code == 206 {
33 let (response, resuts) = self.client.read_response(&mut self.conn)?;
34 self.response = response;
35 self.results = resuts;
36 }
37 Ok(())
38 }
39}
40
41impl Iterator for GResultSet {
42 type Item = GremlinResult<GValue>;
43
44 fn next(&mut self) -> Option<Self::Item> {
45 match self.fetch() {
46 Ok(_) => self.results.pop_front().map(Ok),
47 Err(e) => Some(Err(e)),
48 }
49 }
50}