diff --git a/proto/backend.proto b/proto/backend.proto index bcbad1ba2..5ec8ab440 100644 --- a/proto/backend.proto +++ b/proto/backend.proto @@ -131,6 +131,7 @@ message BackendError { SyncError sync_error = 7; // user interrupted operation Empty interrupted = 8; + string json_error = 9; } } diff --git a/rslib/src/backend/mod.rs b/rslib/src/backend/mod.rs index 4178373db..9dbeea795 100644 --- a/rslib/src/backend/mod.rs +++ b/rslib/src/backend/mod.rs @@ -76,6 +76,7 @@ fn anki_error_to_proto_error(err: AnkiError, i18n: &I18n) -> pb::BackendError { AnkiError::CollectionNotOpen => V::InvalidInput(pb::Empty {}), AnkiError::CollectionAlreadyOpen => V::InvalidInput(pb::Empty {}), AnkiError::SchemaChange => V::InvalidInput(pb::Empty {}), + AnkiError::JSONError { info } => V::JsonError(info), }; pb::BackendError { diff --git a/rslib/src/err.rs b/rslib/src/err.rs index 0f57259be..96c9b3b83 100644 --- a/rslib/src/err.rs +++ b/rslib/src/err.rs @@ -31,6 +31,9 @@ pub enum AnkiError { #[fail(display = "Sync error: {:?}, {}", kind, info)] SyncError { info: String, kind: SyncErrorKind }, + #[fail(display = "JSON encode/decode error: {}", info)] + JSONError { info: String }, + #[fail(display = "The user interrupted the operation.")] Interrupted, @@ -223,7 +226,9 @@ impl From for AnkiError { impl From for AnkiError { fn from(err: serde_json::Error) -> Self { - AnkiError::sync_misc(err.to_string()) + AnkiError::JSONError { + info: err.to_string(), + } } }