1use std::collections::BTreeMap;
9
10use serde::Deserialize;
11use serde::Serialize;
12
13use crate::id::Id;
14use crate::segment::PreparedFlatSegments;
15
16#[derive(Clone, Debug, PartialEq, Eq)]
17#[derive(Serialize, Deserialize)]
18pub struct CloneData<Name> {
19 pub flat_segments: PreparedFlatSegments,
20 pub idmap: BTreeMap<Id, Name>,
21}
22
23impl<Name> CloneData<Name> {
24 pub fn convert_vertex<T, F: Fn(Name) -> T>(self, f: F) -> CloneData<T> {
25 let idmap = self.idmap.into_iter().map(|(k, v)| (k, f(v))).collect();
26 CloneData {
27 flat_segments: self.flat_segments,
28 idmap,
29 }
30 }
31}
32
33#[cfg(any(test, feature = "for-tests"))]
34use quickcheck::Arbitrary;
35#[cfg(any(test, feature = "for-tests"))]
36use quickcheck::Gen;
37
38#[cfg(any(test, feature = "for-tests"))]
39impl<Name> Arbitrary for CloneData<Name>
40where
41 Name: Arbitrary,
42{
43 fn arbitrary(g: &mut Gen) -> Self {
44 let flat_segments = PreparedFlatSegments {
45 segments: Arbitrary::arbitrary(g),
46 };
47 CloneData {
48 flat_segments,
49 idmap: Arbitrary::arbitrary(g),
50 }
51 }
52}