better type_id for nested storages
This commit is contained in:
parent
776c865781
commit
6233cc9d12
4 changed files with 22 additions and 2 deletions
|
|
@ -99,7 +99,9 @@ impl SessionDatabase {
|
|||
.iter()
|
||||
// We don't support serializing / deserializing of other storage types.
|
||||
.filter(|(_, torrent)| {
|
||||
torrent.storage_factory.type_id() == TypeId::of::<FilesystemStorageFactory>()
|
||||
torrent
|
||||
.storage_factory
|
||||
.is_type_id(TypeId::of::<FilesystemStorageFactory>())
|
||||
})
|
||||
.map(|(id, torrent)| {
|
||||
(
|
||||
|
|
|
|||
|
|
@ -4,7 +4,10 @@ pub mod mmap;
|
|||
pub mod slow;
|
||||
pub mod timing;
|
||||
|
||||
use std::{any::Any, path::Path};
|
||||
use std::{
|
||||
any::{Any, TypeId},
|
||||
path::Path,
|
||||
};
|
||||
|
||||
use crate::torrent_state::ManagedTorrentInfo;
|
||||
|
||||
|
|
@ -12,6 +15,9 @@ pub trait StorageFactory: Send + Sync + Any {
|
|||
type Storage: TorrentStorage;
|
||||
|
||||
fn init_storage(&self, info: &ManagedTorrentInfo) -> anyhow::Result<Self::Storage>;
|
||||
fn is_type_id(&self, type_id: TypeId) -> bool {
|
||||
Self::type_id(self) == type_id
|
||||
}
|
||||
}
|
||||
|
||||
pub type BoxStorageFactory = Box<dyn StorageFactory<Storage = Box<dyn TorrentStorage>>>;
|
||||
|
|
@ -33,6 +39,10 @@ impl<SF: StorageFactory> StorageFactoryExt for SF {
|
|||
let s = self.sf.init_storage(info)?;
|
||||
Ok(Box::new(s))
|
||||
}
|
||||
|
||||
fn is_type_id(&self, type_id: TypeId) -> bool {
|
||||
self.sf.type_id() == type_id
|
||||
}
|
||||
}
|
||||
|
||||
Box::new(Wrapper { sf: self })
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@ impl<U: StorageFactory> StorageFactory for SlowStorageFactory<U> {
|
|||
underlying: self.underlying_factory.init_storage(info)?,
|
||||
})
|
||||
}
|
||||
|
||||
fn is_type_id(&self, type_id: std::any::TypeId) -> bool {
|
||||
self.underlying_factory.is_type_id(type_id)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct SlowStorage<U> {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,10 @@ impl<U: StorageFactory> StorageFactory for TimingStorageFactory<U> {
|
|||
underlying: self.underlying_factory.init_storage(info)?,
|
||||
})
|
||||
}
|
||||
|
||||
fn is_type_id(&self, type_id: std::any::TypeId) -> bool {
|
||||
self.underlying_factory.is_type_id(type_id)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TimingStorage<U> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue