substrate_data/schema/plain/
ordered.rs1use super::maps::read_map;
4use crate::model::borrowed::ValueRef;
5use crate::model::value::Value;
6use crate::schema::{Reader, Schema, Shape};
7
8#[derive(Debug, Clone, PartialEq)]
10pub struct Ordered<T>(pub Vec<(String, T)>);
11
12impl<T> Default for Ordered<T> {
13 fn default() -> Self {
14 Self(Vec::new())
15 }
16}
17
18impl<T: Schema> Schema for Ordered<T> {
19 fn shape() -> Shape {
20 Shape::Map(T::shape)
21 }
22 fn read(v: &ValueRef<'_>, cx: &mut Reader<'_>) -> Option<Self> {
23 let mut out = Vec::new();
24 read_map(v, cx, |k, x| out.push((k, x)))?;
25 Some(Ordered(out))
26 }
27 fn write(&self) -> Value {
28 Value::Map(self.0.iter().map(|(k, v)| (k.clone(), v.write())).collect())
29 }
30}