| 715 | } |
| 716 | |
| 717 | fn execute(&mut self, op: CatalogOperation) -> CatalogResult<CatalogResponse> { |
| 718 | match op { |
| 719 | CatalogOperation::Create { |
| 720 | entity_type, |
| 721 | name, |
| 722 | params, |
| 723 | } => match entity_type { |
| 724 | EntityType::Graph => { |
| 725 | let graph = Graph::from_params(name.clone(), ¶ms); |
| 726 | self.add_graph(graph)?; |
| 727 | Ok(CatalogResponse::Success { |
| 728 | data: Some(json!({ "message": format!("Graph '{}' created", name) })), |
| 729 | }) |
| 730 | } |
| 731 | EntityType::GraphType => { |
| 732 | let graph_type = GraphType::from_params(name.clone(), ¶ms); |
| 733 | self.add_graph_type(graph_type)?; |
| 734 | Ok(CatalogResponse::Success { |
| 735 | data: Some(json!({ "message": format!("Graph type '{}' created", name) })), |
| 736 | }) |
| 737 | } |
| 738 | EntityType::VertexType => { |
| 739 | let graph_type_name = params |
| 740 | .get("graph_type") |
| 741 | .and_then(|v| v.as_str()) |
| 742 | .ok_or_else(|| { |
| 743 | CatalogError::InvalidParameters( |
| 744 | "Missing 'graph_type' parameter".to_string(), |
| 745 | ) |
| 746 | })?; |
| 747 | |
| 748 | let vertex_type = serde_json::from_value::<VertexType>(params.clone()) |
| 749 | .map_err(|e| CatalogError::InvalidParameters(e.to_string()))?; |
| 750 | |
| 751 | self.add_vertex_type_to_graph_type(graph_type_name, vertex_type)?; |
| 752 | Ok(CatalogResponse::Success { |
| 753 | data: Some( |
| 754 | json!({ "message": format!("Vertex type '{}' added to graph type '{}'", name, graph_type_name) }), |
| 755 | ), |
| 756 | }) |
| 757 | } |
| 758 | EntityType::EdgeType => { |
| 759 | let graph_type_name = params |
| 760 | .get("graph_type") |
| 761 | .and_then(|v| v.as_str()) |
| 762 | .ok_or_else(|| { |
| 763 | CatalogError::InvalidParameters( |
| 764 | "Missing 'graph_type' parameter".to_string(), |
| 765 | ) |
| 766 | })?; |
| 767 | |
| 768 | let edge_type = serde_json::from_value::<EdgeType>(params.clone()) |
| 769 | .map_err(|e| CatalogError::InvalidParameters(e.to_string()))?; |
| 770 | |
| 771 | self.add_edge_type_to_graph_type(graph_type_name, edge_type)?; |
| 772 | Ok(CatalogResponse::Success { |
| 773 | data: Some( |
| 774 | json!({ "message": format!("Edge type '{}' added to graph type '{}'", name, graph_type_name) }), |