summaryrefslogtreecommitdiffstats
path: root/vendor/basic-toml/src/error.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:20:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:20:39 +0000
commit1376c5a617be5c25655d0d7cb63e3beaa5a6e026 (patch)
tree3bb8d61aee02bc7a15eab3f36e3b921afc2075d0 /vendor/basic-toml/src/error.rs
parentReleasing progress-linux version 1.69.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-1376c5a617be5c25655d0d7cb63e3beaa5a6e026.tar.xz
rustc-1376c5a617be5c25655d0d7cb63e3beaa5a6e026.zip
Merging upstream version 1.70.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/basic-toml/src/error.rs')
-rw-r--r--vendor/basic-toml/src/error.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/vendor/basic-toml/src/error.rs b/vendor/basic-toml/src/error.rs
new file mode 100644
index 000000000..9abfd53e8
--- /dev/null
+++ b/vendor/basic-toml/src/error.rs
@@ -0,0 +1,54 @@
+use std::fmt::{self, Debug, Display};
+
+/// Errors that can occur when serializing or deserializing TOML.
+pub struct Error(Box<ErrorInner>);
+
+pub(crate) enum ErrorInner {
+ Ser(crate::ser::Error),
+ De(crate::de::Error),
+}
+
+impl Error {
+ /// Produces a (line, column) pair of the position of the error if
+ /// available.
+ ///
+ /// All indexes are 0-based.
+ pub fn line_col(&self) -> Option<(usize, usize)> {
+ match &*self.0 {
+ ErrorInner::Ser(_) => None,
+ ErrorInner::De(error) => error.line_col(),
+ }
+ }
+}
+
+impl From<crate::ser::Error> for Error {
+ fn from(error: crate::ser::Error) -> Self {
+ Error(Box::new(ErrorInner::Ser(error)))
+ }
+}
+
+impl From<crate::de::Error> for Error {
+ fn from(error: crate::de::Error) -> Self {
+ Error(Box::new(ErrorInner::De(error)))
+ }
+}
+
+impl Display for Error {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ match &*self.0 {
+ ErrorInner::Ser(error) => Display::fmt(error, formatter),
+ ErrorInner::De(error) => Display::fmt(error, formatter),
+ }
+ }
+}
+
+impl Debug for Error {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ match &*self.0 {
+ ErrorInner::Ser(error) => Debug::fmt(error, formatter),
+ ErrorInner::De(error) => Debug::fmt(error, formatter),
+ }
+ }
+}
+
+impl std::error::Error for Error {}