Skip to content
This repository was archived by the owner on Jun 3, 2025. It is now read-only.

Commit f17cd19

Browse files
Well, good thing I gave that a check before releasing Like a madman.
1 parent 7b0621a commit f17cd19

File tree

4 files changed

+72
-17
lines changed

4 files changed

+72
-17
lines changed

Justfile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ check:
1515
popd
1616

1717
pushd merde
18-
EXAMPLES=($(cd examples && for i in *; do echo "${i%.rs}"; done))
18+
EXAMPLES=()
19+
for file in examples/*.rs; do
20+
EXAMPLES+=("$(basename "${file%.rs}")")
21+
done
22+
echo "EXAMPLES: ${EXAMPLES[@]}"
23+
1924
for example in "${EXAMPLES[@]}"; do
2025
cargo run --features full,ahash --example "$example"
2126
done

merde/Cargo.toml

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ name = "opinions"
5555
path = "examples/opinions.rs"
5656
required-features = ["json"]
5757

58+
[[example]]
59+
name = "mousedown"
60+
path = "examples/mousedown.rs"
61+
required-features = ["json"]
62+
5863
[dependencies]
5964
merde_core = { version = "10.0.1", path = "../merde_core", optional = true }
6065
merde_json = { version = "10.0.1", path = "../merde_json", optional = true }
@@ -65,14 +70,14 @@ ahash = { version = "0.8.11", optional = true }
6570
[features]
6671
default = ["core"]
6772
full = [
68-
"core",
69-
"serialize",
70-
"deserialize",
71-
"json",
72-
"yaml",
73-
"msgpack",
74-
"time",
75-
"rusqlite",
73+
"core",
74+
"serialize",
75+
"deserialize",
76+
"json",
77+
"yaml",
78+
"msgpack",
79+
"time",
80+
"rusqlite",
7681
]
7782
core = ["dep:merde_core"]
7883
serialize = ["core"]
@@ -90,4 +95,3 @@ msgpack = ["dep:merde_msgpack"]
9095

9196
# others
9297
ahash = ["dep:ahash"]
93-

merde/examples/mousedown.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#[derive(Debug)]
2+
enum TestEvent {
3+
MouseUp(MouseUp),
4+
MouseDown(MouseDown),
5+
}
6+
7+
merde::derive! {
8+
impl (Serialize, Deserialize) for enum TestEvent
9+
externally_tagged {
10+
"mouseup" => MouseUp,
11+
"mousedown" => MouseDown,
12+
}
13+
}
14+
15+
#[derive(Debug, PartialEq, Eq)]
16+
struct MouseUp {
17+
x: i32,
18+
y: i32,
19+
}
20+
21+
merde::derive! {
22+
impl (Serialize, Deserialize) for struct MouseUp {
23+
x,
24+
y
25+
}
26+
}
27+
28+
#[derive(Debug, PartialEq, Eq)]
29+
struct MouseDown {
30+
x: i32,
31+
y: i32,
32+
}
33+
34+
merde::derive! {
35+
impl (Serialize, Deserialize) for struct MouseDown {
36+
x,
37+
y
38+
}
39+
}
40+
41+
fn main() {
42+
let input = r#"{"mouseup": {"x": 100, "y": 200}}"#;
43+
let event: TestEvent = merde::json::from_str(input).unwrap();
44+
println!("TestEvent: {:?}", event);
45+
}

merde/src/lib.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ macro_rules! impl_deserialize {
2323
async fn deserialize(__de: &mut dyn $crate::DynDeserializer<'s>) -> Result<Self, $crate::MerdeError<'s>> {
2424
use $crate::DynDeserializerExt;
2525

26-
Ok(Self($crate::Deserialize::deserialize(__de).await?))
26+
Ok(Self($crate::DynDeserializerExt::t(__de).await?))
2727
}
2828
}
2929
};
@@ -169,13 +169,13 @@ macro_rules! impl_deserialize {
169169
impl<'s> $crate::Deserialize<'s> for $enum_name {
170170
async fn deserialize(__de: &mut dyn $crate::DynDeserializer<'s>) -> Result<Self, $crate::MerdeError<'s>> {
171171
#[allow(unused_imports)]
172-
use $crate::{MerdeError, DynDeserializerExt};
172+
use $crate::MerdeError;
173173

174174
__de.next().await?.into_map_start()?;
175175
let key = __de.next().await?.into_str()?;
176176
match key.as_ref() {
177177
$($variant_str => {
178-
let value = $crate::Deserialize::deserialize(__de).await?;
178+
let value = $crate::DynDeserializerExt::t(__de).await?;
179179
__de.next().await?.into_map_end()?;
180180
Ok($enum_name::$variant(value))
181181
},)*
@@ -531,10 +531,11 @@ macro_rules! impl_serialize {
531531
serializer: &'fut mut dyn $crate::DynSerializer,
532532
) -> impl ::std::future::Future<Output = Result<(), $crate::MerdeError<'static>>> + 'fut {
533533
async move {
534-
$crate::Serialize::serialize(&$crate::Event::MapStart($crate::MapStart {
535-
size_hint: Some(1),
536-
}), serializer)
537-
.await?;
534+
serializer
535+
.write($crate::Event::MapStart($crate::MapStart {
536+
size_hint: Some(1),
537+
}))
538+
.await?;
538539

539540
match self {
540541
$(

0 commit comments

Comments
 (0)