rust/hg-pyo3/src/exceptions.rs
changeset 52412 6e8ba52857df
parent 52408 20c0472b2ab7
child 52531 4c9e31984b3a
--- a/rust/hg-pyo3/src/exceptions.rs	Sat Nov 30 20:57:02 2024 +0100
+++ b/rust/hg-pyo3/src/exceptions.rs	Thu Dec 05 14:36:40 2024 +0100
@@ -1,4 +1,34 @@
-use pyo3::create_exception;
 use pyo3::exceptions::PyValueError;
+use pyo3::import_exception;
+use pyo3::{create_exception, PyErr};
+
+use crate::revision::PyRevision;
 
 create_exception!(pyo3_rustext, GraphError, PyValueError);
+import_exception!(mercurial.error, WdirUnsupported);
+
+impl GraphError {
+    pub fn from_hg(inner: hg::GraphError) -> PyErr {
+        match inner {
+            hg::GraphError::ParentOutOfRange(r) => {
+                GraphError::new_err(("ParentOutOfRange", PyRevision(r.0)))
+            }
+        }
+    }
+    pub fn from_vcsgraph(inner: vcsgraph::graph::GraphReadError) -> PyErr {
+        match inner {
+            vcsgraph::graph::GraphReadError::InconsistentGraphData => {
+                GraphError::new_err("InconsistentGraphData")
+            }
+            vcsgraph::graph::GraphReadError::InvalidKey => {
+                GraphError::new_err("ParentOutOfRange")
+            }
+            vcsgraph::graph::GraphReadError::KeyedInvalidKey(r) => {
+                GraphError::new_err(("ParentOutOfRange", r))
+            }
+            vcsgraph::graph::GraphReadError::WorkingDirectoryUnsupported => {
+                WdirUnsupported::new_err(())
+            }
+        }
+    }
+}