Add serde_utils module with quoted u64 support (#1588)

## Proposed Changes

This is an extraction of the quoted int code from #1569, that I've come to rely on for #1544.

It allows us to parse integers from serde strings in YAML, JSON, etc. The main differences from the code in Paul's original PR are:

* Added a submodule that makes quoting mandatory (`require_quotes`).
* Decoding is generic over the type `T` being decoded. You can use `#[serde(with = "serde_utils::quoted_u64::require_quotes")]` on `Epoch` and `Slot` fields (this is what I do in my slashing protection PR).

I've turned on quoting for `Epoch` and `Slot` in this PR, but will leave the other `types` changes to you Paul.

I opted to put everything in the `conseus/serde_utils` module so that BLS can use it without a circular dependency. In future when we want to publish `types` I think we could publish `serde_utils` as `lighthouse_serde_utils` or something. Open to other ideas on this front too.
This commit is contained in:
Michael Sproul
2020-09-07 01:03:53 +00:00
parent 211109bbc0
commit 74fa87aa98
9 changed files with 236 additions and 3 deletions

10
Cargo.lock generated
View File

@@ -4668,6 +4668,15 @@ dependencies = [
"url 2.1.1",
]
[[package]]
name = "serde_utils"
version = "0.1.0"
dependencies = [
"serde",
"serde_derive",
"serde_json",
]
[[package]]
name = "serde_yaml"
version = "0.8.13"
@@ -5886,6 +5895,7 @@ dependencies = [
"serde",
"serde_derive",
"serde_json",
"serde_utils",
"serde_yaml",
"slog",
"swap_or_not_shuffle",