2 个版本
0.1.1 | 2024年7月6日 |
---|---|
0.1.0 | 2024年7月6日 |
在 网页编程 中排名 417
每月下载量 217
20KB
301 行
supabase-function-rs
库
概述
supabase-function-rs
是一个用于与 Supabase Edge Functions 交互的 Rust 客户端库。该库提供了一种简单的方法来使用各种 HTTP 方法、头和正文类型调用 Supabase 函数,包括 JSON、纯文本、表单数据、文件上传、blob 和数组缓冲区。它还支持为函数调用设置自定义区域。
功能
- 使用不同的 HTTP 方法调用 Supabase Edge Functions。
- 支持各种正文类型:JSON、纯文本、表单数据、文件上传、blob 和数组缓冲区。
- 支持自定义头。
- 区域特定的函数调用。
- 全面的错误处理。
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
supabase-function-rs = "0.1.0"
使用方法
初始化
要开始,使用 Supabase URL 以及可选的头和区域初始化 FunctionsClient
。
use supabase_function_rs::{FunctionsClient, FunctionRegion};
use std::collections::HashMap;
let url = "https://your-supabase-url";
let mut headers = HashMap::new();
headers.insert("Custom-Header".to_string(), "Header-Value".to_string());
let client = FunctionsClient::new(url.to_string(), Some(headers), Some(FunctionRegion::UsEast1));
client.set_auth("your-jwt-token".to_string());
基本函数调用
use supabase_function_rs::{FunctionInvokeOptions, HttpMethod, InvokeBody, FunctionsResponse, ResponseData};
use serde_json::json;
use std::collections::HashMap;
let mut invoke_options = FunctionInvokeOptions::default();
invoke_options.method = Some(HttpMethod::Post);
let mut json_body = HashMap::new();
json_body.insert("request_key".to_string(), json!("request_value"));
invoke_options.body = Some(InvokeBody::Json(json_body));
match client.invoke("function-name", Some(invoke_options)).await {
Ok(response) => match response {
FunctionsResponse::Success { data } => match data {
ResponseData::Json(json) => {
println!("Response: {:?}", json);
}
_ => panic!("Expected JSON response data"),
},
FunctionsResponse::Failure { error } => {
println!("Function call failed: {}", error);
}
},
Err(e) => {
println!("Error invoking function: {}", e);
}
}
不同正文类型的函数调用
纯文本
invoke_options.body = Some(InvokeBody::String("request text".to_string()));
match client.invoke("function-name", Some(invoke_options)).await {
Ok(response) => { /* Handle response */ },
Err(e) => { /* Handle error */ }
}
表单数据
let mut form_data = HashMap::new();
form_data.insert("field1".to_string(), "value1".to_string());
form_data.insert("field2".to_string(), "value2".to_string());
invoke_options.body = Some(InvokeBody::FormData(form_data));
match client.invoke("function-name", Some(invoke_options)).await {
Ok(response) => { /* Handle response */ },
Err(e) => { /* Handle error */ }
}
文件上传
use std::fs::File;
use std::io::Read;
let path = "test_file.txt";
let mut file = File::open(&path).unwrap();
let mut file_content = Vec::new();
file.read_to_end(&mut file_content).unwrap();
invoke_options.body = Some(InvokeBody::File(file_content));
match client.invoke("function-name", Some(invoke_options)).await {
Ok(response) => { /* Handle response */ },
Err(e) => { /* Handle error */ }
}
blob
let blob: Vec<u8> = vec![1, 2, 3, 4, 5]; // Example blob data
invoke_options.body = Some(InvokeBody::Blob(blob));
match client.invoke("function-name", Some(invoke_options)).await {
Ok(response) => { /* Handle response */ },
Err(e) => { /* Handle error */ }
}
ArrayBuffer
let array_buffer: Vec<u8> = vec![1, 2, 3, 4, 5]; // Example array buffer data
invoke_options.body = Some(InvokeBody::ArrayBuffer(array_buffer));
match client.invoke("function-name", Some(invoke_options)).await {
Ok(response) => { /* Handle response */ },
Err(e) => { /* Handle error */ }
}
设置自定义区域
调用函数时可以指定自定义区域
invoke_options.region = Some(FunctionRegion::UsEast1);
match client.invoke("function-name", Some(invoke_options)).await {
Ok(response) => { /* Handle response */ },
Err(e) => { /* Handle error */ }
}
错误处理
库提供了具有特定错误类型的全面错误处理
FunctionsFetchError
:表示请求发送失败。FunctionsRelayError
:表示调用函数时的中继错误。FunctionsHttpError
:表示函数返回了非 2xx 状态码。
示例
match client.invoke("function-name", Some(invoke_options)).await {
Ok(response) => { /* Handle response */ },
Err(FunctionsError::FetchError(e)) => println!("Fetch error: {}", e),
Err(FunctionsError::RelayError(e)) => println!("Relay error: {}", e),
Err(FunctionsError::HttpError(e)) => println!("HTTP error: {}", e),
Err(e) => println!("Other error: {}", e),
}
测试
要运行测试,使用
cargo test --test functions_client_tests
贡献
请随意提出问题或提交功能、错误修复或改进的 pull request。
许可证
本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。
鸣谢
特别感谢贡献者和开源社区的支持和贡献。
依赖关系
~7–18MB
~258K SLoC