4 releases (breaking)

0.4.0 Sep 17, 2023
0.3.0 Sep 1, 2023
0.2.0 Aug 28, 2023
0.1.0 Aug 27, 2023
0.0.1 Aug 5, 2023

#9 in #push-notifications

30 downloads per month

MIT license

63KB
1.5K SLoC

gotify-rs

Build Status Crates.io Documentation License: MIT

An idiomatic Rust client for Gotify.

Overview

By default, this crate only exposes the Client::health(), Client::version() methods. All other categories of endpoints must be enabled by the corresponding feature flags.

Table of available feature flags
Feature flag Enabled methods Note
app Client::create_message()
manage-applications Client::get_applications(), Client::create_application(), Client::update_application(), Client::delete_application(), Client::delete_application_image()
manage-clients Client::get_clients(), Client::create_client(), Client::update_client(), Client::delete_client()
manage-messages Client::get_application_messages(), Client::delete_application_messages(), Client::get_messages(), Client::delete_messages(), Client::delete_message() doesn't include Client::create_message() and Client::stream_messages()
manage-plugins Client::get_plugins(), Client::get_plugin_config(), Client::update_plugin_config(), Client::disable_plugin(), Client::get_plugin_display(), Client::enable_plugin()
manage-users Client::get_current_user(), Client::update_current_user(), Client::get_users(), Client::get_user(), Client::update_user(), Client::delete_user()
websocket Client::stream_messages() enables additional dependencies (mainly tokio-tungstenite)

Most methods that send data to Gotify's API use the builder pattern for a more readable API and better support of future additions to Gotify's API. If an optional parameter is added to an endpoint, it can be be added as a builder method without causing to much breakage. All builders implement IntoFuture, so those methods can also be awaited directly, just as if they were regular async methods.

Examples

Creating a message

let client: gotify::AppClient = gotify::Client::new(GOTIFY_URL, GOTIFY_APP_TOKEN)?;

client.create_message("Lorem ipsum dolor sit amet").with_title("Lorem Ipsum").await?;

Listening for new messages

use futures_util::StreamExt;

let client: gotify::ClientClient = gotify::Client::new(GOTIFY_URL, GOTIFY_CLIENT_TOKEN)?;

let mut messages = client.stream_messages().await?;

while let Some(result) = messages.next().await {
    let message = result?;

    println!("{message:#?}")
}

License

This project is licensed under the MIT License.

See LICENSE for more information.

Dependencies

~5–21MB
~246K SLoC