dag_types/
clone.rs

1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8use 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}