use std::fmt::Debug;
use qubit_budget::ResourceQuantity;
use qubit_budget::json::JsonContainerKind;
use qubit_budget::json::JsonValueTransaction;
use serde::Deserialize;
use serde::Deserializer;
use serde::de::DeserializeSeed;
use serde::de::Error;
pub(in crate::value) struct JsonKeySeed<'transaction, 'budget, R, Q>
where
Q: ResourceQuantity,
{
pub(super) transaction: &'transaction mut JsonValueTransaction<'budget, R, Q>,
pub(super) prospective: usize,
}
impl<'de, R, Q> DeserializeSeed<'de> for JsonKeySeed<'_, '_, R, Q>
where
R: Clone + Debug,
Q: ResourceQuantity,
{
type Value = String;
fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
where
D: Deserializer<'de>,
{
self.transaction
.check_container_count(JsonContainerKind::Map, self.prospective)
.map_err(D::Error::custom)?;
String::deserialize(deserializer)
}
}