exceptions.rs
63 lines
| 2.0 KiB
| application/rls-services+xml
|
RustLexer
Georges Racinet
|
r41220 | // ancestors.rs | ||
// | ||||
// Copyright 2018 Georges Racinet <gracinet@anybox.fr> | ||||
// | ||||
// This software may be used and distributed according to the terms of the | ||||
// GNU General Public License version 2 or any later version. | ||||
//! Bindings for Rust errors | ||||
//! | ||||
//! [`GraphError`] exposes `hg::GraphError` as a subclass of `ValueError` | ||||
Georges Racinet
|
r41385 | //! but some variants of `hg::GraphError` can be converted directly to other | ||
//! existing Python exceptions if appropriate. | ||||
Georges Racinet
|
r41220 | //! | ||
//! [`GraphError`]: struct.GraphError.html | ||||
Raphaël Gomès
|
r42828 | use cpython::{ | ||
Raphaël Gomès
|
r44589 | exc::{RuntimeError, ValueError}, | ||
Raphaël Gomès
|
r42828 | py_exception, PyErr, Python, | ||
}; | ||||
Georges Racinet
|
r41001 | use hg; | ||
Raphaël Gomès
|
r51872 | use crate::PyRevision; | ||
Georges Racinet
|
r41001 | py_exception!(rustext, GraphError, ValueError); | ||
impl GraphError { | ||||
pub fn pynew(py: Python, inner: hg::GraphError) -> PyErr { | ||||
match inner { | ||||
hg::GraphError::ParentOutOfRange(r) => { | ||||
Raphaël Gomès
|
r51872 | GraphError::new(py, ("ParentOutOfRange", PyRevision(r.0))) | ||
Georges Racinet
|
r41001 | } | ||
Raphaël Gomès
|
r42515 | } | ||
} | ||||
pacien
|
r49350 | |||
pub fn pynew_from_vcsgraph( | ||||
py: Python, | ||||
inner: vcsgraph::graph::GraphReadError, | ||||
) -> PyErr { | ||||
match inner { | ||||
vcsgraph::graph::GraphReadError::InconsistentGraphData => { | ||||
GraphError::new(py, "InconsistentGraphData") | ||||
} | ||||
vcsgraph::graph::GraphReadError::InvalidKey => { | ||||
GraphError::new(py, "ParentOutOfRange") | ||||
} | ||||
vcsgraph::graph::GraphReadError::KeyedInvalidKey(r) => { | ||||
GraphError::new(py, ("ParentOutOfRange", r)) | ||||
} | ||||
vcsgraph::graph::GraphReadError::WorkingDirectoryUnsupported => { | ||||
match py | ||||
.import("mercurial.error") | ||||
.and_then(|m| m.get(py, "WdirUnsupported")) | ||||
{ | ||||
Err(e) => e, | ||||
Ok(cls) => PyErr::from_instance(py, cls), | ||||
} | ||||
} | ||||
} | ||||
} | ||||
Raphaël Gomès
|
r42515 | } | ||
Raphaël Gomès
|
r43227 | py_exception!(rustext, HgPathPyError, RuntimeError); | ||
Raphaël Gomès
|
r45016 | py_exception!(rustext, FallbackError, RuntimeError); | ||
py_exception!(shared_ref, AlreadyBorrowed, RuntimeError); | ||||