Socket
Book a DemoInstallSign in
Socket

ably

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ably

0.2.0
Source
Cargo
Version published
Maintainers
1
Created
Source

Ably

Ably is the platform that powers synchronized digital experiences in realtime. Whether attending an event in a virtual venue, receiving realtime financial information, or monitoring live car performance data – consumers simply expect realtime digital experiences as standard. Ably provides a suite of APIs to build, extend, and deliver powerful digital experiences in realtime for more than 250 million devices across 80 countries each month. Organizations like Bloomberg, HubSpot, Verizon, and Hopin depend on Ably’s platform to offload the growing complexity of business-critical realtime data synchronization at global scale. For more information, see the Ably documentation.

This is a Rust client library for the Ably REST API. It does not currently include any realtime features.

NOTE: This SDK is a developer preview and not considered production ready.

Installation

Add the ably and tokio crates to your Cargo.toml:

[dependencies]
ably = "0.2.0"
tokio = { version = "1", features = ["full"] }

Using the REST API

Initialize A Client

Initialize a client with a method to authenticate with Ably.

  • With an API Key:
let client = ably::Rest::from("xVLyHw.SmDuMg:************");
  • With an auth URL:
let auth_url = "https://example.com/auth".parse()?;

let client = ably::ClientOptions::new().auth_url(auth_url).client()?;

Publish A Message

Given:

let channel = client.channels.get("test");
  • Publish a string:
let result = channel.publish().string("a string").send().await;
  • Publish a JSON object:
#[derive(Serialize)]
struct Point {
    x: i32,
    y: i32,
}
let point = Point { x: 3, y: 4 };
let result = channel.publish().json(point).send().await;
  • Publish binary data:
let data = vec![0x01, 0x02, 0x03, 0x04];
let result = channel.publish().binary(data).send().await;

Retrieve History

let mut pages = channel.history().pages();
while let Some(Ok(page)) = pages.next().await {
    for msg in page.items().await? {
        println!("message data = {:?}", msg.data);
    }
}

Retrieve Presence

let mut pages = channel.presence.get().pages();
while let Some(Ok(page)) = pages.next().await {
    for msg in page.items().await? {
        println!("presence data = {:?}", msg.data);
    }
}

Retrieve Presence History

let mut pages = channel.presence.history().pages();
while let Some(Ok(page)) = pages.next().await {
    for msg in page.items().await? {
        println!("presence data = {:?}", msg.data);
    }
}

Encrypted Message Data

When a 128 bit or 256 bit key is provided to the library, the data attributes of all messages are encrypted and decrypted automatically using that key. The secret key is never transmitted to Ably. See https://www.ably.com/documentation/realtime/encryption

// Initialize a channel with cipher parameters so that published messages
// get encrypted.
let cipher_key = ably::crypto::generate_random_key::<ably::crypto::Key256>();
let params = ably::rest::CipherParams::from(cipher_key);
let channel = client.channels.name("rust-example").cipher(params).get();

channel
    .publish()
    .name("name is not encrypted")
    .string("sensitive data is encrypted")
    .send()
    .await;

Request A Token

let result = client
    .auth
    .request_token()
    .client_id("test@example.com")
    .capability(r#"{"example":["subscribe"]}"#)
    .send()
    .await;

Retrieve Application Statistics

let mut pages = client.stats().pages();
while let Some(Ok(page)) = pages.next().await {
    for stats in page.items().await? {
        println!("stats = {:?}", stats);
    }
}

FAQs

Package last updated on 08 Nov 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.