Rust Salesforce API SDK
This crate to supports the Salesforce APIs:
- Rest API,
version 67.0 (latest, Summer 2028), enabled via the featurerest-api - Bulk API v1
- Bulk API v2
- Streaming API
These APIs are not yet implemented, but high on the list. If you are interested in contributing, or want to speed up the development, please go to Discussions and leave a message.
- Tooling API
- Metadata API
- CPQ API
- Heroku Platform API
- Streaming API
Forked from rustforce and from tance77, for the rustforce repo seemed to be abandoned. The rustforce repo also lacked some important features and had some design flows around API versioning.
[dependencies]
rustsf = { version = "0.0.2", features = ["rest-api"] }use rustsf::{Client, RestApi, Error, QueryResponse};
use serde::Deserialize;
use std::env;
#[derive(Deserialize, Debug)]
#[serde(rename_all = "PascalCase")]
struct Account {
id: String,
name: String,
}
#[tokio::main]
async fn main() -> Result<(), Error> {
let client_id = env::var("SFDC_CLIENT_ID").unwrap();
let client_secret = env::var("SFDC_CLIENT_SECRET").unwrap();
let username = env::var("SFDC_USERNAME").unwrap();
let password = env::var("SFDC_PASSWORD").unwrap();
let mut client = Client::new();
client.set_client_id(&client_id);
client.set_client_secret(&client_secret);
client.login_with_credential(&username, &password).await?;
let mut api = RestApi::new(client);
let res: QueryResponse<Account> = api.query("SELECT Id, Name FROM Account").await?;
println!("{:?}", res);
Ok(())
}let mut client = Client::new();
client.set_client_id(&client_id);
client.set_client_secret(&client_secret);
client.login_with_credential(&username, &password).await?;let mut client = Client::new();
client.login_by_soap(&username, &password).await?;let mut client = Client::new();
client.set_instance_url("https://na1.salesforce.com");
client.set_access_token(token, issued_at, token_type);let mut client = Client::new();
client.login_by_sfdx_auth_url("sfdx auth url").await?;client.set_refresh_token("your_refresh_token");
client.refresh().await?;All REST API methods are accessed through RestApi:
let mut api = RestApi::new(client);let res: QueryResponse<Account> = api.query("SELECT Id, Name FROM Account").await?;Examples: Query, Query All, Query More
Finds a single record by its Salesforce ID. Example:
let account = api.find_by_id::<Account>("Account", "{sf_id}").await?;let account = Account { name: "Test Account"};
let res = api.create_sobject("Account", account).await?;
let res = api.create("Account", vec![account]).await?;Examples:
- Create a single record Simple example or Alternative example
- Create
api.update("Account", "{sobject_id}", params).await?;let res = api.upsert("Account", "{external_key_name}", "{external_key}", params).await?;
println!("{:?}", res.status()); // 200 = updated, 201 = createdapi.destroy("Account", "{sobject_id}").await?;use rustsf::rest_api::responses::DescribeGlobalResponse;
let res: DescribeGlobalResponse = api.describe_global().await?;use rustforce::DescribeResponse;
let res: DescribeResponse = api.describe("Account").await?;use rustforce::VersionResponse;
let versions: Vec<VersionResponse> = api.versions().await?;use rustforce::SearchResponse;
let res: SearchResponse = api.search_sosl("FIND {Rust}").await?;use rustforce::BulkApi;
let mut bulk = BulkApi::new(client);
let res = bulk.create_job(params).await?;use rustforce::BulkApiV2;
let mut bulk = BulkApiV2::new(client);
let res = bulk.create_job(params).await?;