Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crate-name at crates.io crate-name at docs.rs

RustSF

Rust Salesforce API SDK

This crate to supports the Salesforce APIs:

  • Rest API,
    version 67.0 (latest, Summer 2028), enabled via the feature rest-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.

Usage

[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(())
}

Authentication

Username Password Flow (OAuth2)

let mut client = Client::new();
client.set_client_id(&client_id);
client.set_client_secret(&client_secret);
client.login_with_credential(&username, &password).await?;

SOAP Login

let mut client = Client::new();
client.login_by_soap(&username, &password).await?;

Using an Existing Access Token

let mut client = Client::new();
client.set_instance_url("https://na1.salesforce.com");
client.set_access_token(token, issued_at, token_type);

SFDX AUTH URL

let mut client = Client::new();
client.login_by_sfdx_auth_url("sfdx auth url").await?;

Refresh Token

client.set_refresh_token("your_refresh_token");
client.refresh().await?;

REST API

All REST API methods are accessed through RestApi:

Example:

let mut api = RestApi::new(client);

Query Records

let res: QueryResponse<Account> = api.query("SELECT Id, Name FROM Account").await?;

Examples: Query, Query All, Query More

Find By Id

Finds a single record by its Salesforce ID. Example:

let account = api.find_by_id::<Account>("Account", "{sf_id}").await?;

CRUD Record operations

let account = Account { name: "Test Account"};

let res = api.create_sobject("Account", account).await?;
let res = api.create("Account", vec![account]).await?;

Examples:

Update Record

api.update("Account", "{sobject_id}", params).await?;

Upsert Record

let res = api.upsert("Account", "{external_key_name}", "{external_key}", params).await?;
println!("{:?}", res.status()); // 200 = updated, 201 = created

Delete Record

api.destroy("Account", "{sobject_id}").await?;

Describe Global

use rustsf::rest_api::responses::DescribeGlobalResponse;

let res: DescribeGlobalResponse = api.describe_global().await?;

Describe SObject

use rustforce::DescribeResponse;

let res: DescribeResponse = api.describe("Account").await?;

Versions

use rustforce::VersionResponse;

let versions: Vec<VersionResponse> = api.versions().await?;

Search (SOSL)

use rustforce::SearchResponse;

let res: SearchResponse = api.search_sosl("FIND {Rust}").await?;

Bulk API v1

use rustforce::BulkApi;

let mut bulk = BulkApi::new(client);
let res = bulk.create_job(params).await?;

Bulk API v2

use rustforce::BulkApiV2;

let mut bulk = BulkApiV2::new(client);
let res = bulk.create_job(params).await?;

About

Rust Salesforce API Client

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages