fn process_line()

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,
        }))
    }