diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-04-04 14:31:46 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-04-04 14:31:46 +0200 |
commit | 359be3143008faed4bc2d467b5c2a4e62bc6bfdc (patch) | |
tree | a6ec479df123cdfbd50d458d16895fae7ea6475e | |
parent | 14756511ed322cf8544acd612c741920224449c9 (diff) |
Merging should be possible without consuming the merged DAG
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/async_dag.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/async_dag.rs b/src/async_dag.rs index 78886e3..20a3239 100644 --- a/src/async_dag.rs +++ b/src/async_dag.rs @@ -126,10 +126,10 @@ impl<Id, N, Backend> AsyncDag<Id, N, Backend> /// /// Use the `merger` function to merge the two head IDs and generate a new Node instance for /// the new HEAD of `self`. - pub async fn merge<M>(&mut self, other: AsyncDag<Id, N, Backend>, merger: M) -> Result<Id> + pub async fn merge<M>(&mut self, other: &AsyncDag<Id, N, Backend>, merger: M) -> Result<Id> where M: Merger<Id, N> { - let node = merger.create_merge_node(self.head.clone(), other.head)?; + let node = merger.create_merge_node(&self.head, &other.head)?; let id = self.backend.put(node).await?; self.head = id.clone(); Ok(id) @@ -140,7 +140,7 @@ pub trait Merger<Id, N> where Id: NodeId, N: Node<Id = Id> { - fn create_merge_node(&self, left_id: Id, right_id: Id) -> Result<N>; + fn create_merge_node(&self, left_id: &Id, right_id: &Id) -> Result<N>; } @@ -425,16 +425,16 @@ mod tests { struct M; impl super::Merger<test::Id, test::Node> for M { - fn create_merge_node(&self, left_id: test::Id, right_id: test::Id) -> Result<test::Node> { + fn create_merge_node(&self, left_id: &test::Id, right_id: &test::Id) -> Result<test::Node> { Ok(test::Node { id: test::Id(3), - parents: vec![left_id, right_id], + parents: vec![left_id.clone(), right_id.clone()], data: 45, }) } } - let merge = tokio_test::block_on(dag.merge(branched, M)); + let merge = tokio_test::block_on(dag.merge(&branched, M)); assert!(merge.is_ok()); let merge = merge.unwrap(); |