diff options
author | Jeongik Cha <jeongik@google.com> | 2023-09-14 16:35:19 +0900 |
---|---|---|
committer | Jeongik Cha <jeongik@google.com> | 2023-09-27 03:09:12 +0900 |
commit | 4a17ad57d3426684d3c5335ad61b923eff0e91bb (patch) | |
tree | 40d4534a13f7679e3b351dd83923db6bc3422329 /src/de/datetime.rs | |
parent | 627e3353d06c6963fea9f849a062339b58ffd2d0 (diff) | |
download | toml_edit-4a17ad57d3426684d3c5335ad61b923eff0e91bb.tar.gz |
Import toml_edit
Bug: 277909042
Test: build
Change-Id: I493bcfcd368bcb2ffbf23ad7a36ddd4b1094b9e9
Diffstat (limited to 'src/de/datetime.rs')
-rw-r--r-- | src/de/datetime.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/de/datetime.rs b/src/de/datetime.rs new file mode 100644 index 0000000..14de28b --- /dev/null +++ b/src/de/datetime.rs @@ -0,0 +1,43 @@ +use serde::de::value::BorrowedStrDeserializer; +use serde::de::IntoDeserializer; + +use crate::de::Error; + +pub(crate) struct DatetimeDeserializer { + date: Option<crate::Datetime>, +} + +impl DatetimeDeserializer { + pub(crate) fn new(date: crate::Datetime) -> Self { + Self { date: Some(date) } + } +} + +impl<'de> serde::de::MapAccess<'de> for DatetimeDeserializer { + type Error = Error; + + fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Error> + where + K: serde::de::DeserializeSeed<'de>, + { + if self.date.is_some() { + seed.deserialize(BorrowedStrDeserializer::new( + toml_datetime::__unstable::FIELD, + )) + .map(Some) + } else { + Ok(None) + } + } + + fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Error> + where + V: serde::de::DeserializeSeed<'de>, + { + if let Some(date) = self.date.take() { + seed.deserialize(date.to_string().into_deserializer()) + } else { + panic!("next_value_seed called before next_key_seed") + } + } +} |