+ struct Persister {
+ data_dir: String,
+ graph_error: Option<(std::io::ErrorKind, &'static str)>,
+ manager_error: Option<(std::io::ErrorKind, &'static str)>
+ }
+
+ impl Persister {
+ fn new(data_dir: String) -> Self {
+ Self { data_dir, graph_error: None, manager_error: None }
+ }
+
+ fn with_graph_error(self, error: std::io::ErrorKind, message: &'static str) -> Self {
+ Self { graph_error: Some((error, message)), ..self }
+ }
+
+ fn with_manager_error(self, error: std::io::ErrorKind, message: &'static str) -> Self {
+ Self { manager_error: Some((error, message)), ..self }
+ }
+ }
+
+ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L:Deref> super::Persister<Signer, M, T, K, F, L> for Persister where
+ M::Target: 'static + chain::Watch<Signer>,
+ T::Target: 'static + BroadcasterInterface,
+ K::Target: 'static + KeysInterface<Signer = Signer>,
+ F::Target: 'static + FeeEstimator,
+ L::Target: 'static + Logger,
+ {
+ fn persist_manager(&self, channel_manager: &ChannelManager<Signer, M, T, K, F, L>) -> Result<(), std::io::Error> {
+ match self.manager_error {
+ None => FilesystemPersister::persist_manager(self.data_dir.clone(), channel_manager),
+ Some((error, message)) => Err(std::io::Error::new(error, message)),
+ }
+ }
+
+ fn persist_graph(&self, network_graph: &NetworkGraph) -> Result<(), std::io::Error> {
+ match self.graph_error {
+ None => FilesystemPersister::persist_network_graph(self.data_dir.clone(), network_graph),
+ Some((error, message)) => Err(std::io::Error::new(error, message)),
+ }
+ }
+ }
+