author | Rapha?l Gom?s <rgomes@octobus.net> |
Fri, 17 May 2019 09:36:29 -0400 | |
changeset 42328 | 94f3a73b6672 |
parent 41349 | ee943a920606 |
child 42557 | d26e4a434fe5 |
permissions | -rw-r--r-- |
41184
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
1 |
// ancestors.rs |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
2 |
// |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
3 |
// Copyright 2018 Georges Racinet <gracinet@anybox.fr> |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
4 |
// |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
5 |
// This software may be used and distributed according to the terms of the |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
6 |
// GNU General Public License version 2 or any later version. |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
7 |
|
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
8 |
//! Bindings for Rust errors |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
9 |
//! |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
10 |
//! [`GraphError`] exposes `hg::GraphError` as a subclass of `ValueError` |
41349
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
11 |
//! but some variants of `hg::GraphError` can be converted directly to other |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
12 |
//! existing Python exceptions if appropriate. |
41184
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
13 |
//! |
dcf818267bc1
rust-cpython: rustdoc improvements
Georges Racinet <georges.racinet@octobus.net>
parents:
40965
diff
changeset
|
14 |
//! [`GraphError`]: struct.GraphError.html |
42328
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
15 |
use cpython::exc::{ValueError, RuntimeError}; |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
16 |
use cpython::{PyErr, Python, exc}; |
40965
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
17 |
use hg; |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
18 |
|
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
19 |
py_exception!(rustext, GraphError, ValueError); |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
20 |
|
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
21 |
impl GraphError { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
22 |
pub fn pynew(py: Python, inner: hg::GraphError) -> PyErr { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
23 |
match inner { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
24 |
hg::GraphError::ParentOutOfRange(r) => { |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
25 |
GraphError::new(py, ("ParentOutOfRange", r)) |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
26 |
} |
41349
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
27 |
hg::GraphError::WorkingDirectoryUnsupported => { |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
28 |
match py |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
29 |
.import("mercurial.error") |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
30 |
.and_then(|m| m.get(py, "WdirUnsupported")) |
42328
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
31 |
{ |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
32 |
Err(e) => e, |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
33 |
Ok(cls) => PyErr::from_instance(py, cls), |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
34 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
35 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
36 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
37 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
38 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
39 |
|
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
40 |
py_exception!(rustext, PatternError, RuntimeError); |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
41 |
py_exception!(rustext, PatternFileError, RuntimeError); |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
42 |
|
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
43 |
impl PatternError { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
44 |
pub fn pynew(py: Python, inner: hg::PatternError) -> PyErr { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
45 |
match inner { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
46 |
hg::PatternError::UnsupportedSyntax(m) => { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
47 |
PatternError::new(py, ("PatternError", m)) |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
48 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
49 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
50 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
51 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
52 |
|
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
53 |
|
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
54 |
impl PatternFileError { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
55 |
pub fn pynew(py: Python, inner: hg::PatternFileError) -> PyErr { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
56 |
match inner { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
57 |
hg::PatternFileError::IO(e) => { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
58 |
let value = ( |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
59 |
e.raw_os_error().unwrap_or(2), |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
60 |
e.to_string() |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
61 |
); |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
62 |
PyErr::new::<exc::IOError, _>(py, value) |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
63 |
} |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
64 |
hg::PatternFileError::Pattern(e, l) => { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
65 |
match e { |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
66 |
hg::PatternError::UnsupportedSyntax(m) => |
94f3a73b6672
rust-filepatterns: add `rust-cpython` bindings for `filepatterns`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
41349
diff
changeset
|
67 |
PatternFileError::new(py, ("PatternFileError", m, l)) |
41349
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
68 |
} |
ee943a920606
rust: error for WdirUnsupported with cpython conversion as exception
Georges Racinet <georges.racinet@octobus.net>
parents:
41184
diff
changeset
|
69 |
} |
40965
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
70 |
} |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
71 |
} |
5532823e8c18
rust-cpython: start cpython crate bindings
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
72 |
} |