Telegram bot API client for Rust

Overview

frankenstein

Crates.io docs page

Frankenstein

Telegram bot API client for Rust.

It's a complete wrapper for Telegram bot API and it's up to date with version 5.2 of the API.

Frankenstein data structures (rust structs and enums) are mapped one-to-one from Telegram bot API objects and method params. Almost all structs and enums are automatically generated from Telegram Bot API docs with frankestein_creator

Installation

Add this to your Cargo.toml

[dependencies]
frankenstein = "0.3.0"

Usage

Data structures

All objects described in the API docs have direct counterparts in the frankenstein. For example, in the docs there is the user type:

id	Integer	Unique identifier for this user or bot. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier.
is_bot	Boolean	True, if this user is a bot
first_name	String	User's or bot's first name
last_name	String	Optional. User's or bot's last name
username	String	Optional. User's or bot's username
language_code	String	Optional. IETF language tag of the user's language
can_join_groups	Boolean	Optional. True, if the bot can be invited to groups. Returned only in getMe.
can_read_all_group_messages	Boolean	Optional. True, if privacy mode is disabled for the bot. Returned only in getMe.
supports_inline_queries	Boolean	Optional. True, if the bot supports inline queries. Returned only in getMe.

In frankenstein, it's described as:

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct User {
    pub id: isize,

    pub is_bot: bool,

    pub first_name: String,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub last_name: Option<String>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub language_code: Option<String>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub can_join_groups: Option<bool>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub can_read_all_group_messages: Option<bool>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub supports_inline_queries: Option<bool>,
}

Optional fields are described as Option enum.

Every struct has the new method which used for initialization. It accepts only required fields, optional fields are set to None:

pub fn new(id: isize, is_bot: bool, first_name: String) -> User {
    Self {
        id,
        is_bot,
        first_name,
        last_name: None,
        username: None,
        language_code: None,
        can_join_groups: None,
        can_read_all_group_messages: None,
        supports_inline_queries: None,
    }
}

All fields have setter and getter methods :

...

 pub fn set_supports_inline_queries(&mut self, supports_inline_queries: Option<bool>) {
     self.supports_inline_queries = supports_inline_queries;
 }
 pub fn id(&self) -> isize {
     self.id
 }

...

For method parameters, the same approach is used. The only difference for parameters is the name of the struct in frankenstein ends with Params postfix.

For example, parameters for leaveChat method:

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct LeaveChatParams {
    chat_id: ChatIdEnum,
}

Making requests

To make a request to the telegram bot api:

  1. Initialize the Api struct:
use frankenstein::Api;
use frankenstein::TelegramApi;

...

let token = "My_token".to_string()
let api = Api::new(token);
  1. Use this api object to make requests to the Bot API:
let mut update_params = GetUpdatesParams::new();
update_params.set_allowed_updates(Some(vec!["message".to_string()]));

let result = api.get_updates(&update_params);

Every function returns a Result enum with a successful response or failed response.

See a complete example in the examples directory.

Uploading files

Some methods in the API allow uploading files. In the frankenstein for this FileEnum struct is used:

pub enum FileEnum {
    InputFileVariant(InputFile),
    StringVariant(String),
}

pub struct InputFile {
    path: std::path::PathBuf
}

It has two variants:

  • FileEnum::StringVariant is used to pass id of the already uploaded file
  • FileEnum::InputFileVariant is used to upload a new file using multipart upload.

Documentation

Frankenstein implements all telegram bot api methods. To see which parameters you should pass, check docs.rs

Replacing the default http client

The library uses ureq http client by default, but it can be easily replaced with any http client of your choice:

  1. ureq comes with a default feature (impl). So the feature should be disabled:
frankenstein = { version = "0.3", default-features = false }
  1. Implement TelegramApi trait which requires two functions:
  • request_with_form_data is used to upload files
  • request is used for requests without file uploads

You can check the default TelegramApi trait implementation for ureq.

Also, you can take a look at the implementation for isahc http client in the examples directory.

Without the default ureq implementation, frankenstein has only two dependencies - serde and serde_json.

Contributing

  1. Fork it!
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Author

Ayrat Badykov (@ayrat555)

Comments
  • Stack Overflow at `api.get_updates` in example `async_reply_to_message_updates.rs`

    Stack Overflow at `api.get_updates` in example `async_reply_to_message_updates.rs`

    Hi! I tried running the example async_reply_to_message_updates.rs. It crashed with a stack overflow error:

    thread 'main' has overflowed its stack
    error: process didn't exit successfully: `target\debug\telegram-bot-test.exe` (exit code: 0xc00000fd, STATUS_STACK_OVERFLOW)
    
    Process finished with exit code -1073741571 (0xC00000FD)
    

    I was able to pinpoint the overflowing call in the example:

    https://github.com/ayrat555/frankenstein/blob/1217d29c3b6c8f9866d0c21cbba42517e62ce52e/examples/async_reply_to_message_updates.rs#L18

    Running frankenstein = { version = "0.13.0", features = ["async-http-client"] }, rustc 1.60.0 (7737e0b5c 2022-04-04), Win 10.

    I will investigate further. Maybe the error is within the example, or my project setup

    opened by johannesvollmer 28
  • Stack Overflow on sending message

    Stack Overflow on sending message

    Hey. I saw other stack-overflow issue, but it was related to different part of the code. I still have this issue reproducible on windows with Visual Studio toolchain (2022 Preview, rust version 1.61.0, Windows 10 21H2). API response serialization fails after sending message.

    This is happening at telegram_api_impl.rs:51:

        pub fn decode_response<T: serde::de::DeserializeOwned>(response: Response) -> Result<T, Error> {
            match response.into_string() {
                Ok(message) => {
                    let json_result: Result<T, serde_json::Error> = serde_json::from_str(&message); // < here
    

    Here is (slightly modified) message that was causing this. It isn't even that large.

    "{"ok":true,"result":{"message_id":101,"from":{"id":661885372,"is_bot":true,"first_name":"________________","username":"________________"},"chat":{"id":281814033,"first_name":"____","last_name":"__________","username":"_________","type":"private"},"date":1654353153,"reply_to_message":{"message_id":98,"from":{"id":281814033,"is_bot":false,"first_name":"____","last_name":"__________","username":"_________","language_code":"uk"},"chat":{"id":281814033,"first_name":"____","last_name":"__________","username":"_________","type":"private"},"date":1654352592,"text":"doom"},"text":" Doom \ud83d\uddd7  \nMain Story: 11\u00bd Hours \nMain + Extra: 16 Hours \nCompletionist: 26 Hours \n\nDoom \ud83d\uddd7  \nMain Story: 5 Hours \nMain + Extra: 7 Hours \nCompletionist: 9 Hours \n\nDoom Eternal \ud83d\uddd7  \nMain Story: 14 Hours \nMain + Extra: 19 Hours \nCompletionist: 26 Hours \n\nDoom II Hell on Earth \ud83d\uddd7  \nMain Story: 7 Hours \nMain + Extra: 9\u00bd Hours \nCompletionist: 14 Hours \n\nDoom 3 \ud83d\uddd7  \nMain Story: 11 Hours \nMain + Extra: 12\u00bd Hours \nCompletionist: 16 Hours","entities":[{"offset":0,"length":1,"type":"text_link","url":"https://howlongtobeat.com/games/doom_2016.jpg"},{"offset":1,"length":4,"type":"bold"},{"offset":6,"length":2,"type":"text_link","url":"https://howlongtobeat.com/game?id=2708"},{"offset":84,"length":4,"type":"bold"},{"offset":89,"length":2,"type":"text_link","url":"https://howlongtobeat.com/game?id=2701"},{"offset":163,"length":12,"type":"bold"},{"offset":176,"length":2,"type":"text_link","url":"https://howlongtobeat.com/game?id=57506"},{"offset":253,"length":21,"type":"bold"},{"offset":275,"length":2,"type":"text_link","url":"https://howlongtobeat.com/game?id=2711"},{"offset":351,"length":6,"type":"bold"},{"offset":358,"length":2,"type":"text_link","url":"https://howlongtobeat.com/game?id=2704"}]}}"
    

    It looks like that json size may become pretty large if you have a lot of links, I would assume that relaying on having enough stack-size isn't ideal.

    When running under my Debian WSL it is working fine, but I presume that larger messages may fail there as well.

    opened by amadare42 11
  • thread 'main' has overflowed its stack

    thread 'main' has overflowed its stack

    Hello. I'm trying to run the reply_to_message_updates example.

    cargo run --example reply_to_message_updates
    

    I see the next output:

        Finished dev [unoptimized + debuginfo] target(s) in 0.18s    
         Running `target\debug\examples\reply_to_message_updates.exe`
    result: Ok(MethodResponse { ok: true, result: [], description: None })
    result: Ok(MethodResponse { ok: true, result: [], description: None })
    result: Ok(MethodResponse { ok: true, result: [], description: None })
    ...
    

    If I send any text message to the bot, I see this error.

    thread 'main' has overflowed its stack
    error: process didn't exit successfully: `target\debug\examples\reply_to_message_updates.exe` (exit code: 0xc00000fd, STATUS_STACK_OVERFLOW)
    
    opened by arkada38 9
  • MessageEntityType for all entities is annoying.

    MessageEntityType for all entities is annoying.

    Maybe we can do a MessageEntityType for parse all entities in messages, Also send_message method panic! with unicode characters likes these โฆ, โˆ† would be awesome if somehow the crate could parse this characters with no complain.

    Thank you !

    Awesome crate for building , async bots in Rust and Telegram and very good support :D .

    opened by pxp9 6
  • Does not fully work on 32-bit devices like Raspberry Pi

    Does not fully work on 32-bit devices like Raspberry Pi

    isize uses the host bits and this might be not enough in some cases. The supergroup chatid is too large for i32 for example.

    Running cargo check --all-targets on a 32-bit Raspberry Pi prints out a lot of these errors:

    error: literal out of range for `isize`
        --> src/api_impl.rs:1450:59
         |
    1450 |         params.set_chat_id(Some(ChatIdEnum::IsizeVariant(-1001368460856)));
         |                                                           ^^^^^^^^^^^^^
         |
         = note: the literal `1001368460856` does not fit into the type `isize` whose range is `-2147483648..=2147483647`
    

    Personal opinion: isize shouldn't be used anywhere but I think a lot of these types are auto generated?

    I would change chat id to i64, user id to u64 (they are never negative) and the dates to u64 (unix timestamps). ChatIdEnum::IsizeVariant should also be renamed to not include the "size" in its name. Maybe ChatIdEnum::IntegerVariant. This will be a breaking change.

    The rest should also be changed (max_connections for example is always positive โ†’ usize or u32) but will probably just work as the telegram api states everything fits into 32-bit signed? integer.

    I don't know if i should just provide a PR or if there is some auto generation logic involved here which has to be adapted.

    opened by EdJoPaTo 6
  • Handling connection issues

    Handling connection issues

    Hi, thanks for your crate, it works very well.

    have one issue with it, it seems the get_updates call gets stuck and never returns (not even an Err) when there is a connection issue. I simulate this connection issue by toggling my wifi off on my dev environment, to make my app resilient to this type of problem. I'm using AsyncApi, and the latest frankenstein version.

    Do I need to pass additonal parameters to the GetUpdateParams builder? I currently pass .timeout(10_u32) and .allowed_updates() with the Message and CallbackQuery enums.

    Thanks!

    opened by krims0n32 4
  • Adds new_with_client() inteface to AsyncApi

    Adds new_with_client() inteface to AsyncApi

    If you use self-signed certificate, the following error appears when you use AsyncTelegramApi:

    Failed to get updates: HttpError(HttpError { code: 500, message: "error sending request for url (https://api.telegram.org/bot5322455292:AAF0lBHoR4x1HdwrG8eZ8iJwrp4DZhvWPdU/getUpdates): error trying to connect: invalid peer certificate contents: invalid peer certificate: UnknownIssuer" })
    

    So I added an option to use REQWEST_USE_INSECURE_CERTS environment variable to be set (value doesn't matter) to allow using such certificates.

    opened by aserebryakov 4
  • Rust analyzer cannot find builders

    Rust analyzer cannot find builders

    I have tried the reply_to_message_updates example with VS Code and rust-analyzer. Unfortunately, I noticed that rust analyzer was unable to find any imported api_params builder generated by the derive_builder macro. Hence, no form of intellisense is available, neither when typing the import statement nor when using of the builder. Importing the original structs for the api parameters works as expected.

    Having not worked with macros, I was unable to identify the cause of this problem. Do you have an idea why rust_analyzer struggles with the macro? If so, do you no a workaround or a tracking issue here on Github?

    P.S. Thank you for the nice work and this great project ๐Ÿ‘๐Ÿป

    opened by nick-lehmann 4
  • Repetitive library code

    Repetitive library code

    When looking in the huge object.rs or api_params.rs files they have always the same pattern: structs with impl to set / read values.

    The function to read values doesn't seem very helpful as the value itself is marked as pub already in the struct. Some of them return cloned values which might be helpful for convenience but user.last_name.clone() isn't much different than user.last_name() and a way more explicit clone.

    Setting these values feels semi useful currently. Both is possible currently:

    let mut user = User::new(โ€ฆ);
    user.set_username(None);
    
    let mut user = User::new(โ€ฆ);
    user.username = None;
    

    Using the method does not provide much benefit currently. (Am I overlooking something?)

    Maybe with the builder pattern these methods could be a bit more useful as it would allow for method chaining. Crates like typed-builder can help with creating such structure without much overhead. This would result in way less repetitive code.

    Even when removing the set / get functions the library without adding some other logic the library would still be very useful but with way less repetitive code.

    (This is mainly something I noticed and up for discussion)

    opened by EdJoPaTo 4
  • Would like to put my example bot in README  ?

    Would like to put my example bot in README ?

    Hi @ayrat555 , Awesome library.

    I was wondering if you would like us to put my bot in the README. My bot is done with this library and i think is a good example to beginners.

    https://github.com/pxp9/weather_bot_rust

    Maybe you can put it in this README section. image

    Thank you for this awesome tool for building creative and wonderful bots.

    opened by pxp9 3
  • Error 500 on get_updates

    Error 500 on get_updates

    Hi, I'm getting some error 500 when trying to use get_updates in my code. My code is the same as the example reply_to_message_updates, and this is the error I get.

    image

    Can someone help me?

    opened by hugorplobo 3
Releases(0.22.0)
  • 0.22.0(Dec 31, 2022)

    What's Changed

    • examples: fix cases when offset was not updated by @yarcat in https://github.com/ayrat555/frankenstein/pull/93
    • Bot API 6.4 by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/94

    New Contributors

    • @yarcat made their first contribution in https://github.com/ayrat555/frankenstein/pull/93

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.21.0...0.22.0

    Source code(tar.gz)
    Source code(zip)
  • 0.21.0(Nov 6, 2022)

    What's Changed

    • build(cargo): update typed-builder requirement from 0.10 to 0.11 by @dependabot in https://github.com/ayrat555/frankenstein/pull/90
    • Bot API 6.3 Changes by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/91

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.20.0...0.21.0

    Source code(tar.gz)
    Source code(zip)
  • 0.20.0(Aug 13, 2022)

    What's Changed

    • change connect_timeout for async client by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/83
    • change the offset field's type for getUpdates by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/86
    • August 12 most api changes by @pxp9 in https://github.com/ayrat555/frankenstein/pull/85

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.19.2...0.20.0

    Source code(tar.gz)
    Source code(zip)
  • 0.19.2(Jul 20, 2022)

    What's Changed

    • Build with all features on docs.rs by @OpenByteDev in https://github.com/ayrat555/frankenstein/pull/81
    • Use client timeout of 500 seconds by @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/82

    New Contributors

    • @OpenByteDev made their first contribution in https://github.com/ayrat555/frankenstein/pull/81

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.19.1...0.19.2

    Source code(tar.gz)
    Source code(zip)
  • 0.19.1(Jul 9, 2022)

    What's Changed

    • Fix status for ChatMemberBanned by @zaytsev in https://github.com/ayrat555/frankenstein/pull/78

    New Contributors

    • @zaytsev made their first contribution in https://github.com/ayrat555/frankenstein/pull/78

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.19.0...0.19.1

    Source code(tar.gz)
    Source code(zip)
  • 0.19.0(Jul 6, 2022)

    What's Changed

    • Use builders for api clients by @ayrat555 and @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/77

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.18.0...0.19.0

    Source code(tar.gz)
    Source code(zip)
  • 0.18.0(Jun 21, 2022)

    What's Changed

    • Bot API 6.1 Changes by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/73

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.17.0...0.18.0

    Source code(tar.gz)
    Source code(zip)
  • 0.17.0(Jun 16, 2022)

    What's Changed

    • change type of file_size from u32 to u64 by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/70
    • refactor: specify Eq when possible on PartialEq by @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/71
    • refactor: adopt breaking lints by @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/72

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.16.0...0.17.0

    Source code(tar.gz)
    Source code(zip)
  • 0.16.0(Jun 7, 2022)

    What's Changed

    • box struct fields in Message by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/69

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.15.1...0.16.0

    Source code(tar.gz)
    Source code(zip)
  • 0.15.1(Jun 2, 2022)

    What's Changed

    • Adds new_with_client() inteface to AsyncApi by @aserebryakov in https://github.com/ayrat555/frankenstein/pull/66

    New Contributors

    • @aserebryakov made their first contribution in https://github.com/ayrat555/frankenstein/pull/66

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.15.0...0.15.1

    Source code(tar.gz)
    Source code(zip)
  • 0.15.0(May 11, 2022)

    What's Changed

    • make allowed_update type safe by @johannesvollmer in https://github.com/ayrat555/frankenstein/pull/65

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.14.0...0.15.0

    Source code(tar.gz)
    Source code(zip)
  • 0.14.0(May 9, 2022)

    What's Changed

    • make some fields an enum instead of a struct by @johannesvollmer in https://github.com/ayrat555/frankenstein/pull/62

    New Contributors

    • @johannesvollmer made their first contribution in https://github.com/ayrat555/frankenstein/pull/62

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.13.0...0.14.0

    Source code(tar.gz)
    Source code(zip)
  • 0.13.0(Apr 18, 2022)

    What's Changed

    • Bot API 6 changes without web apps changes by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/58
    • Bot API v6 web apps changes by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/59

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.12.0...0.13.0

    Source code(tar.gz)
    Source code(zip)
  • 0.12.0(Mar 20, 2022)

    What's Changed

    • switch to typed-builder by @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/53

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.11.0...0.12.0

    Source code(tar.gz)
    Source code(zip)
  • 0.11.0(Mar 20, 2022)

    What's Changed

    • remove serde_json from trait features by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/43
    • chore(cargo): update mockito requirement from 0.30 to 0.31 by @dependabot in https://github.com/ayrat555/frankenstein/pull/44
    • ci(actions): bump actions/checkout from 2 to 3 by @dependabot in https://github.com/ayrat555/frankenstein/pull/47
    • ParseMode enum by @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/49
    • derive Copy when possible by @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/50
    • Error handling by @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/51
    • improve ci by @EdJoPaTo in https://github.com/ayrat555/frankenstein/pull/52

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.10.0...0.11.0

    Source code(tar.gz)
    Source code(zip)
  • 0.10.0(Feb 8, 2022)

    0.10.0

    What's Changed

    • add From trait impl for File enum by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/35
    • telegram 5.6 changes by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/36
    • Telegram 5.6 by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/37
    • Add timeout option with default as 60s by @tiberiusferreira in https://github.com/ayrat555/frankenstein/pull/39
    • Bot API 5.7 by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/40
    • Reduce number of dependencies by disabling features from multipart by @tiberiusferreira in https://github.com/ayrat555/frankenstein/pull/41
    • Async client by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/38
    • update readme, changelog; bump version by @ayrat555 in https://github.com/ayrat555/frankenstein/pull/42

    New Contributors

    • @tiberiusferreira made their first contribution in https://github.com/ayrat555/frankenstein/pull/39

    Full Changelog: https://github.com/ayrat555/frankenstein/compare/0.9.0...0.10.0

    Source code(tar.gz)
    Source code(zip)
  • 0.9.0(Dec 13, 2021)

  • 0.8.0(Dec 5, 2021)

  • 0.7.0(Nov 6, 2021)

  • 0.6.0(Aug 26, 2021)

  • 0.5.2(Jul 10, 2021)

  • 0.5.1(Jul 6, 2021)

  • 0.5.0(Jun 26, 2021)

  • 0.4.0(Jun 13, 2021)

  • 0.3.0(May 9, 2021)

  • 0.2.0(May 1, 2021)

Owner
Ayrat Badykov
Ayrat Badykov
A Rust client for the ElasticSearch REST API

rs-es Introduction An ElasticSearch client for Rust via the REST API. Targetting ElasticSearch 2.0 and higher. Other clients For later versions of Ela

Ben Ashford 218 Dec 27, 2022
An Elasticsearch REST API client for Rust

elastic elastic is an efficient, modular API client for Elasticsearch written in Rust. The API is targeting the Elastic Stack 7.x. elastic provides st

null 249 Oct 18, 2022
Affine-client is a client for AFFINE based on Tauri

Affine Client affine-client is a client for AFFINE based on Tauri Supported Platforms Windows Linux MacOS Download https://github.com/m1911star/affine

Horus 216 Dec 25, 2022
๐Ÿฆ€ REST API client implementation for freee, auto-generated from OpenAPI specification.

freee-rs REST API client implementation for freee, auto-generated from OpenAPI specification. Getting Started Add to your Cargo.toml as follows: [depe

Naoki Ikeguchi 3 Jul 14, 2022
A multi-instance, Discord/Spacebar API-compatible chat client

Polyphony A multi-instance, Discord/Spacebar API-compatible chat client, written in Rust and Svelte (TypeScript) using Tauri. Explore the docs ยป Repor

null 5 Mar 30, 2023
A multi-instance, Discord/Spacebar API-compatible chat client

Polyphony A multi-instance, Discord/Spacebar API-compatible chat client, written in Rust and Svelte (TypeScript) using Tauri. Explore the docs ยป Repor

null 6 Apr 3, 2023
Cassandra DB native client written in Rust language. Find 1.x versions on https://github.com/AlexPikalov/cdrs/tree/v.1.x Looking for an async version? - Check WIP https://github.com/AlexPikalov/cdrs-async

CDRS CDRS is looking for maintainers CDRS is Apache Cassandra driver written in pure Rust. ?? Looking for an async version? async-std https://github.c

Alex Pikalov 338 Jan 1, 2023
CouchDB client-side library for the Rust programming language

Chill Chill is a client-side CouchDB library for the Rust programming language, available on crates.io. It targets Rust Stable. Chill's three chief de

null 35 Jun 26, 2022
An etcd client library for Rust.

etcd An etcd client library for Rust. etcd on crates.io Documentation for the latest crates.io release Running the tests Install Docker and Docker Com

Jimmy Cuadra 138 Dec 27, 2022
Mysql client library implemented in rust.

mysql This crate offers: MySql database driver in pure rust; connection pool. Features: macOS, Windows and Linux support; TLS support via nativetls cr

Anatoly I 548 Dec 31, 2022
Streaming STOMP client for Rust

tokio-stomp An async STOMP client (and maybe eventually, server) for Rust, using the Tokio stack. It aims to be fast and fully-featured with a simple

null 7 Jun 15, 2022
Official Skytable client driver for Rust

Skytable client Introduction This library is the official client for the free and open-source NoSQL database Skytable. First, go ahead and install Sky

Skytable 29 Nov 24, 2022
Official Rust client for Central Dogma

centraldogma-rs Official Rust Client for Central Dogma. Full documentation is available at https://docs.rs/centraldogma Getting started Installing Add

LINE 44 Oct 13, 2022
A minecraft-like multi version client implemented in Rust.

Leafish Multi-version Minecraft-compatible client written in Rust, forked from Stevenarella. Chat Chat takes place on Matrix and Discord. The channels

null 617 Dec 27, 2022
Skytable rust client support library for the bb8 connection pool

bb8-skytable Skytable rust client support library for the bb8 connection pool. Heavily based on bb8-redis Basic usage example use bb8_skytable::{

null 3 Sep 18, 2021
Rust client for apache iotdb.

Apache IoTDB Apache IoTDB (Database for Internet of Things) is an IoT native database with high performance for data management and analysis, deployab

IoTDB Lab 7 Aug 4, 2022
A firebase HTTP v1 client implementation in Rust using google-authz

firebase-client A firebase HTTP v1 client implementation in Rust using the google_authz library. Example There are two ways to send notifications, one

Mobiltracker 2 Dec 14, 2022
Rust client for KairosDB

Rust Client for KairosDB โ€ƒ Description A simple rust language client for the time series database KairosDB. Documentation Full documentation for rust-

Kai Strempel 4 Jan 4, 2020
CouchDB client library for the Rust programming language

CouchDB This project is reborn! As of its v0.6.0 release, the couchdb crate has new life as a toolkit instead of providing a full-blown client. In a n

null 20 Jul 17, 2021