spacetimedb_sats/
array_type.rs1use crate::algebraic_type::AlgebraicType;
2use crate::de::Deserialize;
3use crate::meta_type::MetaType;
4use crate::{impl_deserialize, impl_serialize, impl_st, ArrayValue, Typespace};
5
6#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
12pub struct ArrayType {
13 pub elem_ty: Box<AlgebraicType>,
15}
16
17impl_serialize!([] ArrayType, (self, ser) => self.elem_ty.serialize(ser));
18impl_deserialize!([] ArrayType, de => Deserialize::deserialize(de).map(|elem_ty| Self { elem_ty }));
19impl_st!([] ArrayType, ts => AlgebraicType::make_type(ts));
20
21impl MetaType for ArrayType {
22 fn meta_type() -> AlgebraicType {
23 AlgebraicType::ZERO_REF
24 }
25}
26
27impl ArrayType {
28 pub fn type_check(&self, array_value: &ArrayValue, typespace: &Typespace) -> bool {
29 array_value
30 .iter_cloned()
31 .all(|elem| self.elem_ty.type_check(&elem, typespace))
32 }
33}