Crate of the Week

Qdrant is an open source production ready vector database/similarity search engine written in Rust. There are APIs available for Rust, Python, Javascript/Typescript and Go.

I'd also mention it's blazingly fast, but you already knew that, did you?

(Full disclosure: Sort of self-suggestion, I recently joined the company)

6 Likes

I would like to nominate the web-framework salvo

The Maintainer is very open for feature requests and fixing stuff very fast.

4 Likes

I'll nominate dateparser, "A rust library for parsing date strings in commonly used formats. Parsed date will be returned as chrono's DateTime<Utc>."

Astrolabe is a date and time library for Rust which is feature rich, lightweight (zero dependencies) and aims to have an easy to use API. Some of it's most useful features:

  • Custom formatting and parsing with format strings based on Unicode Date Field Symbols
  • RFC 3339 timestamp parsing and formatting
  • A built in cron expression parser
  • Offset functions to work with timezones (No local timezone yet)
  • Many manipulation functions to freely modify date and time

Disclosure: This is a self-suggestion : )

I'm nominating whichlang, a fast OSS natural language detector in Rust with no dependencies:

3 Likes

GitHub - oxidecomputer/progenitor: An OpenAPI client generator - An OpenAPI client generator - had a 0.3 release 2 weeks ago, includes 8 months of active development since the v0.2 release.

In addition to lots of improvements to support all the varied ways people use OpenAPI, it includes two notable enhancements:

  • Generation of clap-based CLIs
  • Generation of strongly-typed mocks with httpmock

You can feed it rest-api-description/api.github.com.yaml at main · github/rest-api-description · GitHub , and with very minor tweaks to the input yaml, it can spit out a GitHub client Cargo.toml and lib.rs, and with a few lines of Rust you can use it to create a mock GitHub API service.

7 Likes

GitHub - kstasik/schema-tools: Set of tools for codegen, preprocessing and validation of json-schema and openapi spec An OpenAPI/JSONSchema toolkit, include schema validation, slicing & dicing of specifications, and code generation using Tera (jinja2) templates.

1 Like

Lint of the Week

So far i have been enjoying TWiR very much.
I like the Quote/Crate of the week suggestions.

Can we have something alike for Clippy Lints?
There are so many good allow by default lints, which help me a lot.

I use cargo cranky in a 3 step approach.

  1. cargo check
  2. cargo clippy
  3. cargo cranky

This helps me writing better code and finding slips.

After Installing 1.70 i updated my Cranky.toml with clippy::unnecessary_struct_initialization and i got one match.

This has shown me how easily I overlook something
and maybe i am not the only one :thinking:

2 Likes

I’d like to nominate Kanata:

Kanata is a software keyboard remapper for Linux and Windows. I use it to get some advanced features from my standard laptop keyboard, remapping spacebar as an extra modifier keys which moves arrows ad other navigation keys to my home row.

3 Likes

I've created an SMTP server for the test and development environment in Rust.

The web interface is developed with Yew frameworks compiled to web assembly and the Backend uses Axum and Tokio.

How is this different from using clippy config files? The project readme doesnt explain this. It only says

Doing this with just Rust/Cargo/Clippy can be a bit of a pain.

1 Like

AFAIK: Clippy Config Files enable specifying configuration values for lints.

To enable lints, one has to include them in the lib.rs via #![warn(clippy::...)],
which can become quite wordy.
My Cranky.toml currently contains 140 lints, which are allow by default.

And then if i run cargo clippy i no longer can distinguish between genuine clippy lints
and those which which are just pedantic or have false positives (nursery), or i want
to allow for some fn like clippy::too_many_lines.

I like the 3 step approach, which gives me 3 levels of priority, what to fix or look at.

1 Like

I nominate release-plz:

Release-plz helps you release your Rust packages by automating:

  • CHANGELOG generation.
  • Creation of GitHub/Gitea releases.
  • Publishing to crates.io.
  • Version bumps in Cargo.toml.
1 Like

I nominate

It provides highly-ergonomic abstractions for generating proc macro parsers. The user writes types which represent the nodes in the syntax tree (enums for alternatives, structs for sequences), the crate does the rest.

4 Likes

I nominate rustypaste:

Rustypaste is a minimal file upload/pastebin service which has the following features:

  • File upload & URL shortening & upload from URL
  • Single binary/configuration
  • Easy to deploy via docker
  • No database
  • Self-hosted
  • Written in Rust :crab:
2 Likes

I nominate css-inline

css-inline is designed for scenarios such as preparing HTML emails or embedding HTML into third-party web pages:

  • Built on top of html5ever, cssparser, and selectors
  • Inlines CSS from style and link tags
  • Resolves external stylesheets (including local files)
  • Supports HTML5 & CSS3
  • Has Python, Ruby, and WASM bindings
1 Like

Self nominating dysk (was previously known as lfs but not announced here)

image

image

10 Likes

I've made quite a lot of self-nominations in this thread already, let me know if I should stop :slight_smile: Anyway here's another one.

A search-and-replace tool with slightly more features than fastmod.

1 Like

Self-nominating eyeball, a crate that implements the observable pattern for (async) Rust.

As of the latest release from yesterday, it supports (optional) async-aware locking so that you can lock the inner value of an observable for writing across .await points.
Actually, this was already possible before with an async RwLock wrapping Observable<T>, but the new solution of SharedObservable<T, AsyncLock> is more convenient and efficient.

I am going to self-nominate a crate of mine called complate.
complate is a text templating tool for the terminal which allows templating files in interactive mode (with user prompts via tui) or in headless mode.
I've used it in many projects for templating HELM value files, using it as template for semantic commit messages in repos, updating configuration files and more.

  1. crates.io
  2. GitHub repo
1 Like