relay_actions/actions/identity/
export.rs1use crate::{
2 actions::Action,
3 cache::CacheManager,
4 sinks::progress::ProgressSink,
5 storage::{Identity, Storage},
6};
7use relay_lib::prelude::Address;
8
9pub struct Export {
10 pub addresses: Vec<Address>,
11}
12
13impl Action for Export {
14 type Output = (Vec<Identity>, String);
15
16 fn execute(
17 &self,
18 storage: &mut Storage,
19 _cache: &mut CacheManager,
20 progress: &mut dyn ProgressSink,
21 ) -> Self::Output {
22 let identities = self
23 .addresses
24 .iter()
25 .map(|address| {
26 storage.root.get_identity(address).unwrap_or_else(|| {
27 progress.abort("No identity found for the given address");
28 })
29 })
30 .cloned()
31 .collect();
32
33 let exported = storage
34 .root
35 .export(progress, &self.addresses)
36 .unwrap_or_else(|e| {
37 progress.error(&format!("{:#?}", e));
38 progress.abort("Failed to export identities");
39 });
40
41 progress.done();
42
43 (identities, exported)
44 }
45}