Skip to content

Commit

Permalink
doc(unftp-sbe): adds example and readme (#4777)
Browse files Browse the repository at this point in the history
add example and doc
  • Loading branch information
George-Miao authored Jun 20, 2024
1 parent b13a78d commit a7b1a6c
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 5 deletions.
12 changes: 8 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ OpenDAL offers a unified data access layer, empowering users to seamlessly and e

## For *ANY* methods

| Name | Description | Release |
|-------|--------------------------------------------------------------------|---------------------------|
| Name | Description | Release |
|-------|--------------------------------------------------------------------|---------------------------|
| [oay] | Access data via API Gateway | [![oay image]][oay crate] |
| [oli] | Access data via Command Line (alternative to s3cmd, s3cli, azcopy) | [![oli image]][oli crate] |
| [ofs] | Access data via POSIX file system API (alternative to s3fs) | [![ofs image]][ofs crate] |
Expand All @@ -88,6 +88,7 @@ OpenDAL offers a unified data access layer, empowering users to seamlessly and e
| [object_store_opendal] | an [object_store] implementation using opendal. | [![object_store image]][object_store crate] | [![Docs Release]][object_store release docs] [![Docs Dev]][object_store dev docs] |
| [fuse3_opendal] | Access data via integrations to [fuse3] | - | - |
| [virtiofs_opendal] | Access data via integrations to [vhost-user-backend] | - | - |
| [unftp-sbe-opendal] | an [unftp] storage backend implementation using opendal. | - | - |

[dav-server-opendalfs]: integrations/dav-server/README.md
[dav-server-rs]: https://github.com/messense/dav-server-rs
Expand All @@ -109,10 +110,13 @@ OpenDAL offers a unified data access layer, empowering users to seamlessly and e
[virtiofs_opendal]: integrations/virtiofs/README.md
[vhost-user-backend]: https://docs.rs/vhost-user-backend

[unftp-sbe-opendal]: integrations/unftp-sbe/README.md
[unftp]: https://crates.io/crates/unftp

## For *ANY* services

| Type | Services |
|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
| Type | Services |
|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
| Standard Storage Protocols | ftp http [sftp] [webdav] |
| Object Storage Services | [azblob] [cos] [gcs] [obs] [oss] [s3] <br> [b2] [openstack_swift] [upyun] [vercel_blob] |
| File Storage Services | fs [alluxio] [azdls] [azfile] [chainsafe] [compfs] <br> [dbfs] [gridfs] [hdfs] [hdfs_native] [ipfs] [webhdfs] |
Expand Down
53 changes: 52 additions & 1 deletion integrations/unftp-sbe/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,54 @@
# Apache OpenDAL™ unftp Integration

This crate intends to build an backend based on OpenDAL for [unftp](https://crates.io/crates/unftp).
`unftp-sbe-opendal` is an [unftp](https://crates.io/crates/unftp) `StorageBackend` implementation using opendal.

This crate can help you to access ANY storage services with the same ftp API.

## Examples

```rust
use anyhow::Result;
use opendal::Operator;
use unftp_sbe_opendal::OpendalStorage;

#[tokio::main]
async fn main() -> Result<()> {
// Create any service desired
let service = opendal::services::S3::from_map(
[
("access_key".to_string(), "my_access_key".to_string()),
("secret_key".to_string(), "my_secret_key".to_string()),
("endpoint".to_string(), "my_endpoint".to_string()),
("region".to_string(), "my_region".to_string()),
]
.into_iter()
.collect(),
);

// Init an operator with the service created
let op = Operator::new(service)?.finish();

// Wrap the operator with `OpendalStorage`
let backend = OpendalStorage::new(op);

// Build the actual unftp server
let server = libunftp::ServerBuilder::new(Box::new(move || backend.clone())).build()?;

// Start the server
server.listen("0.0.0.0:0").await?;

Ok(())
}
```

## Branding

The first and most prominent mentions must use the full form: **Apache OpenDAL™** of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the OpenDAL project and the OpenDAL software product to the ASF as the parent organization.

For more details, see the [Apache Product Name Usage Guide](https://www.apache.org/foundation/marks/guide).

## License and Trademarks

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.
24 changes: 24 additions & 0 deletions integrations/unftp-sbe/examples/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
use std::error::Error;

use opendal::Operator;
use unftp_sbe_opendal::OpendalStorage;

#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
// Create any service desired
let service = opendal::services::Memory::default();

// Init an operator with the service created
let op = Operator::new(service)?.finish();

// Wrap the operator with `OpendalStorage`
let backend = OpendalStorage::new(op);

// Build the actual unftp server
let server = libunftp::ServerBuilder::new(Box::new(move || backend.clone())).build()?;

// Start the server
server.listen("0.0.0.0:0").await?;

Ok(())
}

0 comments on commit a7b1a6c

Please sign in to comment.