exceptions.rs
71 lines
| 2.2 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::{ | ||
exc::{IOError, RuntimeError, ValueError}, | ||||
py_exception, PyErr, Python, | ||||
}; | ||||
Georges Racinet
|
r41001 | use hg; | ||
py_exception!(rustext, GraphError, ValueError); | ||||
impl GraphError { | ||||
pub fn pynew(py: Python, inner: hg::GraphError) -> PyErr { | ||||
match inner { | ||||
hg::GraphError::ParentOutOfRange(r) => { | ||||
GraphError::new(py, ("ParentOutOfRange", r)) | ||||
} | ||||
Georges Racinet
|
r41385 | hg::GraphError::WorkingDirectoryUnsupported => { | ||
match py | ||||
.import("mercurial.error") | ||||
.and_then(|m| m.get(py, "WdirUnsupported")) | ||||
Raphaël Gomès
|
r42760 | { | ||
Err(e) => e, | ||||
Ok(cls) => PyErr::from_instance(py, cls), | ||||
} | ||||
Raphaël Gomès
|
r42515 | } | ||
} | ||||
} | ||||
} | ||||
py_exception!(rustext, PatternError, RuntimeError); | ||||
py_exception!(rustext, PatternFileError, RuntimeError); | ||||
impl PatternError { | ||||
pub fn pynew(py: Python, inner: hg::PatternError) -> PyErr { | ||||
match inner { | ||||
hg::PatternError::UnsupportedSyntax(m) => { | ||||
PatternError::new(py, ("PatternError", m)) | ||||
} | ||||
} | ||||
} | ||||
} | ||||
impl PatternFileError { | ||||
pub fn pynew(py: Python, inner: hg::PatternFileError) -> PyErr { | ||||
match inner { | ||||
hg::PatternFileError::IO(e) => { | ||||
Raphaël Gomès
|
r42760 | let value = (e.raw_os_error().unwrap_or(2), e.to_string()); | ||
Raphaël Gomès
|
r42828 | PyErr::new::<IOError, _>(py, value) | ||
Raphaël Gomès
|
r42515 | } | ||
Raphaël Gomès
|
r42760 | hg::PatternFileError::Pattern(e, l) => match e { | ||
hg::PatternError::UnsupportedSyntax(m) => { | ||||
PatternFileError::new(py, ("PatternFileError", m, l)) | ||||
Georges Racinet
|
r41385 | } | ||
Raphaël Gomès
|
r42760 | }, | ||
Georges Racinet
|
r41001 | } | ||
} | ||||
} | ||||
Raphaël Gomès
|
r42997 | |||
py_exception!(shared_ref, AlreadyBorrowed, RuntimeError); | ||||