in src/dachshund/typed_graph_line_processor.rs [40:83]
fn process_line(&self, line: String) -> CLQResult<Box<dyn Row>> {
let vec: Vec<&str> = line.split('\t').collect();
// this is an edge row if we have something on column 3
assert!(vec.len() == 6);
let is_edge_row: bool = !vec[3].is_empty();
if is_edge_row {
let graph_id: GraphId = vec[0].parse::<i64>()?.into();
let core_id: NodeId = vec[1].parse::<i64>()?.into();
let non_core_id: NodeId = vec[2].parse::<i64>()?.into();
let edge_type: &str = vec[4].trim_end();
let non_core_type: &str = vec[5].trim_end();
let non_core_type_id: NodeTypeId = *self.non_core_type_ids.require(non_core_type)?;
let edge_type_id: EdgeTypeId = self
.edge_types
.iter()
.position(|r| r == edge_type)
.ok_or_else(CLQError::err_none)?
.into();
let core_type_id: NodeTypeId = *self.non_core_type_ids.require(&self.core_type)?;
return Ok(Box::new(EdgeRow {
graph_id,
source_id: core_id,
target_id: non_core_id,
source_type_id: core_type_id,
target_type_id: non_core_type_id,
edge_type_id,
}));
}
let graph_id: GraphId = vec[0].parse::<i64>()?.into();
let node_id: NodeId = vec[1].parse::<i64>()?.into();
let node_type: &str = vec[2].trim_end();
let non_core_type: Option<NodeTypeId>;
if node_type == self.core_type {
non_core_type = None;
} else {
let non_core_type_id: NodeTypeId = *self.non_core_type_ids.require(node_type)?;
non_core_type = Some(non_core_type_id);
}
Ok(Box::new(CliqueRow {
graph_id,
node_id,
target_type: non_core_type,
}))
}