1use super::*;
5
6pub enum Either<A: Blockstore, B: Blockstore> {
7 Left(A),
8 Right(B),
9}
10
11impl<A: Blockstore, B: Blockstore> Blockstore for Either<A, B> {
12 fn has(&self, k: &Cid) -> anyhow::Result<bool> {
13 match self {
14 Self::Left(v) => v.has(k),
15 Self::Right(v) => v.has(k),
16 }
17 }
18
19 #[allow(clippy::disallowed_types)]
20 fn put<D>(
21 &self,
22 mh_code: multihash_codetable::Code,
23 block: &fvm_ipld_blockstore::Block<D>,
24 ) -> anyhow::Result<Cid>
25 where
26 Self: Sized,
27 D: AsRef<[u8]>,
28 {
29 match self {
30 Self::Left(v) => v.put(mh_code, block),
31 Self::Right(v) => v.put(mh_code, block),
32 }
33 }
34
35 #[allow(clippy::disallowed_types)]
36 fn put_many<D, I>(&self, blocks: I) -> anyhow::Result<()>
37 where
38 Self: Sized,
39 D: AsRef<[u8]>,
40 I: IntoIterator<Item = (multihash_codetable::Code, fvm_ipld_blockstore::Block<D>)>,
41 {
42 match self {
43 Self::Left(v) => v.put_many(blocks),
44 Self::Right(v) => v.put_many(blocks),
45 }
46 }
47
48 fn put_many_keyed<D, I>(&self, blocks: I) -> anyhow::Result<()>
49 where
50 Self: Sized,
51 D: AsRef<[u8]>,
52 I: IntoIterator<Item = (Cid, D)>,
53 {
54 match self {
55 Self::Left(v) => v.put_many_keyed(blocks),
56 Self::Right(v) => v.put_many_keyed(blocks),
57 }
58 }
59
60 fn get(&self, k: &Cid) -> anyhow::Result<Option<Vec<u8>>> {
61 match self {
62 Self::Left(v) => v.get(k),
63 Self::Right(v) => v.get(k),
64 }
65 }
66
67 fn put_keyed(&self, k: &Cid, block: &[u8]) -> anyhow::Result<()> {
68 match self {
69 Self::Left(v) => v.put_keyed(k, block),
70 Self::Right(v) => v.put_keyed(k, block),
71 }
72 }
73}