Skip to content

Commit c91c334

Browse files
authored
Fix Range{From,To} deserialize mixup
1 parent 2083f43 commit c91c334

File tree

1 file changed

+36
-36
lines changed

1 file changed

+36
-36
lines changed

serde/src/de/impls.rs

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2509,15 +2509,15 @@ where
25092509
where
25102510
D: Deserializer<'de>,
25112511
{
2512-
let start = tri!(deserializer.deserialize_struct(
2512+
let end = tri!(deserializer.deserialize_struct(
25132513
"RangeFrom",
25142514
range_from::FIELDS,
25152515
range_from::RangeFromVisitor {
25162516
expecting: "struct RangeFrom",
25172517
phantom: PhantomData,
25182518
},
25192519
));
2520-
Ok(start..)
2520+
Ok(end..)
25212521
}
25222522
}
25232523

@@ -2526,14 +2526,14 @@ mod range_from {
25262526

25272527
use crate::de::{Deserialize, Deserializer, Error, MapAccess, SeqAccess, Visitor};
25282528

2529-
pub const FIELDS: &[&str] = &["end"];
2529+
pub const FIELDS: &[&str] = &["start"];
25302530

25312531
// If this were outside of the serde crate, it would just use:
25322532
//
25332533
// #[derive(Deserialize)]
25342534
// #[serde(field_identifier, rename_all = "lowercase")]
25352535
enum Field {
2536-
End,
2536+
Start,
25372537
}
25382538

25392539
impl<'de> Deserialize<'de> for Field {
@@ -2547,15 +2547,15 @@ mod range_from {
25472547
type Value = Field;
25482548

25492549
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2550-
formatter.write_str("`end`")
2550+
formatter.write_str("`start`")
25512551
}
25522552

25532553
fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
25542554
where
25552555
E: Error,
25562556
{
25572557
match value {
2558-
"end" => Ok(Field::End),
2558+
"start" => Ok(Field::Start),
25592559
_ => Err(Error::unknown_field(value, FIELDS)),
25602560
}
25612561
}
@@ -2565,7 +2565,7 @@ mod range_from {
25652565
E: Error,
25662566
{
25672567
match value {
2568-
b"end" => Ok(Field::End),
2568+
b"start" => Ok(Field::Start),
25692569
_ => {
25702570
let value = crate::__private::from_utf8_lossy(value);
25712571
Err(Error::unknown_field(&*value, FIELDS))
@@ -2597,35 +2597,35 @@ mod range_from {
25972597
where
25982598
A: SeqAccess<'de>,
25992599
{
2600-
let end: Idx = match tri!(seq.next_element()) {
2600+
let start: Idx = match tri!(seq.next_element()) {
26012601
Some(value) => value,
26022602
None => {
26032603
return Err(Error::invalid_length(0, &self));
26042604
}
26052605
};
2606-
Ok(end)
2606+
Ok(start)
26072607
}
26082608

26092609
fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
26102610
where
26112611
A: MapAccess<'de>,
26122612
{
2613-
let mut end: Option<Idx> = None;
2613+
let mut start: Option<Idx> = None;
26142614
while let Some(key) = tri!(map.next_key()) {
26152615
match key {
2616-
Field::End => {
2617-
if end.is_some() {
2618-
return Err(<A::Error as Error>::duplicate_field("end"));
2616+
Field::Start => {
2617+
if start.is_some() {
2618+
return Err(<A::Error as Error>::duplicate_field("start"));
26192619
}
2620-
end = Some(tri!(map.next_value()));
2620+
start = Some(tri!(map.next_value()));
26212621
}
26222622
}
26232623
}
2624-
let end = match end {
2625-
Some(end) => end,
2626-
None => return Err(<A::Error as Error>::missing_field("end")),
2624+
let start = match start {
2625+
Some(start) => start,
2626+
None => return Err(<A::Error as Error>::missing_field("start")),
26272627
};
2628-
Ok(end)
2628+
Ok(start)
26292629
}
26302630
}
26312631
}
@@ -2647,15 +2647,15 @@ where
26472647
where
26482648
D: Deserializer<'de>,
26492649
{
2650-
let end = tri!(deserializer.deserialize_struct(
2650+
let start = tri!(deserializer.deserialize_struct(
26512651
"RangeTo",
26522652
range_to::FIELDS,
26532653
range_to::RangeToVisitor {
26542654
expecting: "struct RangeTo",
26552655
phantom: PhantomData,
26562656
},
26572657
));
2658-
Ok(..end)
2658+
Ok(..start)
26592659
}
26602660
}
26612661

@@ -2664,14 +2664,14 @@ mod range_to {
26642664

26652665
use crate::de::{Deserialize, Deserializer, Error, MapAccess, SeqAccess, Visitor};
26662666

2667-
pub const FIELDS: &[&str] = &["start"];
2667+
pub const FIELDS: &[&str] = &["end"];
26682668

26692669
// If this were outside of the serde crate, it would just use:
26702670
//
26712671
// #[derive(Deserialize)]
26722672
// #[serde(field_identifier, rename_all = "lowercase")]
26732673
enum Field {
2674-
Start,
2674+
End,
26752675
}
26762676

26772677
impl<'de> Deserialize<'de> for Field {
@@ -2685,15 +2685,15 @@ mod range_to {
26852685
type Value = Field;
26862686

26872687
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2688-
formatter.write_str("`start`")
2688+
formatter.write_str("`end`")
26892689
}
26902690

26912691
fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
26922692
where
26932693
E: Error,
26942694
{
26952695
match value {
2696-
"start" => Ok(Field::Start),
2696+
"end" => Ok(Field::End),
26972697
_ => Err(Error::unknown_field(value, FIELDS)),
26982698
}
26992699
}
@@ -2703,7 +2703,7 @@ mod range_to {
27032703
E: Error,
27042704
{
27052705
match value {
2706-
b"start" => Ok(Field::Start),
2706+
b"end" => Ok(Field::End),
27072707
_ => {
27082708
let value = crate::__private::from_utf8_lossy(value);
27092709
Err(Error::unknown_field(&*value, FIELDS))
@@ -2735,35 +2735,35 @@ mod range_to {
27352735
where
27362736
A: SeqAccess<'de>,
27372737
{
2738-
let start: Idx = match tri!(seq.next_element()) {
2738+
let end: Idx = match tri!(seq.next_element()) {
27392739
Some(value) => value,
27402740
None => {
27412741
return Err(Error::invalid_length(0, &self));
27422742
}
27432743
};
2744-
Ok(start)
2744+
Ok(end)
27452745
}
27462746

27472747
fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
27482748
where
27492749
A: MapAccess<'de>,
27502750
{
2751-
let mut start: Option<Idx> = None;
2751+
let mut end: Option<Idx> = None;
27522752
while let Some(key) = tri!(map.next_key()) {
27532753
match key {
2754-
Field::Start => {
2755-
if start.is_some() {
2756-
return Err(<A::Error as Error>::duplicate_field("start"));
2754+
Field::End => {
2755+
if end.is_some() {
2756+
return Err(<A::Error as Error>::duplicate_field("end"));
27572757
}
2758-
start = Some(tri!(map.next_value()));
2758+
end = Some(tri!(map.next_value()));
27592759
}
27602760
}
27612761
}
2762-
let start = match start {
2763-
Some(start) => start,
2764-
None => return Err(<A::Error as Error>::missing_field("start")),
2762+
let end = match end {
2763+
Some(end) => end,
2764+
None => return Err(<A::Error as Error>::missing_field("end")),
27652765
};
2766-
Ok(start)
2766+
Ok(end)
27672767
}
27682768
}
27692769
}

0 commit comments

Comments
 (0)