We are pleased to announce that the OneSignal Rust API Client Library is now available. This new Rust client supports developers using OneSignal by facilitating integrating the OneSignal REST API with your backend events, data, and more. This release is part of our ongoing initiative to add server SDKs across various languages and technologies.
Rust is considered to be one of the most powerful and versatile modern programming languages and we're happy to support it! We're relentlessly working towards our goal to move all our services and technologies to Rust.
What is this library?
OneSignal Rust API is a faster way to get started using OneSignal REST API that is accessible as a REST service.
This library has been generated using OpenApi Generator project with several modifications and fixes on our side.
Installation
Put the package under your project folder in a directory named onesignal
and add the following to Cargo.toml
under [dependencies]
:
onesignal = { path = "./onesignal" }
Examples: Send a notification
Use the following dependency:
use onesignal::*;
use onesignal::apis::configuration::Configuration;
use onesignal::models::{Notification};
Define the constants. You can find all the values on the dashboard page of your app.
const APP_ID: &str = "<YOUR_APP_ID>";
const APP_KEY_TOKEN: &str = "<YOUR_APP_KEY_TOKEN>";
const USER_KEY_TOKEN: &str = "<YOUR_USER_KEY_TOKEN>";
Create a configuration object:
fn create_configuration() -> Box<Configuration> {
let mut configuration = apis::configuration::Configuration::new();
configuration.app_key_token = Some(String::from(APP_KEY_TOKEN));
configuration.user_key_token = Some(String::from(USER_KEY_TOKEN));
Box::new(configuration)
}
Create a notification object:
fn create_notification() -> Box<Notification> {
let mut notification = Notification::new(String::from(APP_ID));
let mut string_map = StringMap::new();
string_map.en = Some(String::from("Rust test notification"));
notification.contents = Some(Box::new(string_map));
notification.is_chrome_web = Some(true);
notification.is_any_web = Some(true);
notification.included_segments = Some(vec![String::from("Subscribed Users")]);
Box::new(notification)
}
Send a notification:
async fn should_create_notification() {
// Prepare configuration and the notification objects
let configuration = create_configuration();
let notification = create_notification();
// Send notification to the server
let create_notification_response= apis::default_api::create_notification(&configuration, *notification).await;
// Check the result
if let Ok(ref created_notification) = create_notification_response {
println!("Created notification id: {}", created_notification.id);
}
if let Err(ref created_notification_error) = create_notification_response {
println!("Created notification error: {}", created_notification_error.to_string());
}
}
Documentation for API Endpoints
All URIs are relative to https://onesignal.mydomain.com/api/v1
Class | Method | HTTP request | Description |
---|---|---|---|
DefaultApi | cancel_notification | DELETE /notifications/{notification_id} | Stop a scheduled or currently outgoing notification |
DefaultApi | create_app | POST /apps | Create an app |
DefaultApi | create_notification | POST /notifications | Create notification |
DefaultApi | create_player | POST /players | Add a device |
DefaultApi | create_segments | POST /apps/{app_id}/segments | Create Segments |
DefaultApi | delete_player | DELETE /players/{player_id} | Delete a user record |
DefaultApi | delete_segments | DELETE /apps/{app_id}/segments/{segment_id} | Delete Segments |
DefaultApi | export_players | POST /players/csv_export?app_id={app_id} | CSV export |
DefaultApi | get_app | GET /apps/{app_id} | View an app |
DefaultApi | get_apps | GET /apps | View apps |
DefaultApi | get_notification | GET /notifications/{notification_id} | View notification |
DefaultApi | get_notification_history | POST /notifications/{notification_id}/history | Notification History |
DefaultApi | get_notifications | GET /notifications | View notifications |
DefaultApi | get_outcomes | GET /apps/{app_id}/outcomes | View Outcomes |
DefaultApi | get_player | GET /players/{player_id} | View device |
DefaultApi | get_players | GET /players | View devices |
DefaultApi | update_app | PUT /apps/{app_id} | Update an app |
DefaultApi | update_player | PUT /players/{player_id} | Edit device |
DefaultApi | update_player_tags | PUT /apps/{app_id}/users/{external_user_id} | Edit tags with external user id |
Documentation For Models
- App
- Button
- DeliveryData
- ExportPlayersRequestBody
- Filter
- FilterExpressions
- FilterNotificationTarget
- GetNotificationRequestBody
- InlineResponse200
- InlineResponse2001
- InlineResponse2002
- InlineResponse2005
- InlineResponse2007
- InlineResponse2008
- InlineResponse201
- InlineResponse400
- InlineResponse4001
- InlineResponse4002
- InlineResponse4003
- InvalidIdentifierError
- Notification
- Notification200Errors
- NotificationAllOf
- NotificationAllOfAndroidBackgroundLayout
- NotificationSlice
- NotificationTarget
- NotificationWithMeta
- NotificationWithMetaAllOf
- Operator
- OutcomeData
- OutcomesData
- PlatformDeliveryData
- Player
- PlayerNotificationTarget
- PlayerSlice
- Purchase
- Segment
- SegmentNotificationTarget
- StringMap
- UpdatePlayerTagsRequestBody
To get access to the crate's generated documentation, use:
cargo doc --open
You can find more examples in our GitHub repo!
Reference
Visit our REST API Reference documentation for a complete list of our supported endpoints.
Visit our Rust API reference for a list of supported functions and view implementation examples in Rust.
Share Your Feedback
If you’ve had a chance to use our new Rust API Library and have any feedback or suggestions you’d like to share, please reach out to us on the GitHub repository or our Discord server.
If you encounter any bugs or technical issues while using our new Rust API Library, we want to know so we can make things right. Please be sure to file a report on our GitHub repository.
If you’ve found the plugin helpful, we’d appreciate it if you left us a review on G2.