6 个版本

新版本 0.1.5 2024 年 8 月 21 日
0.1.4 2024 年 5 月 13 日
0.1.3 2024 年 4 月 5 日

#422 in 开发工具

Download history 126/week @ 2024-05-09 17/week @ 2024-05-16 1/week @ 2024-05-23 2/week @ 2024-06-27 17/week @ 2024-07-04 1/week @ 2024-07-25 87/week @ 2024-08-15

每月 89 次下载
用于 waifu-vault-client

MIT/Apache

50KB
667

Waifu Vault SDK

这是与 Waifu Vault API 交互的官方 API 绑定。

有关服务条款和使用政策的更多信息,请参阅上述网站。

安装

cargo add waifuvault

用法

以下交互是被允许的

上传文件

在创建 WaifuUploadRequest 时可以设置以下选项

  • file: 可选值,用于从磁盘上传文件
  • url: 可选值,用于从 URL 上传内容
  • bytes: 可选值,用于上传原始字节
  • bucket: 可选值,用于将文件上传到特定存储桶
  • expires: 可选值,用于定义内容的过期时间
    • 有效值:mhd
    • 如果未设置,则内容将根据服务的保留策略存在
  • hide_filename: 可选标志,用于在生成的 URL 中隐藏文件名
  • password: 可选值,用于设置内容是否加密
  • one_time_download: 可选标志,用于设置内容在第一次访问后是否被删除
use waifuvault::{
    ApiCaller,
    api::{WaifuUploadRequest, WaifuResponse}
};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let caller = ApiCaller::new();

    // Upload a file from disk
    let request = WaifuUploadRequest::new()
        .file("/some/file/path") // Path to a file
        .password("set a password") // Set a password
        .one_time_download(true); // Delete after first access
    let response = caller.upload_file(request).await?;

    // Upload a file from a URL
    let request = WaifuUploadRequest::new()
        .url("https://some-website/image.jpg"); // URL to content
    let response = caller.upload_file(request).await?;

    // Upload a file from raw bytes
    let data = std::fs::read("some/file/path")?;
    let request = WaifuUploadRequest::new()
        .bytes(data, "name-to-store.rs"); // Raw file content and name to store on the vault
    let response = caller.upload_file(request).await?;

    Ok(())
}

获取文件信息

检索使用 API 存储的文件信息

这需要从上传文件时的响应中获得的令牌。

在使用 WaifuGetRequest 时可以设置以下参数

  • token: 用于检索文件的令牌
  • formatted:确定过期时间是否为可读的选项标志
use waifuvault::{
    ApiCaller,
    api::WaifuGetRequest
};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let caller = ApiCaller::new();

    let request = WaifuGetRequest::new("some-waifu-vault-token");
    let response = caller.file_info(request).await?;

    Ok(())
}

修改文件选项

修改API中存储文件的选项

以下参数可用于更新文件信息

  • password:为文件设置新密码
    • 如果已存在密码,则必须使用previous_password
  • previous_password:文件的旧密码(设置加密内容的密码时需要)
  • custom_expiry:为内容设置新的过期时间
  • hide_filename:设置标志以从URL中隐藏文件名
use waifuvault::{
    ApiCaller,
    api::WaifuModificationRequest
};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let caller = ApiCaller::new();

    let request = WaifuModificationRequest::new("some-waifu-vault-token")
        .password("new_password") // Set a new password
        .previous_password("old_password") // Old password
        .custom_expiry("1h") // Set a new expiry
        .hide_filename(true); // Hide the filename

    let response = caller.update_file(request).await?;

    // Do something with the response

    Ok(())
}

删除文件

使用API通过内容令牌删除文件。

use waifuvault::ApiCaller;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let caller = ApiCaller::new();
    let response = caller.delete_file("some-waifu-token").await?;

    Ok(())
}

下载文件

使用给定令牌从API下载文件。

use waifuvault::ApiCaller;
use std::io::Write;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let caller = ApiCaller::new();

    // Download a file with no password
    let content = caller.download_file("https://waifuvault.moe/f/some-file.ext", None).await?;
    let mut f = std::fs::File::create("downloaded_file.txt")?;
    f.write_all(&content)?;

    // Download a file with no password
    let content = caller.download_file("https://waifuvault.moe/f/some-other-file.ext", Some("password".to_string())).await?;
    let mut f = std::fs::File::create("downloaded_file2.txt")?;
    f.write_all(&content)?;

    Ok(())
}

创建存储桶

使用API创建一个新存储桶以上传文件。

use waifuvault::{ApiCaller, api::WaifuUploadRequest};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let caller = ApiCaller::new();

    // Create a new bucket to upload files to
    let bucket = caller.create_bucket().await?;

    // You can now use the bucket token to upload files to the bucket

    let request = WaifuUploadRequest::new()
        .file("/some/file/path")
        .bucket(&bucket.token)
        .password("set a password")
        .one_time_download(true);
    let response = caller.upload_file(request).await?;

    // Do something with the response

    Ok(())
}

删除存储桶

删除存储桶及其包含的所有文件。

以下参数是必需的

  • token:要删除的存储桶的令牌
use waifuvault::ApiCaller;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let caller = ApiCaller::new();

    let token = "some-bucket-token";

    // Delete the bucket and all files within
    caller.delete_bucket(token).await?;

    Ok(())
}

获取存储桶信息

检索存储桶中文件的信息。

以下参数是必需的

  • token:要检查的存储桶的令牌
use waifuvault::ApiCaller;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let caller = ApiCaller::new();

    let token = "some-bucket-token";

    // Get bucket information
    let info = caller.get_bucket(token).await?;

    // You can now get access to the file information for files inside the bucket
    for file in info.files.iter() {
        // Do something with the file information
    }

    Ok(())
}

依赖项

~6–19MB
~284K SLoC