Module libunftp::storage [−][src]
Contains the StorageBackend trait and its bundled implementations that can used by the Server.
You can define your own implementation to integrate your FTP(S) server with whatever backend you need. To create a new storage back-end:
- Declare a dependency on the async-trait crate
async-trait = "0.1.42"
- Implement the
StorageBackendtrait and optionally theMetadatatrait:
use async_trait::async_trait; use libunftp::storage::{Fileinfo, Metadata, Result, StorageBackend}; use std::fmt::Debug; use std::path::{Path, PathBuf}; use libunftp::auth::DefaultUser; #[derive(Debug)] pub struct Vfs {} impl Vfs { fn new() -> Vfs { Vfs{} } } #[async_trait] impl libunftp::storage::StorageBackend<DefaultUser> for Vfs { type Metadata = std::fs::Metadata; async fn metadata<P: AsRef<Path> + Send + Debug>( &self, user: &Option<DefaultUser>, path: P, ) -> Result<Self::Metadata> { unimplemented!() } async fn list<P: AsRef<Path> + Send + Debug>( &self, user: &Option<DefaultUser>, path: P, ) -> Result<Vec<Fileinfo<PathBuf, Self::Metadata>>> where <Self as StorageBackend<DefaultUser>>::Metadata: Metadata, { unimplemented!() } async fn get<P: AsRef<Path> + Send + Debug>( &self, user: &Option<DefaultUser>, path: P, start_pos: u64, ) -> Result<Box<dyn tokio::io::AsyncRead + Send + Sync + Unpin>> { unimplemented!() } async fn put< P: AsRef<Path> + Send + Debug, R: tokio::io::AsyncRead + Send + Sync + Unpin + 'static, >( &self, user: &Option<DefaultUser>, input: R, path: P, start_pos: u64, ) -> Result<u64> { unimplemented!() } async fn del<P: AsRef<Path> + Send + Debug>( &self, user: &Option<DefaultUser>, path: P, ) -> Result<()> { unimplemented!() } async fn mkd<P: AsRef<Path> + Send + Debug>( &self, user: &Option<DefaultUser>, path: P, ) -> Result<()> { unimplemented!() } async fn rename<P: AsRef<Path> + Send + Debug>( &self, user: &Option<DefaultUser>, from: P, to: P, ) -> Result<()> { unimplemented!() } async fn rmd<P: AsRef<Path> + Send + Debug>( &self, user: &Option<DefaultUser>, path: P, ) -> Result<()> { unimplemented!() } async fn cwd<P: AsRef<Path> + Send + Debug>( &self, user: &Option<DefaultUser>, path: P, ) -> Result<()> { unimplemented!() } }
- Initialize it with the
Server:
let vfs_provider = Box::new(|| Vfs::new()); let server = libunftp::Server::new(vfs_provider);
Modules
| cloud_storage | A |
| filesystem | A |
Structs
| Error | The Error returned by storage backends. Storage backend implementations should choose the
|
| Fileinfo | Fileinfo contains the path and |
| Permissions | Represents the permissions of a FTP File |
Enums
| ErrorKind | The |
Constants
| FEATURE_RESTART | Tells if STOR/RETR restarts are supported by the storage back-end i.e. starting from a different byte offset. |
Traits
| Metadata | Represents the metadata of a FTP File |
| StorageBackend | The |
Type Definitions
| Result | Result type used by traits in this module |