pub struct Error { /* private fields */ }
Expand description
This type represents all possible errors that can occur when serializing or deserializing JSON data.
Implementations§
Source§impl Error
impl Error
Sourcepub fn line(&self) -> usize
pub fn line(&self) -> usize
One-based line number at which the error was detected.
Characters in the first line of the input (before the first newline character) are in line 1.
Sourcepub fn column(&self) -> usize
pub fn column(&self) -> usize
One-based column number at which the error was detected.
The first character in the input and any characters immediately following a newline character are in column 1.
Note that errors may occur in column 0, for example if a read from an I/O stream fails immediately following a previously read newline character.
Sourcepub fn classify(&self) -> Category
pub fn classify(&self) -> Category
Categorizes the cause of this error.
Category::Io
- failure to read or write bytes on an I/O streamCategory::Syntax
- input that is not syntactically valid JSONCategory::Data
- input data that is semantically incorrectCategory::Eof
- unexpected end of the input data
Sourcepub fn is_io(&self) -> bool
pub fn is_io(&self) -> bool
Returns true if this error was caused by a failure to read or write bytes on an I/O stream.
Sourcepub fn is_syntax(&self) -> bool
pub fn is_syntax(&self) -> bool
Returns true if this error was caused by input that was not syntactically valid JSON.
Sourcepub fn is_data(&self) -> bool
pub fn is_data(&self) -> bool
Returns true if this error was caused by input data that was semantically incorrect.
For example, JSON containing a number is semantically incorrect when the type being deserialized into holds a String.
Sourcepub fn is_eof(&self) -> bool
pub fn is_eof(&self) -> bool
Returns true if this error was caused by prematurely reaching the end of the input data.
Callers that process streaming input may be interested in retrying the deserialization once more data is available.
Sourcepub fn io_error_kind(&self) -> Option<ErrorKind>
pub fn io_error_kind(&self) -> Option<ErrorKind>
The kind reported by the underlying standard library I/O error, if this error was caused by a failure to read or write bytes on an I/O stream.
§Example
use serde_json::Value;
use std::io::{self, ErrorKind, Read};
use std::process;
struct ReaderThatWillTimeOut<'a>(&'a [u8]);
impl<'a> Read for ReaderThatWillTimeOut<'a> {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
if self.0.is_empty() {
Err(io::Error::new(ErrorKind::TimedOut, "timed out"))
} else {
self.0.read(buf)
}
}
}
fn main() {
let reader = ReaderThatWillTimeOut(br#" {"k": "#);
let _: Value = match serde_json::from_reader(reader) {
Ok(value) => value,
Err(error) => {
if error.io_error_kind() == Some(ErrorKind::TimedOut) {
// Maybe this application needs to retry certain kinds of errors.
} else {
eprintln!("error: {}", error);
process::exit(1);
}
}
};
}
Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Source§impl Error for Error
impl Error for Error
Source§fn custom<T>(msg: T) -> Errorwhere
T: Display,
fn custom<T>(msg: T) -> Errorwhere
T: Display,
Source§fn invalid_type(unexp: Unexpected<'_>, exp: &dyn Expected) -> Error
fn invalid_type(unexp: Unexpected<'_>, exp: &dyn Expected) -> Error
Deserialize
receives a type different from what it was
expecting. Read moreSource§fn invalid_value(unexp: Unexpected<'_>, exp: &dyn Expected) -> Error
fn invalid_value(unexp: Unexpected<'_>, exp: &dyn Expected) -> Error
Deserialize
receives a value of the right type but that
is wrong for some other reason. Read moreSource§fn invalid_length(len: usize, exp: &dyn Expected) -> Self
fn invalid_length(len: usize, exp: &dyn Expected) -> Self
Source§fn unknown_variant(variant: &str, expected: &'static [&'static str]) -> Self
fn unknown_variant(variant: &str, expected: &'static [&'static str]) -> Self
Deserialize
enum type received a variant with an
unrecognized name.Source§fn unknown_field(field: &str, expected: &'static [&'static str]) -> Self
fn unknown_field(field: &str, expected: &'static [&'static str]) -> Self
Deserialize
struct type received a field with an
unrecognized name.Source§fn missing_field(field: &'static str) -> Self
fn missing_field(field: &'static str) -> Self
Deserialize
struct type expected to receive a required
field with a particular name but that field was not present in the
input.Source§fn duplicate_field(field: &'static str) -> Self
fn duplicate_field(field: &'static str) -> Self
Deserialize
struct type received more than one of the
same field.Source§impl From<Error> for Error
impl From<Error> for Error
Source§fn from(j: Error) -> Error
fn from(j: Error) -> Error
Convert a serde_json::Error
into an io::Error
.
JSON syntax and data errors are turned into InvalidData
I/O errors.
EOF errors are turned into UnexpectedEof
I/O errors.
use std::io;
enum MyError {
Io(io::Error),
Json(serde_json::Error),
}
impl From<serde_json::Error> for MyError {
fn from(err: serde_json::Error) -> MyError {
use serde_json::error::Category;
match err.classify() {
Category::Io => {
MyError::Io(err.into())
}
Category::Syntax | Category::Data | Category::Eof => {
MyError::Json(err)
}
}
}
}
Source§impl From<Error> for RenderErrorReason
impl From<Error> for RenderErrorReason
Source§fn from(source: Error) -> RenderErrorReason
fn from(source: Error) -> RenderErrorReason
Source§impl<'de> IntoDeserializer<'de, Error> for &'de Map<String, Value>
impl<'de> IntoDeserializer<'de, Error> for &'de Map<String, Value>
Source§type Deserializer = &'de Map<String, Value>
type Deserializer = &'de Map<String, Value>
Source§fn into_deserializer(
self,
) -> <&'de Map<String, Value> as IntoDeserializer<'de, Error>>::Deserializer
fn into_deserializer( self, ) -> <&'de Map<String, Value> as IntoDeserializer<'de, Error>>::Deserializer
Source§impl<'de> IntoDeserializer<'de, Error> for &'de RawValue
impl<'de> IntoDeserializer<'de, Error> for &'de RawValue
Source§type Deserializer = &'de RawValue
type Deserializer = &'de RawValue
Source§fn into_deserializer(
self,
) -> <&'de RawValue as IntoDeserializer<'de, Error>>::Deserializer
fn into_deserializer( self, ) -> <&'de RawValue as IntoDeserializer<'de, Error>>::Deserializer
Source§impl<'de> IntoDeserializer<'de, Error> for &'de Value
impl<'de> IntoDeserializer<'de, Error> for &'de Value
Source§type Deserializer = &'de Value
type Deserializer = &'de Value
Source§fn into_deserializer(
self,
) -> <&'de Value as IntoDeserializer<'de, Error>>::Deserializer
fn into_deserializer( self, ) -> <&'de Value as IntoDeserializer<'de, Error>>::Deserializer
Source§impl<'de> IntoDeserializer<'de, Error> for Map<String, Value>
impl<'de> IntoDeserializer<'de, Error> for Map<String, Value>
Source§fn into_deserializer(
self,
) -> <Map<String, Value> as IntoDeserializer<'de, Error>>::Deserializer
fn into_deserializer( self, ) -> <Map<String, Value> as IntoDeserializer<'de, Error>>::Deserializer
Source§impl<'de> IntoDeserializer<'de, Error> for Value
impl<'de> IntoDeserializer<'de, Error> for Value
Source§type Deserializer = Value
type Deserializer = Value
Source§fn into_deserializer(
self,
) -> <Value as IntoDeserializer<'de, Error>>::Deserializer
fn into_deserializer( self, ) -> <Value as IntoDeserializer<'de, Error>>::Deserializer
Auto Trait Implementations§
impl Freeze for Error
impl !RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl !UnwindSafe for Error
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);