e2f3d64dab Server trait usability fixes (#484)
- Remove defaults from trait generic type parameters (i.e. TraitName<TypeParameter = ...>) to prevent intermediate types that impl the trait from not themselves allowing the default type parameter to be overridden.

- Move common bounds up from implementers of the Service trait to the Service trait itself. This both reduces boilerplate and reduces the chances of a type having stricter bounds on the struct and fns (such as fn new()) than its Service trait impl, making it hard to find the cause of a bounds mismatch.

- Align bounds on all middleware struct blocks to match the bounds on the Service trait impls to catch mismatched bounds earlier.

- Remove unnecessary ?Sized bound on impl Service for U where U: Deref.

- Remove unnecessary default type specifications.

- Add run: cargo test --doc to test doc explicitly.

- Set the default shell to bash.

---------

Co-authored-by: Philip Homburg <philip@nlnetlabs.nl>
2025-11-21 15:18:26 +01:00
2025-10-22 14:55:32 +02:00
2025-11-21 15:18:26 +01:00
2024-06-20 14:34:15 +02:00
2025-10-31 11:41:25 +01:00
2025-10-31 11:41:25 +01:00
2025-11-21 12:57:26 +01:00
2025-01-28 14:06:18 +01:00
2025-10-30 15:16:37 +01:00

domain – A DNS library for Rust

Current Documentation Mastodon Follow

A library for interacting with the Domain Name System. The crate contains an ever-growing set of building blocks for including DNS functionality in applications.

Currently, these blocks include:

  • basic data structures and functionality for creating and parsing DNS data and messages,
  • a simple Tokio-based stub resolver,
  • experimental support for DNS client and server transports,
  • experimental support for reading data from DNS zone files, storing them in memory and answering queries,
  • experimental support for zone transfer, including support for TSIG,
  • experimental and as yet incomplete support for DNSSEC signing and validation.

The library is currently under heavy development and additional building blocks and features are being added.

Applications

We are maintaining several applications that are built on top of domain, including:

  • cascade – a DNSSEC signing pipeline
  • dnsi – a command-line tool to inspect various aspects of the DNS
  • dnst – a set of binaries that reimplement some of the widely used ldns utilities in Rust
  • mimir – a DNS proxy and load balancer

Minimal Supported Rust Versions

We are trying to maintain a decent balance between being able to use older compiler versions and using new features that improve safety and usability of the crate. We will support the latest 4 versions of stable Rust, which is about half a year (24 weeks) past. This means our MSRV is at least 4 versions behind the latest stable.

We will bump the MSRV when a dependency requires it (and we cannot support an older version of the dependency) or when we require new language features. In either case, commits bumping the MSRV will document why it occurred.

Minimum version: 1.79.0

The rust-version given in Cargo.toml is the oldest version that can be used to compile the crate with the minimal versions of all dependencies selected.

You can run cargo +nightly update -Z minimal-versions to ask Cargo to select these minimal versions for all dependencies.

Current version: 1.82.0

This is the minimum Rust version required to build with latest version of all dependencies at time of release. Cargo.lock contains these versions for reference.

Licensing

The domain crate is distributed under the terms of the BSD-3-clause license. See the LICENSE file for details.

S
Description
No description provided
Readme BSD-3-Clause
17 MiB
Languages
Rust 100%