Files
lighthouse/consensus/context_deserialize_derive/tests/context_deserialize_derive.rs
ethDreamer 7684d1f866 ContextDeserialize and Beacon API Improvements (#7372)
* #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.
2025-05-19 05:05:16 +00:00

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);
}