5 个版本
0.2.3 | 2024年5月29日 |
---|---|
0.2.2 | 2024年5月26日 |
0.2.1 | 2024年5月25日 |
0.2.0 | 2024年5月24日 |
0.1.0 | 2024年4月13日 |
#4 in #unofficial
298 每月下载次数
420KB
9K SLoC
非官方 Appwrite Rust SDK
此 SDK 与 Appwrite 服务器版本 1.5.x 兼容。这是用于从您的 Rust 服务器端代码集成 Appwrite 的 Rust SDK
Appwrite 是一个开源的 BaaS 服务器,通过简单的 REST API 抽象和简化了复杂的重复性开发任务。Appwrite 旨在帮助您更快、更安全地开发应用程序。使用 Rust 将您的应用程序与 Appwrite 服务器集成,以便轻松交互所有 Appwrite 后端 API 和工具。有关完整的 API 文档和教程,请访问 https://appwrite.io/docs
安装
将此添加到您的包的 Cargo.toml
文件中
[dependencies]
unofficial_appwrite = "0.1.0"
serde_json = "1.0.111"
您可以从命令行安装包
cargo add unofficial_appwrite serde_json
入门
初始化 & 发送 API 请求
一旦添加了依赖项,使用 SDK 入门变得极其简单;您需要做的只是将包导入到代码中,设置您的 Appwrite 凭据,并开始调用 API。以下是一个简单的示例
use unofficial_appwrite::client::ClientBuilder;
use unofficial_appwrite::error::Error;
use unofficial_appwrite::services::server::users::Users;
use unofficial_appwrite::id::ID;
#[tokio::main]
async fn main() -> Result<(), Error> {
let client = ClientBuilder::default()
.set_endpoint("http://[HOSTNAME_OR_IP]/v1") // Make sure your endpoint is accessible
.set_project("5ff...")? // Your project ID
.set_key("cd868c7af8bdc893b4...93b7535db89")?
//.set_self_signed(false)? // Use only on dev mode with a self-signed SSL cert
.build()?;
//create new user
let create_user = Users::create(
&client,
ID::unique(),
Some("[email protected]"),
None,
Some("password"),
Some("Walter O'Brien"),
)
.await?;
dbg!("{:?}", create_user);
}
其他示例
用户
use unofficial_appwrite::client::ClientBuilder;
use unofficial_appwrite::error::Error;
use unofficial_appwrite::services::server::users::Users;
use serde_json::{json, Map};
#[tokio::main]
async fn main() -> Result<(), Error> {
let client = ClientBuilder::default()
.set_endpoint("http://[HOSTNAME_OR_IP]/v1") // Make sure your endpoint is accessible
.set_project("5ff33...")? // Your project ID
.set_key("cd868c7af8bdc893b4...93b7535db89")?
//.set_self_signed(false)? // Use only on dev mode with a self-signed SSL cert
.build()?;
//create user preference
let user_prefs = Users::get_prefs(&client, "6...64").await?;
dbg!("{:#?}", user_prefs);
let mut prefs = Map::new();
prefs.insert("isAdmin".to_string(), json!(true));
let user_update_prefs = Users::update_prefs(&client, "6...4", prefs).await?;
dbg!("{:#?}", user_update_prefs);
}
数据库
use unofficial_appwrite::client::ClientBuilder;
use unofficial_appwrite::error::Error;
use serde_json::{json, Map};
use unofficial_appwrite::id::ID;
use unofficial_appwrite::services::server::databases::Databases;
use unofficial_appwrite::permission::Permission;
use unofficial_appwrite::enums::relationship_type::RelationshipType;
use unofficial_appwrite::query::Query;
#[tokio::main]
async fn main() -> Result<(), Error> {
let client = ClientBuilder::default()
.set_endpoint("http://[HOSTNAME_OR_IP]/v1") // Make sure your endpoint is accessible
.set_project("5ff3379a01d25")? // Your project ID
.set_key("cd868c7af8bdc893b4...93b7535db89")?
//.set_self_signed(false)? // Use only on dev mode with a self-signed SSL cert
.build()?;
// create database
let create_db = Databases::create(&client, ID::unique(), "test_db", None).await?;
dbg!(create_db);
let create_collection = Databases::create_collection(
&client,"6618...76",ID::unique(),"test_collection_1",
Some(vec![
Permission::read("any"),
Permission::create("user:22222346"),
]),
None,None,).await?;
dbg!(create_collection);
// create boolean attribute
let att = Databases::create_boolean_attribute(
&client,"6618...76","6618...d4","isAdmin",true,None,None,).await?;
dbg!(att);
// create string attribute
let name = Databases::create_string_attribute(
&client,"6618...76","6618...d4","title",255,true,None,None,None,).await?;
dbg!(name);
// create documents
let mut data = Map::new();
data.insert(String::from("isAdmin"), json!(false));
data.insert(String::from("title"), json!("next1"));
let create_doc = Databases::create_documents(
&client,"6618...76","6618...d4",ID::unique(),data,None,).await?;
dbg!(create_doc);
// create relationship attribute
let relationship = Databases::create_relationship_attribute(
&client,"6618...76","6618...d4","6619...1e",
RelationshipType::OneToOne,
None,Some("test_col_2"),None,None,).await?;
dbg!(relationship);
// get a list on collections
let queries = vec![Query::equal(r"$id", json!(vec!["6618ef06d269bf4110d4"]))];
let col_list = Databases::list_collections(
&client,
"6618eec286a4ef198076",
Some(Query::equal(r"$id", json!(vec!["6619010ddab914e6b01e"]))),
Some(queries),
)
.await?;
dbg!(col_list);
}
存储
use unofficial_appwrite::client::ClientBuilder;
use unofficial_appwrite::error::Error;
use unofficial_appwrite::id::ID;
use unofficial_appwrite::services::server::storage::Storage;
use futures_util::{pin_mut, StreamExt};
use std::fs;
#[tokio::main]
async fn main() -> Result<(), Error> {
let client = ClientBuilder::default()
.set_endpoint("http://[HOSTNAME_OR_IP]/v1") // Make sure your endpoint is accessible
.set_project("5ff3379a01d25")? // Your project ID
.set_key("cd868c7af8bdc893b4...93b7535db89")?
//.set_self_signed(false)? // Use only on dev mode with a self-signed SSL cert
.build()?;
// create bucket
let create_buk = Storage::create_bucket(
&client,ID::unique(),"My Bucket",None,None,None,None,None,None,None,None,).await?;
dbg!(create_buk);
// create a file without getting upload progress
let create_file_with_no_progress = Storage::create_files(
&client,
"65d20d5c8096032a03cd",
ID::unique(),
r"c:\Users\pc\Downloads\Video\New folder (2)\Folder 1\Ultimate Flutter for Cross-Platform App Development (Temidayo Adefioye) (Z-Library).pdf",
String::from("sgs_deadlines_next.pdf"),
None,
)
.await?;
dbg!(create_file_with_no_progress);
//or create a file and get upload progress through streams
let create_file_and_stream_upload_progress = Storage::create_files_streamed(
&client,
"65d20d5c8096032a03cd",
ID::unique(),
r"c:\Users\pc\Downloads\Video\New folder (2)\Folder 1\Ultimate Flutter for Cross-Platform App Development (Temidayo Adefioye) (Z-Library).pdf",
String::from("sgs_deadlines_next_3.pdf"),
None,
)
.await;
pin_mut!(create_file_and_stream_upload_progress);
while let Some(data) = create_file_and_stream_upload_progress.next().await {
let res = data.unwrap();
let file = res.0;
println!("==>{:?}===>{:?}", file, res.1);
}
// get file
let get_file =
Storage::get_file(&client, "661...e9", "661...71e").await?;
dbg!(get_file);
// download file
let get_file_download =
Storage::get_file_download(&client, "661...e9", "661...71e").await?;
fs::write(
r"C:\Users\pc\Downloads\Documents\test\second\new.mp4",
get_file_download,
)
.expect("didn't work");
}
实时
use futures_util::{pin_mut, StreamExt};
use unofficial_appwrite::{client::ClientBuilder, error::Error, realtime::RealTime};
#[tokio::main]
async fn main() -> Result<(), Error> {
let client = ClientBuilder::default()
.set_endpoint("http://[HOSTNAME_OR_IP]/v1") // Make sure your endpoint is accessible
.set_project("5ff3...")? // Your project ID
.set_key("cd868c7af8bdc893b4...93b7535db89")?
//.set_self_signed(false)? // Use only on dev mode with a self-signed SSL cert
.build()?;
// subscribe to realtime
let stream = RealTime::subscribe(
&client,
vec!["databases.6618eec286a4ef198076.collections.6618ef06d269bf4110d4.documents"],
)
.await;
pin_mut!(stream);
while let Some(data) = stream.next().await {
println!("=====>{:?}<=====", data);
}
}
工具
查询
use unofficial_appwrite::query::Query;
Query::equal(r"$id", json!(vec!["6618ef06d269bf4110d4"]))
ID
use unofficial_appwrite::id::ID;
ID::unique();
权限
use unofficial_appwrite::permission::Permission;
Permission::read("any"),
Permission::create("user:22222346"),
角色
use unofficial_appwrite::role::Role;
Role::any()
注意:对于其他示例,请查看官方文档或 SDK 的官方文档作为使用此 SDK 的指南。
了解更多信息
您可以使用以下资源了解更多信息并获得帮助
- 🚀 入门教程 - https://appwrite.io/docs/getting-started-for-server
- 📜 Appwrite 文档 - https://appwrite.io/docs
- 💬 Discord 社区 - https://appwrite.io/discord
接下来做什么
- 清理一些多余的代码
贡献
依赖项
~7–21MB
~335K SLoC