Library provides a simple API for Google Firestore for create/update/query/streaming/listening data

Related tags

Caching firestore-rs
Overview

Cargo tests and formatting security audit

Firestore for Rust

Library provides a simple API for Google Firestore:

  • Create or update documents using Rust structures and Serde;
  • Support for querying / streaming / listening documents from Firestore;
  • Full async based on Tokio runtime;
  • Macro that helps you use JSON paths as references to your structure fields;
  • Google client based on gcloud-sdk library that automatically detects GKE environment or application default accounts for local development;

Quick start

Cargo.toml:

[dependencies]
firestore = "0.6"

Example code:

    // Create an instance
    let db = FirestoreDb::new(&config_env_var("PROJECT_ID")?).await?;

    const TEST_COLLECTION_NAME: &'static str = "test";

    let my_struct = MyTestStructure {
        some_id: "test-1".to_string(),
        some_string: "Test".to_string(),
        some_num: 42,
    };

    // Remove if it already exist
    db.delete_by_id(
        TEST_COLLECTION_NAME,
        &my_struct.some_id,
    ).await?;

    // Let's insert some data
    db.create_obj(
        TEST_COLLECTION_NAME,
        &my_struct.some_id,
        &my_struct,
    ).await?;

    // Update some field in it
    let updated_obj = db.update_obj(
        TEST_COLLECTION_NAME,
        &my_struct.some_id,
        &MyTestStructure {
            some_num: my_struct.some_num + 1,
            some_string: "updated-value".to_string(),
            ..my_struct.clone()
        },
        Some(
            paths!(MyTestStructure::{
                some_num,
                some_string
            })
        ),
    ).await?;

    println!("Updated object: {:?}", updated_obj);

    // Get object by id
    let find_it_again: MyTestStructure = db.get_obj(
        TEST_COLLECTION_NAME,
        &my_struct.some_id,
    ).await?;

    println!("Should be the same: {:?}", find_it_again);

    // Query our data
    let objects: Vec<MyTestStructure> = db.query_obj(
        FirestoreQueryParams::new(
            TEST_COLLECTION_NAME.into()
        ).with_filter(
            FirestoreQueryFilter::Compare(Some(
                FirestoreQueryFilterCompare::Equal(
                    path!(MyTestStructure::some_num),
                    find_it_again.some_num.into(),
                ),
            ))
        )
    ).await?;

    println!("Now in the list: {:?}", objects);

All examples available at examples directory.

To run example use with environment variables:

# PROJECT_ID=<your-google-project-id> cargo run --example simple-crud

Licence

Apache Software License (ASL)

Author

Abdulla Abdurakhmanov

Comments
  • Implement run_transaction

    Implement run_transaction

    Intent

    This PR aims to implement a feature found in Firestore implementations for other languages, such as Go and Typescript.

    These "run transaction" functions allow the user to pass in a closure that performs reads and/or writes and attempts to commit a transaction with a limited number of retries. Many of the details are not exposed to the user.

    I've introduced an example that uses run_transaction to increment a counter concurrently using FuturesOrdered.

    Potential Problems

    • ~I've introduced the backoff crate into the Cargo.toml. If this is not desirable, we can rework the retry mechanism such that it does not bring in a dependency.~
    • Users' closures must be wrapped in Box::pin presently. Is it possible to push this into the run_transaction function itself?
    • ~I've placed the implementation directly into FirestoreDb. This seems okay, but is it the correct place for it?~
    • run_transaction will always use ReadWrite for the consistency selector. Shouldn't we handle ReadOnly transactions as well?
    • We should expose some options about the transaction behavior to the user, as the SDKs in other languages do. This includes retry configuration, a manual specification of the transaction read time, and whether or not the transaction should be read-only (which perhaps solves the previous potential issue)
    • ~All reads must take place before any writes in the transaction, but I haven't tested to verify that we gracefully handle that error.~
    enhancement 
    opened by NickCaplinger 12
  • Implement serialize_as_optional_timestamp for Option<DateTime<Utc>>

    Implement serialize_as_optional_timestamp for Option>

    Intent

    This feature aims to add functionality for optional FirestoreTimestamp fields.

    Using #[serde(with = "firestore::serialize_as_timestamp")] on an Option<DateTime<Utc>> field resulted in build errors within the Serialize/Deserialize derive macro. Due to this, resorting to using Option<DateTime<Utc>> without the relevant serializer resulted in firestore saving the Timestamp-like value as a string.

    To avoid further complicating data consistency issues, it seemed as though creating an additional serializer for optional timestamps was appropriate.

    Implementation

    • Added functionality and relevant serializer for Option<FirestoreTimestamp>.
    • Separated serialize_as_timestamp from newly created serialize_as_optional_timestamp to preserve original functionality.
    • Updated serialize_none to utilize ValueType::NullValue.

    Questions

    • Is there potentially a way to combine both serializers into one to be able to handle Option<T> and T?
    opened by ajw221 6
  • batch_stream_get_objects_by_ids result doesn't communicate a deserialization error

    batch_stream_get_objects_by_ids result doesn't communicate a deserialization error

    If one of the results deserialized by batch_stream_get_objects_by_ids produces a deserialization error it is only logged but the Result of the function as a whole indicates success anyways.

    It's probably debatable if this an issue or not but it caught me by surprise since other functions return the deserialization error in their result.

    opened by xifel 6
  • Add environment variable to redirect the firestore client to a local emulator

    Add environment variable to redirect the firestore client to a local emulator

    For developing against a local firestore emulator I want to overwrite the Google API URL for the firestore client.

    I tried this in my fork here: https://github.com/abdolence/firestore-rs/compare/master...xifel:firestore-rs:google_url_env and works for me. However I'm very new to Rust and not sure if this is the best way to go about it since it's adding lazy_static as a new dependency.

    The name of the environment variable is also used by the official Firestore Admin SDK https://firebase.google.com/docs/emulator-suite/connect_firestore#web-version-9 and can be used the same way.

    If you would like to merge that change as is or with modifications I would gladly create the pull request. Otherwise I just would like to propose the feature.

    enhancement 
    opened by xifel 4
  • Can I use the start_at instead of offset?

    Can I use the start_at instead of offset?

    https://firebase.google.com/docs/firestore/pricing I want to use the start_at to get list data because of the pricing problem.

    https://github.com/abdolence/firestore-rs/blob/652e6cce7cdd8e0dd310112c4ffedae423b2904a/src/db/query_models.rs#L55 And I found this code! I guess I can use start_at if it's implemented. So now, I have two questions.

    1. Is it possible to use start_at by just passing the Cursor in that field(start_at)?
    2. Will you implement this feature?
    enhancement 
    opened by reiishikawa1208 4
  • Can I get `Vec<Result<T,DecodeFailure>>` from querying methods instead of `Result<Vec<T>,FirestoreError>`?

    Can I get `Vec>` from querying methods instead of `Result,FirestoreError>`?

    For example,

    let items = firestore_db
            .query_obj::<Item>(params)
            .await
    

    query_obj returns Result<Vec<Item>,FirestoreError> in "all or nothing" way. That is, if any of Items raises decode error, it returns Err(FirestoreError).

    I think it would be better for library users to have more control over error handling(e.g. ignore or recover from error).

    Therefore, I want Vec<Result<T,FirestoreError>> from querying methods instead of Result<Vec<T>,FirestoreError>.

    In addition, I am happy if I can get raw FirestoreValue from querying methods and manually decode items one by one. Is there any method or api like that?

    let raw_values: Vec<FirestoreValue> = firestore_db.query_obj::<???>(params).await;
    let it : Vec<Result<T,Error>> =  raw_values.iter().map(|value| /* try decode raw value to `T` here */ )
    
    question 
    opened by i10416 4
  • Listen to Collection changes

    Listen to Collection changes

    I was just exploring Firestore with Rust and I found your awesome library!

    I'm trying to "listen" to changes to a Firestore Collection, is that possible with this library?

    I see that you have listen_doc_changes (which I assume is for listening to a single document?). Could you share an example of how to use it?

    opened by wyattades 3
  • Mismatched types

    Mismatched types

    Trying to use firebase in a project and get following error:

    error[E0308]: mismatched types
        --> /home/shinmen/.cargo/registry/src/github.com-1ecc6299db9ec823/firestore-0.11.0/src/db/transaction.rs:113:62
         |
    113  |         transaction_span.record("/firestore/transaction_id", hex_trans_id);
         |                          ------                              ^^^^^^^^^^^^
         |                          |                                   |
         |                          |                                   expected reference, found struct `std::string::String`
         |                          |                                   help: consider borrowing here: `&hex_trans_id`
         |                          arguments to this function are incorrect
         |
         = note: expected reference `&_`
                       found struct `std::string::String`
    note: associated function defined here
        --> /home/shinmen/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-0.1.35/src/span.rs:1194:12
         |
    1194 |     pub fn record<Q: ?Sized, V>(&self, field: &Q, value: &V) -> &Self
         |            ^^^^^^
    
    error[E0277]: the size for values of type `str` cannot be known at compilation time
        --> /home/shinmen/.cargo/registry/src/github.com-1ecc6299db9ec823/firestore-0.11.0/src/db/transaction.rs:153:35
         |
    153  |             self.transaction_span.record(
         |                                   ^^^^^^ doesn't have a size known at compile-time
         |
         = help: the trait `Sized` is not implemented for `str`
    note: required by a bound in `tracing::Span::record`
        --> /home/shinmen/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-0.1.35/src/span.rs:1194:30
         |
    1194 |     pub fn record<Q: ?Sized, V>(&self, field: &Q, value: &V) -> &Self
         |                              ^ required by this bound in `tracing::Span::record`
    
    Some errors have detailed explanations: E0277, E0308.
    For more information about an error, try `rustc --explain E0277`.
    error: could not compile `firestore` due to 2 previous errors
    
    opened by freedxmgxd 3
  • Firebase token

    Firebase token

    Hi, how can I find Firebase token using gcloud auth login? Error connecting to Firestore: SystemError(FirestoreSystemError { public: FirestoreErrorPublicGenericDetails { code: "TokenSource" }, message: "GCloud system error: token source error: not found token source" })

    question 
    opened by DmitriVT 3
  • Compilation error after upgrading to `0.10.1`

    Compilation error after upgrading to `0.10.1`

    Got the following error after upgrading to 0.10.1. Last good version is 0.9.2. I cannot compile from source as well.

    error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
      --> /Users/__/.cargo/registry/src/github.com-1ecc6299db9ec823/firestore-0.10.1/src/db/list_doc.rs:49:9
       |
    49 |         &self,
       |         ^^^^^ this data with an anonymous lifetime `'_`...
    ...
    84 |         Ok(stream)
       |         ---------- ...is used and required to live as long as `'static` here
       |
    note: `'static` lifetime requirement introduced by the return type
      --> /Users/__/.cargo/registry/src/github.com-1ecc6299db9ec823/firestore-0.10.1/src/db/list_doc.rs:51:10
       |
    51 |     ) -> FirestoreResult<BoxStream<Document>> {
       |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ requirement introduced by this return type
    ...
    84 |         Ok(stream)
       |         ---------- because of this returned expression
    
    error[E0759]: `self` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
       --> /Users/__/.cargo/registry/src/github.com-1ecc6299db9ec823/firestore-0.10.1/src/db/transaction.rs:176:9
        |
    176 |         &self,
        |         ^^^^^ this data with an anonymous lifetime `'_`...
    ...
    179 |         FirestoreTransaction::new(self, options).await
        |         ---------------------------------------------- ...is used and required to live as long as `'static` here
        ```
    
    question 
    opened by niponchi 3
  • Token

    Token

    How can i find token? I try create a document but it return error "error": "13 INTERNAL: Firestore system/internal error: GCloud system error: token source error: not found token source"

    Is it possible lo in with GOOGLE_APPLICATION_CREDENTIALS admins dk .json??

    question 
    opened by reichigo 2
  • Adding document with single parent collection

    Adding document with single parent collection

    I want to insert a document a with the path "parent_1/customers/new_document_id/", but using db.parent_path method, I only seem to be able to insert it with this path "parent_1/parent_1/customers/new_document_id/".

    Here's how I'm inserting it

    let parent_path = db.parent_path("parent_1", "parent_1").unwrap();
    let result = db
      .fluent()
      .insert()
      .into("customers")
      .document_id(&customer.email)
      .parent(&parent_path)
      .object(&customer)
      .execute()
      .await
      .unwrap();
    
    question 
    opened by frasermarch 2
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    This repository currently has no open or pending branches.

    Detected dependencies

    cargo
    Cargo.toml
    • tracing 0.1
    • gcloud-sdk 0.19.12
    • tonic 0.8
    • hyper 0.14
    • struct-path 0.2
    • rvstruct 0.3.2
    • rsb_derive 0.5
    • serde 1.0
    • prost-types 0.11
    • tokio 1.23
    • tokio-stream 0.1
    • futures 0.3
    • chrono 0.4
    • async-trait 0.1
    • hex 0.4
    • backoff 0.4.0
    • cargo-husky 1.5
    • tracing-subscriber 0.3
    github-actions
    .github/workflows/security-audit.yml
    • actions/checkout v3
    • actions-rs/toolchain v1
    .github/workflows/tests.yml
    • actions/checkout v3
    • actions-rs/toolchain v1
    • google-github-actions/auth v1
    • google-github-actions/setup-gcloud v1

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Releases(v0.22.0)
  • v0.22.0(Dec 12, 2022)

    What's Changed

    • Changes Listener API improvements and Fluent API support by @abdolence in https://github.com/abdolence/firestore-rs/pull/47
      • Documentation: https://github.com/abdolence/firestore-rs#listening-the-document-changes-on-firestore
    • Listen API updates: ReadTime and multi target support by @abdolence in https://github.com/abdolence/firestore-rs/pull/49
    • Update Rust crate gcloud-sdk to 0.19.11 by @renovate in https://github.com/abdolence/firestore-rs/pull/44
    • Update Rust crate tokio to 1.23 by @renovate in https://github.com/abdolence/firestore-rs/pull/45

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.19.0...v0.22.0

    Source code(tar.gz)
    Source code(zip)
  • v0.19.0(Dec 4, 2022)

    What's Changed

    • Update Rust crate tokio to 1.22 by @renovate in https://github.com/abdolence/firestore-rs/pull/40
    • Update Rust crate gcloud-sdk to 0.19.10 by @renovate in https://github.com/abdolence/firestore-rs/pull/42
    • Document transformations support by @abdolence in https://github.com/abdolence/firestore-rs/pull/43
      • Documentations available at: https://github.com/abdolence/firestore-rs#document-transformations
      • Transaction response now contains transformations and commit time

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.18.3...v0.19.0

    Source code(tar.gz)
    Source code(zip)
  • v0.18.3(Nov 17, 2022)

    What's Changed

    • Implement serialize_as_optional_timestamp for Option<DateTime> by @ajw221 in https://github.com/abdolence/firestore-rs/pull/38
    • Implement run_transaction by @NickCaplinger in https://github.com/abdolence/firestore-rs/pull/37
    • Explicit null serialization support by @abdolence in https://github.com/abdolence/firestore-rs/pull/39

    New Contributors

    • @ajw221 made their first contribution in https://github.com/abdolence/firestore-rs/pull/38
    • @NickCaplinger made their first contribution in https://github.com/abdolence/firestore-rs/pull/37

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.18.2...v0.18.3

    Source code(tar.gz)
    Source code(zip)
  • v0.18.2(Nov 14, 2022)

    • Wrapping type FirestoreTimestamp supports now Clone, Debug, PartialEq, PartialOrd

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.18.1...v0.18.2

    Source code(tar.gz)
    Source code(zip)
  • v0.18.1(Nov 13, 2022)

    What's Changed

    • Batch writes support by @abdolence in https://github.com/abdolence/firestore-rs/pull/36
    • Strict error handling version for listing doc/objects: stream_list_doc_with_errors/stream_list_obj_with_errors support
    • Update/Delete precondition support by @abdolence in https://github.com/abdolence/firestore-rs/pull/35

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.16.3...v0.18.1

    Source code(tar.gz)
    Source code(zip)
  • v0.16.3(Nov 13, 2022)

  • v0.16.1(Nov 13, 2022)

  • v0.16.0(Nov 12, 2022)

    What's Changed

    • Partition query support by @abdolence in https://github.com/abdolence/firestore-rs/pull/34
    • Improved the security of the path builder sanitizing document ids by @abdolence in https://github.com/abdolence/firestore-rs/pull/33

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.15.1...v0.16.0

    Source code(tar.gz)
    Source code(zip)
  • v0.15.1(Nov 8, 2022)

    What's Changed

    • Update Rust crate gcloud-sdk to 0.19.8 by @renovate in https://github.com/abdolence/firestore-rs/pull/30
    • Document ID format now is verified to avoid possible misuses;

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.15.0...v0.15.1

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

    • Reading Firestore document metadata as struct fields support (https://github.com/abdolence/firestore-rs#reading-firestore-document-metadata-as-struct-fields)
    • Generated document IDs support for create_obj making them optional with the support in the Fluent API providing .generate_document_id() for insert()
    • Fixed a bug in the Firestore values serializer for None values

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.14.0...v0.15.0

    Source code(tar.gz)
    Source code(zip)
  • v0.14.0(Nov 5, 2022)

    • API updates:
      • Consistent naming for get_doc/get_obj/batch/create methods
      • Fluent API support for get/batch get
    • Get and batch get for doc/objects now support return_only_fields (both for the Fluent and the classic API)

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.12.14...v0.14.0

    Source code(tar.gz)
    Source code(zip)
  • v0.12.14(Nov 5, 2022)

    • Error handling improvements for batch get operations
    • Logging/tracing improvements for create/update/delete operations

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.12.12...v0.12.14

    Source code(tar.gz)
    Source code(zip)
  • v0.12.12(Oct 26, 2022)

    What's Changed

    • Delete/Update Fluent API transactions support by @abdolence in https://github.com/abdolence/firestore-rs/pull/28

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.12.11...v0.12.12

    Source code(tar.gz)
    Source code(zip)
  • v0.12.11(Oct 25, 2022)

    What's Changed

    • Firestore Emulator Support by @abdolence in https://github.com/abdolence/firestore-rs/pull/27
    • parent_path() function implementation by @abdolence in https://github.com/abdolence/firestore-rs/pull/25

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.12.9...v0.12.11

    Source code(tar.gz)
    Source code(zip)
  • v0.12.9(Oct 25, 2022)

  • v0.12.8(Oct 24, 2022)

  • v0.12.7(Oct 24, 2022)

    • Fixed a bug introduced in v0.12.5 for unit deserialization

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.12.5...v0.12.7

    Source code(tar.gz)
    Source code(zip)
  • v0.12.5(Oct 23, 2022)

    What's Changed

    • Fluent API CRUD support by @abdolence in https://github.com/abdolence/firestore-rs/pull/24

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.12.3...v0.12.5

    Source code(tar.gz)
    Source code(zip)
  • v0.12.3(Oct 22, 2022)

    • path/paths macro now evaluates string representation values at the compile time;

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.12.0...v0.12.3

    Source code(tar.gz)
    Source code(zip)
  • v0.12.0(Oct 22, 2022)

    What's Changed

    • Fluent Query API support by @abdolence in https://github.com/abdolence/firestore-rs/pull/23 Documentation: https://github.com/abdolence/firestore-rs#fluent-query-api

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.11.3...v0.12.0

    Source code(tar.gz)
    Source code(zip)
  • v0.11.3(Oct 21, 2022)

    What's Changed

    • Query cursors support and example by @abdolence in https://github.com/abdolence/firestore-rs/pull/22

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.11.1...v0.11.3

    Source code(tar.gz)
    Source code(zip)
  • v0.11.1(Oct 14, 2022)

    • Google (silently) made available new aggregated queries API. While it is not documented yet anywhere except in gRPC protocol. It available now for everyone and the library exposes this API (without experimental feature-toggle). For example, look at aggregated-query.rs.
    • FirestoreDb structure now supports Debug trait (Fixed #17)

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.11.0...v0.11.1

    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(Oct 1, 2022)

  • v0.10.3(Sep 18, 2022)

    What's Changed

    • Update Rust crate tokio to 1.21 by @renovate in https://github.com/abdolence/firestore-rs/pull/9
    • Update Rust crate gcloud-sdk to 0.18.6 by @renovate in https://github.com/abdolence/firestore-rs/pull/14
    • Consistency selectors support
    • Retry write transactions support
    • with_options_token_source support to manage Google OAuth/tokens when it is needed

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.10.1...v0.10.3

    Source code(tar.gz)
    Source code(zip)
  • v0.10.1(Sep 12, 2022)

    • Firestore timestamp serialization support for queries

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.10.0...v0.10.1

    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Sep 10, 2022)

    • Batch get support
    • listen_doc now is listen_doc_changes
    • Initial transactions support

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.9.2...v0.10.0

    Source code(tar.gz)
    Source code(zip)
  • v0.9.2(Sep 8, 2022)

  • v0.9.0(Sep 7, 2022)

    What's Changed

    • Native and performant Firestore Serde serializer without using intermediately serde_json by @abdolence in https://github.com/abdolence/firestore-rs/pull/10
    • Timestamps data types support using serde(with)

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.8.0...v0.9.0

    Source code(tar.gz)
    Source code(zip)
  • v0.8.0(Sep 5, 2022)

  • v0.7.1(Aug 25, 2022)

    • List documents/object support with pages auto scrolling;

    Full Changelog: https://github.com/abdolence/firestore-rs/compare/v0.7.0...v0.7.1

    Source code(tar.gz)
    Source code(zip)
Owner
Abdulla Abdurakhmanov
Functional Programming Enthusiast (Scala, Haskell, Rust).
Abdulla Abdurakhmanov
A Google-like web search engine that provides the user with the most relevant websites in accordance to his/her query, using crawled and indexed textual data and PageRank.

Mini Google Course project for the Architecture of Computer Systems course. Overview: Architecture: We are working on multiple components of the web c

Max 11 Aug 10, 2022
Generator of Firestore rules and type safe client code.

Generator of Firestore rules and type safe client code. Usage [WIP] Install from npm or curl. $ npm install -g firegen Setting your yml. # firegen.yml

Ubugeeei 3 Oct 6, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
reth-indexer reads directly from the reth db and indexes the data into a postgres database all decoded with a simple config file and no extra setup alongside exposing a API ready to query the data.

reth-indexer reth-indexer reads directly from the reth db and indexes the data into a postgres database all decoded with a simple config file and no e

Josh Stevens 306 Jul 12, 2023
Simple CLI to (add, delete, update, create) i18n translation file 🔤 🦀

, Inrs Simple CLI to (add, delete, update, create) i18n translation file Copyright (C) 2020-2022 TheAwiteb https://github.com/TheAwiteb/inrs This pr

TheAwiteb 4 Oct 4, 2022
Node/Electron library for global key listening.

GlobalKey Building cargo install nj-cli nj-cli build --release Calling from node npm i globalkey # or yarn add globalkey const globalkey = require(

Will 20 Dec 15, 2022
Grsql is a great tool to allow you set up your remote sqlite database as service and CRUD(create/read/update/delete) it using gRPC.

Grsql is a great tool to allow you set up your remote sqlite database as service and CRUD (create/ read/ update/ delete) it using gRPC. Why Create Thi

Bruce Yuan 33 Dec 16, 2022
Event listening, bubbling, and callbacks

Event listeners, bubbling, and callbacks for Bevy Oh my! License All code in this repository is dual-licensed under either: MIT License (LICENSE-MIT o

Aevyrie 4 May 8, 2023
New generation decentralized data warehouse and streaming data pipeline

World's first decentralized real-time data warehouse, on your laptop Docs | Demo | Tutorials | Examples | FAQ | Chat Get Started Watch this introducto

kamu 184 Dec 22, 2022
LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.

LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values. Authors: Sanjay Ghem

Google 31.5k Jan 1, 2023
Provides json/csv/protobuf streaming support for axum

axum streams for Rust Library provides HTTP response streaming support for axum web framework: JSON array stream format JSON lines stream format CSV s

Abdulla Abdurakhmanov 15 Dec 11, 2022
A high-performance WebSocket integration library for streaming public market data. Used as a key dependency of the `barter-rs` project.

Barter-Data A high-performance WebSocket integration library for streaming public market data from leading cryptocurrency exchanges - batteries includ

Barter 23 Feb 3, 2023
The utility is designed to check the availability of peers and automatically update them in the Yggdrasil configuration file, as well as using the admin API - addPeer method.

Yggrasil network peers checker / updater The utility is designed to check the availability of peers and automatically update them in the Yggdrasil con

null 6 Dec 25, 2022
This is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust to everyone.

Comprehensive Rust ?? This repository has the source code for Comprehensive Rust ?? , a four day Rust course developed by the Android team. The course

Google 5.2k Jan 3, 2023
This library provides a data view for reading and writing data in a byte array.

Docs This library provides a data view for reading and writing data in a byte array. This library requires feature(generic_const_exprs) to be enabled.

null 2 Nov 2, 2022
Materialize simplifies application development with streaming data. Incrementally-updated materialized views - in PostgreSQL and in real time. Materialize is powered by Timely Dataflow.

Materialize is a streaming database for real-time applications. Get started Check out our getting started guide. About Materialize lets you ask questi

Materialize, Inc. 4.7k Jan 8, 2023
A highly efficient daemon for streaming data from Kafka into Delta Lake

kafka-delta-ingest The kafka-delta-ingest project aims to build a highly efficient daemon for streaming data through Apache Kafka into Delta Lake. Thi

Delta Lake 173 Dec 28, 2022
A highly efficient daemon for streaming data from Kafka into Delta Lake

A highly efficient daemon for streaming data from Kafka into Delta Lake

Delta Lake 172 Dec 23, 2022
An example repository on how to start building graph applications on streaming data. Just clone and start building 💻 💪

An example repository on how to start building graph applications on streaming data. Just clone and start building ?? ??

Memgraph 40 Dec 20, 2022
Streaming data over unix sockets, in Rust

Unix-socket based client/server In order to dig into Sōzu channels, I had to dig into the workings of unix sockets. What this repo contains a small so

Emmanuel Bosquet 3 Nov 28, 2022