aboutsummaryrefslogtreecommitdiff
path: root/src/edit.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/edit.rs')
-rw-r--r--src/edit.rs91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/edit.rs b/src/edit.rs
new file mode 100644
index 0000000..90fb284
--- /dev/null
+++ b/src/edit.rs
@@ -0,0 +1,91 @@
+#[cfg(feature = "parse")]
+pub(crate) mod de {
+ pub(crate) use toml_edit::de::Error;
+}
+
+#[cfg(not(feature = "parse"))]
+pub(crate) mod de {
+ /// Errors that can occur when deserializing a type.
+ #[derive(Debug, Clone, PartialEq, Eq)]
+ pub struct Error {
+ inner: String,
+ }
+
+ impl Error {
+ /// Add key while unwinding
+ pub fn add_key(&mut self, _key: String) {}
+
+ /// What went wrong
+ pub fn message(&self) -> &str {
+ self.inner.as_str()
+ }
+ }
+
+ impl serde::de::Error for Error {
+ fn custom<T>(msg: T) -> Self
+ where
+ T: std::fmt::Display,
+ {
+ Error {
+ inner: msg.to_string(),
+ }
+ }
+ }
+
+ impl std::fmt::Display for Error {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ self.inner.fmt(f)
+ }
+ }
+
+ impl std::error::Error for Error {}
+}
+
+#[cfg(feature = "display")]
+pub(crate) mod ser {
+ pub(crate) use toml_edit::ser::Error;
+}
+
+#[cfg(not(feature = "display"))]
+pub(crate) mod ser {
+ #[derive(Debug, Clone, PartialEq, Eq)]
+ #[non_exhaustive]
+ pub(crate) enum Error {
+ UnsupportedType(Option<&'static str>),
+ UnsupportedNone,
+ KeyNotString,
+ Custom(String),
+ }
+
+ impl Error {
+ pub(crate) fn custom<T>(msg: T) -> Self
+ where
+ T: std::fmt::Display,
+ {
+ Error::Custom(msg.to_string())
+ }
+ }
+
+ impl serde::ser::Error for Error {
+ fn custom<T>(msg: T) -> Self
+ where
+ T: std::fmt::Display,
+ {
+ Self::custom(msg)
+ }
+ }
+
+ impl std::fmt::Display for Error {
+ fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ match self {
+ Self::UnsupportedType(Some(t)) => write!(formatter, "unsupported {t} type"),
+ Self::UnsupportedType(None) => write!(formatter, "unsupported rust type"),
+ Self::UnsupportedNone => "unsupported None value".fmt(formatter),
+ Self::KeyNotString => "map key was not a string".fmt(formatter),
+ Self::Custom(s) => s.fmt(formatter),
+ }
+ }
+ }
+
+ impl std::error::Error for Error {}
+}