Skip to content

Commit d29d838

Browse files
committed
Remove unnecessary code and add enum-taged test
1 parent 1389734 commit d29d838

File tree

1 file changed

+53
-51
lines changed

1 file changed

+53
-51
lines changed

src/serde_deser.rs

Lines changed: 53 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use serde::de::value::{MapDeserializer, SeqDeserializer};
44
use serde::de::{
55
DeserializeSeed, EnumAccess, Expected, IntoDeserializer, Unexpected, VariantAccess, Visitor,
66
};
7-
use serde::{Deserialize, Deserializer};
7+
use serde::Deserializer;
88

99
use crate::qdrant::value::Kind;
1010
use crate::qdrant::{Struct, Value};
@@ -353,10 +353,6 @@ impl<'de> Deserializer<'de> for Value {
353353
let _ = visitor;
354354
Err(serde::de::Error::custom("u128 is not supported"))
355355
}
356-
357-
fn is_human_readable(&self) -> bool {
358-
true
359-
}
360356
}
361357

362358
struct EnumDeserializer {
@@ -372,80 +368,52 @@ impl<'de> EnumAccess<'de> for EnumDeserializer {
372368
V: DeserializeSeed<'de>,
373369
{
374370
let variant = self.variant.into_deserializer();
375-
let visitor = VariantDeserializer { value: None };
371+
let visitor = VariantDeserializer;
376372
seed.deserialize(variant).map(|v| (v, visitor))
377373
}
378374
}
379375

380-
struct VariantDeserializer {
381-
value: Option<Value>,
382-
}
376+
struct VariantDeserializer;
383377

384378
impl<'de> VariantAccess<'de> for VariantDeserializer {
385379
type Error = DeserPayloadError;
386380

387381
fn unit_variant(self) -> Result<(), Self::Error> {
388-
match self.value {
389-
Some(value) => Deserialize::deserialize(value),
390-
None => Ok(()),
391-
}
382+
Ok(())
392383
}
393384

394-
fn newtype_variant_seed<T>(self, seed: T) -> Result<T::Value, Self::Error>
385+
fn newtype_variant_seed<T>(self, _seed: T) -> Result<T::Value, Self::Error>
395386
where
396387
T: DeserializeSeed<'de>,
397388
{
398-
match self.value {
399-
Some(value) => seed.deserialize(value),
400-
None => Err(serde::de::Error::invalid_type(
401-
Unexpected::UnitVariant,
402-
&"newtype variant",
403-
)),
404-
}
389+
Err(serde::de::Error::invalid_type(
390+
Unexpected::UnitVariant,
391+
&"newtype variant",
392+
))
405393
}
406394

407-
fn tuple_variant<V>(self, _len: usize, visitor: V) -> Result<V::Value, Self::Error>
395+
fn tuple_variant<V>(self, _len: usize, _visitor: V) -> Result<V::Value, Self::Error>
408396
where
409397
V: Visitor<'de>,
410398
{
411-
match self.value.and_then(|i| i.kind) {
412-
Some(Kind::ListValue(list)) => {
413-
if list.is_empty() {
414-
visitor.visit_unit()
415-
} else {
416-
visit_array(list.values, visitor)
417-
}
418-
}
419-
Some(other) => Err(serde::de::Error::invalid_type(
420-
Value::unexpected_kind(&other),
421-
&"tuple variant",
422-
)),
423-
None => Err(serde::de::Error::invalid_type(
424-
Unexpected::UnitVariant,
425-
&"tuple variant",
426-
)),
427-
}
399+
Err(serde::de::Error::invalid_type(
400+
Unexpected::UnitVariant,
401+
&"tuple variant",
402+
))
428403
}
429404

430405
fn struct_variant<V>(
431406
self,
432407
_fields: &'static [&'static str],
433-
visitor: V,
408+
_visitor: V,
434409
) -> Result<V::Value, Self::Error>
435410
where
436411
V: Visitor<'de>,
437412
{
438-
match self.value.and_then(|i| i.kind) {
439-
Some(Kind::StructValue(v)) => v.into_deserializer().deserialize_any(visitor),
440-
Some(other) => Err(serde::de::Error::invalid_type(
441-
Value::unexpected_kind(&other),
442-
&"struct variant",
443-
)),
444-
None => Err(serde::de::Error::invalid_type(
445-
Unexpected::UnitVariant,
446-
&"struct variant",
447-
)),
448-
}
413+
Err(serde::de::Error::invalid_type(
414+
Unexpected::UnitVariant,
415+
&"struct variant",
416+
))
449417
}
450418
}
451419

@@ -758,6 +726,40 @@ mod test {
758726
assert!(dst_err.is_err())
759727
}
760728

729+
#[test]
730+
fn test_enum_struct_tagged() {
731+
let payload = make_payload(
732+
json!({"items": [{"t": "First", "c": {"key": "Major"}}, {"t": "Second","c": {"other": 32}},{"t": "Bool", "c": true}]}),
733+
);
734+
735+
#[derive(Deserialize, Debug)]
736+
#[allow(dead_code)]
737+
struct Dst {
738+
items: Vec<DstEnum>,
739+
}
740+
741+
#[derive(Deserialize, PartialEq, Debug)]
742+
#[allow(dead_code)]
743+
#[serde(tag = "t", content = "c")]
744+
enum DstEnum {
745+
First { key: String },
746+
Second { other: u32 },
747+
Bool(bool),
748+
}
749+
750+
let dst: Dst = payload.deserialize().unwrap();
751+
assert_eq!(
752+
dst.items,
753+
vec![
754+
DstEnum::First {
755+
key: "Major".to_string()
756+
},
757+
DstEnum::Second { other: 32 },
758+
DstEnum::Bool(true)
759+
]
760+
);
761+
}
762+
761763
#[test]
762764
fn test_option() {
763765
let payload = make_payload(json!({

0 commit comments

Comments
 (0)