mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-06 18:21:45 +00:00
* #7286 * BeaconAPI is not returning a versioned response when it should for some V1 endpoints * these [strange functions with vX in the name that still accept `endpoint_version` arguments](https://github.com/sigp/lighthouse/blob/stable/beacon_node/http_api/src/produce_block.rs#L192) This refactor is a prerequisite to get the fulu EF tests running.
95 lines
2.4 KiB
Rust
95 lines
2.4 KiB
Rust
use context_deserialize::ContextDeserialize;
|
|
use context_deserialize_derive::context_deserialize;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[test]
|
|
fn test_context_deserialize_derive() {
|
|
type TestContext = ();
|
|
|
|
#[context_deserialize(TestContext)]
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
struct Test {
|
|
field: String,
|
|
}
|
|
|
|
let test = Test {
|
|
field: "test".to_string(),
|
|
};
|
|
let serialized = serde_json::to_string(&test).unwrap();
|
|
let deserialized =
|
|
Test::context_deserialize(&mut serde_json::Deserializer::from_str(&serialized), ())
|
|
.unwrap();
|
|
assert_eq!(test, deserialized);
|
|
}
|
|
|
|
#[test]
|
|
fn test_context_deserialize_derive_multiple_types() {
|
|
#[allow(dead_code)]
|
|
struct TestContext1(u64);
|
|
#[allow(dead_code)]
|
|
struct TestContext2(String);
|
|
|
|
// This will derive:
|
|
// - ContextDeserialize<TestContext1> for Test
|
|
// - ContextDeserialize<TestContext2> for Test
|
|
// by just leveraging the Deserialize impl
|
|
#[context_deserialize(TestContext1, TestContext2)]
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
struct Test {
|
|
field: String,
|
|
}
|
|
|
|
let test = Test {
|
|
field: "test".to_string(),
|
|
};
|
|
let serialized = serde_json::to_string(&test).unwrap();
|
|
let deserialized = Test::context_deserialize(
|
|
&mut serde_json::Deserializer::from_str(&serialized),
|
|
TestContext1(1),
|
|
)
|
|
.unwrap();
|
|
assert_eq!(test, deserialized);
|
|
|
|
let deserialized = Test::context_deserialize(
|
|
&mut serde_json::Deserializer::from_str(&serialized),
|
|
TestContext2("2".to_string()),
|
|
)
|
|
.unwrap();
|
|
|
|
assert_eq!(test, deserialized);
|
|
}
|
|
|
|
#[test]
|
|
fn test_context_deserialize_derive_bound() {
|
|
use std::fmt::Debug;
|
|
|
|
struct TestContext;
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
struct Inner {
|
|
value: u64,
|
|
}
|
|
|
|
#[context_deserialize(
|
|
TestContext,
|
|
bound = "T: Serialize + for<'a> Deserialize<'a> + Debug + PartialEq"
|
|
)]
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
struct Wrapper<T> {
|
|
inner: T,
|
|
}
|
|
|
|
let val = Wrapper {
|
|
inner: Inner { value: 42 },
|
|
};
|
|
|
|
let serialized = serde_json::to_string(&val).unwrap();
|
|
let deserialized = Wrapper::<Inner>::context_deserialize(
|
|
&mut serde_json::Deserializer::from_str(&serialized),
|
|
TestContext,
|
|
)
|
|
.unwrap();
|
|
|
|
assert_eq!(val, deserialized);
|
|
}
|