Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

serde: serialize dyn Error Values using collect_str #89

Merged
merged 1 commit into from
Mar 8, 2022

Commits on Mar 7, 2022

  1. serde: serialize dyn Error Values using collect_str

    Currently, `valuable-serde` handles `Value::Error` variants incorrectly.
    When `valuable-serde` encounters a `Value::Error`, it returns the error
    immediately as a serialization error:
    https://github.com/tokio-rs/valuable/blob/1fc2ad50fcae7fc0da81dc40a385c235636ba525/valuable-serde/src/lib.rs#L267
    
    This is _not_ correct. If a `serde` serializer returns an error, this
    means something has gone wrong while serializing a value. Returning an
    error makes the serialization fail. However, this is *not* what
    `valuable`'s `Value::Error` means. `Value::Error` represents that we are
    _recording a value which happens to be an `Error`_, not that something
    went wrong _while_ recording the value. This means that `valuable-serde`
    will currently return an `Error` (indicating that serialization failed)
    any time it attempts to record an `Error` value, and serialization will
    fail.
    
    This commit changes `valuable-serde` to record the error using its
    `Display` implementation, using `serde`'s `collect_str` method. Now,
    `Error`s will be serialized by recording their messages as a string,
    rather than causing the serialization to fail.
    
    Using `collect_str` allows the serializer to write the display
    representation to its own internal buffer, rather than having to format
    the error to a temporary `String` beforehand.
    
    Fixes #88
    hawkw committed Mar 7, 2022
    Configuration menu
    Copy the full SHA
    461c3d7 View commit details
    Browse the repository at this point in the history