Skip to content

Commit 7f7b950

Browse files
committed
impl: backend migration example
Example on how migration between backends can be performed.
1 parent 5038467 commit 7f7b950

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
//! Example for migrations between backends.
2+
3+
use rust_kvs::prelude::*;
4+
5+
/// Example custom backend.
6+
/// Returns some data on `load_kvs`.
7+
struct FromBackend;
8+
9+
impl KvsBackend for FromBackend {
10+
fn load_kvs(
11+
&self,
12+
_instance_id: InstanceId,
13+
_snapshot_id: SnapshotId,
14+
) -> Result<KvsMap, ErrorCode> {
15+
Ok(KvsMap::from([(
16+
"example_key".to_string(),
17+
KvsValue::String("example_value".to_string()),
18+
)]))
19+
}
20+
21+
fn load_defaults(&self, _instance_id: InstanceId) -> Result<KvsMap, ErrorCode> {
22+
unimplemented!()
23+
}
24+
25+
fn flush(&self, _instance_id: InstanceId, _kvs_map: &KvsMap) -> Result<(), ErrorCode> {
26+
unimplemented!()
27+
}
28+
29+
fn snapshot_count(&self, _instance_id: InstanceId) -> usize {
30+
unimplemented!()
31+
}
32+
33+
fn snapshot_max_count(&self) -> usize {
34+
unimplemented!()
35+
}
36+
37+
fn snapshot_restore(
38+
&self,
39+
_instance_id: InstanceId,
40+
_snapshot_id: SnapshotId,
41+
) -> Result<KvsMap, ErrorCode> {
42+
unimplemented!()
43+
}
44+
}
45+
46+
/// Example custom backend.
47+
/// Prints provided data to stdout.
48+
struct ToBackend;
49+
50+
impl KvsBackend for ToBackend {
51+
fn load_kvs(
52+
&self,
53+
_instance_id: InstanceId,
54+
_snapshot_id: SnapshotId,
55+
) -> Result<KvsMap, ErrorCode> {
56+
unimplemented!()
57+
}
58+
59+
fn load_defaults(&self, _instance_id: InstanceId) -> Result<KvsMap, ErrorCode> {
60+
unimplemented!()
61+
}
62+
63+
fn flush(&self, _instance_id: InstanceId, kvs_map: &KvsMap) -> Result<(), ErrorCode> {
64+
println!("{kvs_map:?}");
65+
Ok(())
66+
}
67+
68+
fn snapshot_count(&self, _instance_id: InstanceId) -> usize {
69+
unimplemented!()
70+
}
71+
72+
fn snapshot_max_count(&self) -> usize {
73+
unimplemented!()
74+
}
75+
76+
fn snapshot_restore(
77+
&self,
78+
_instance_id: InstanceId,
79+
_snapshot_id: SnapshotId,
80+
) -> Result<KvsMap, ErrorCode> {
81+
unimplemented!()
82+
}
83+
}
84+
85+
fn main() -> Result<(), ErrorCode> {
86+
// Load `KvsMap` from first backend.
87+
// `instance_id` and `snapshot_id` normally must be provided, but aren't used in this example.
88+
let from_backend = FromBackend;
89+
let instance_id = InstanceId(0);
90+
let snapshot_id = SnapshotId(0);
91+
let data = from_backend.load_kvs(instance_id, snapshot_id).unwrap();
92+
93+
// Save `KvsMap` in second backend.
94+
let to_backend = ToBackend;
95+
to_backend.flush(instance_id, &data).unwrap();
96+
97+
Ok(())
98+
}

0 commit comments

Comments
 (0)