diff --git a/src/database/de.rs b/src/database/de.rs index f648b89a..4f5be6fc 100644 --- a/src/database/de.rs +++ b/src/database/de.rs @@ -351,6 +351,10 @@ impl<'a, 'de: 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> { match self.record_peek_byte() { | Some(b'{') => self.deserialize_map(visitor), + | Some(b'[') => serde_json::Deserializer::from_slice(self.record_next()) + .deserialize_seq(visitor) + .map_err(Into::into), + | _ => self.deserialize_str(visitor), } } diff --git a/src/service/users/mod.rs b/src/service/users/mod.rs index 3c43968a..fe064d9c 100644 --- a/src/service/users/mod.rs +++ b/src/service/users/mod.rs @@ -947,13 +947,12 @@ impl Service { user_id: &UserId, profile_key: &str, ) -> Result { + let key = (user_id, profile_key); self.db .useridprofilekey_value - .qry(&(user_id, profile_key)) + .qry(&key) .await - .deserialized::>() - .map(serde_json::to_value)? - .map_err(Into::into) + .deserialized() } /// Gets all the user's profile keys and values in an iterator @@ -961,16 +960,14 @@ impl Service { &'a self, user_id: &'a UserId, ) -> impl Stream + 'a + Send { - type KeyVal = ((Ignore, String), Raw); + type KeyVal = ((Ignore, String), serde_json::Value); let prefix = (user_id, Interfix); self.db .useridprofilekey_value .stream_prefix(&prefix) .ignore_err() - .ready_filter_map(|((_, key), val): KeyVal| { - Some((key, serde_json::to_value(val).ok()?)) - }) + .map(|((_, key), val): KeyVal| (key, val)) } /// Sets a new profile key value, removes the key if value is None