utils: use itertools

This commit is contained in:
Luna Yao
2026-02-20 22:28:30 +01:00
parent f53ced6281
commit 90409bfcaa
+23 -8
View File
@@ -1,9 +1,13 @@
use crate::utils::MapTryInto;
use derivative::Derivative;
use derive_more::{Deref, DerefMut, From, IntoIterator};
use itertools::Itertools;
use serde::{Deserialize, Serialize};
use crate::utils::MapTryInto;
pub trait MessageModel<Message: prost::Message>: Into<Message> + for<'m> TryFrom<&'m Message> {}
pub trait MessageModel<Message: prost::Message>:
Into<Message> + for<'m> TryFrom<&'m Message>
{
}
impl<Message, Model> MessageModel<Message> for Model
where
@@ -13,16 +17,27 @@ where
}
#[derive(
Debug, Clone, PartialEq, Eq, Hash, From, Deref, DerefMut, Serialize, Deserialize, IntoIterator,
Derivative,
Debug,
Clone,
PartialEq,
Eq,
Hash,
From,
Deref,
DerefMut,
Serialize,
Deserialize,
IntoIterator,
)]
#[derivative(Default(bound = ""))]
#[serde(transparent)]
#[into_iterator(owned, ref, ref_mut)]
pub struct RepeatedMessageModel<Model>(Vec<Model>);
impl<Model> Default for RepeatedMessageModel<Model>
{
fn default() -> Self {
Self(vec![])
impl<Model> RepeatedMessageModel<Model> {
pub fn into_inner(self) -> Vec<Model> {
self.0
}
}
@@ -34,7 +49,7 @@ where
type Error = <Model as TryFrom<&'m Message>>::Error;
fn try_from(value: &'m Vec<Message>) -> Result<Self, Self::Error> {
Ok(Self(value.map_try_into().collect::<Result<Vec<_>, _>>()?))
Ok(Self(value.into_iter().map_try_into().try_collect()?))
}
}