1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
use crate::types::*; use std::convert::TryInto; #[derive(Debug)] pub struct Row { attributes: BoltMap, } #[derive(Debug)] pub struct Node { inner: BoltNode, } #[derive(Debug)] pub struct Relation { inner: BoltRelation, } impl Row { pub fn new(fields: BoltList, data: BoltList) -> Self { let mut attributes = BoltMap::with_capacity(fields.len()); for (field, value) in fields.into_iter().zip(data.into_iter()) { if let Ok(key) = field.try_into() { attributes.put(key, value); } } Row { attributes } } pub fn get<T: std::convert::TryFrom<BoltType>>(&self, key: &str) -> Option<T> { self.attributes.get(key) } } impl Node { pub fn new(inner: BoltNode) -> Self { Node { inner } } pub fn id(&self) -> i64 { self.inner.id.value } pub fn labels(&self) -> Vec<String> { self.inner.labels.iter().map(|l| l.to_string()).collect() } pub fn get<T: std::convert::TryFrom<BoltType>>(&self, key: &str) -> Option<T> { self.inner.get(key) } } impl Relation { pub fn new(inner: BoltRelation) -> Self { Relation { inner } } pub fn id(&self) -> i64 { self.inner.id.value } pub fn start_node_id(&self) -> i64 { self.inner.start_node_id.value } pub fn end_node_id(&self) -> i64 { self.inner.end_node_id.value } pub fn typ(&self) -> String { self.inner.typ.value.clone() } pub fn get<T: std::convert::TryFrom<BoltType>>(&self, key: &str) -> Option<T> { self.inner.get(key) } }