Trait aliases on stable Rust

Related tags

Geospatial trait-set
Overview

trait-set: trait aliases on stable Rust

Status: CI

Project info: Docs.rs Latest Version License Rust 1.50+ required

Support for trait aliases on stable Rust.

Description

This crate provide support for trait aliases: a feature that is already supported by Rust compiler, but is not stable yet.

The idea is simple: combine group of traits under a single name. The simplest example will be:

use trait_set::trait_set;

trait_set! {
    pub trait ThreadSafe = Send + Sync;
}

Macro [trait_set] displayed here is the main entity of the crate: it allows declaring multiple trait aliases, each of them is represented as

[visibility] trait [AliasName][<generics>] = [Element1] + [Element2] + ... + [ElementN];

Example

use trait_set::trait_set;

trait_set! {
    // Simple combination of two traits.
    pub trait ThreadSafe = Send + Sync;

    // Generic alias that gets passed to the associated type.
    pub trait ThreadSafeIterator<T> = ThreadSafe + Iterator<Item = T>;

    // Specialized alias for a generic trait.
    pub trait ThreadSafeBytesIterator = ThreadSafeIterator<u8>;

    // Lifetime bounds.
    pub trait StaticDebug = 'static + std::fmt::Debug;

    // Higher-ranked trait bounds.
    pub trait Serde = Serialize + for<'de> Deserialize<'de>;

    // Lifetime as a generic parameter.
    pub trait SerdeLifetimeTemplate<'de> = Serialize + Deserialize<'de>;
}

Motivation

Rust is great, and it becomes even better through time. However, a time gap between proposing a new feature and getting it stabilized is way too big.

Trait aliases is a great example: 20% of functionality will serve the needs of 80%. So, until they are stabilized, this crate hopefully will allow some folks to write more readable code.

Contributing

Feel free to submit a PR!

LICENSE

trait-set library is licensed under the MIT License. See LICENSE for details.

You might also like...
Geospatial primitives and algorithms for Rust

geo Geospatial Primitives, Algorithms, and Utilities The geo crate provides geospatial primitive types such as Point, LineString, and Polygon, and pro

Rust bindings for GEOS

geos Rust bindings for GEOS C API. The supported geos version is = 3.5 Disclaimer GEOS can be a tad strict on the validity on the input geometry and

Spatial Data Structures for Rust
Spatial Data Structures for Rust

spade Documentation Using spade Examples Project state Performance License Spade (SPAtial DatastructurEs, obviously!) implements a few nifty data stru

Rust implementation of the Martinez-Rueda Polygon Clipping Algorithm

Boolean operations on geo shapes This is an implementation of the Martinez-Rueda Polygon Clipping Algorithm in rust to integrate smoothly into the alr

Fast 2D Delaunay triangulation in Rust. A port of Delaunator.

delaunator-rs A very fast static 2D Delaunay triangulation library for Rust. A port of Delaunator. Documentation Example use delaunator::{Point, trian

port of MapBox's earcut triangulation code to Rust language
port of MapBox's earcut triangulation code to Rust language

Earcutr This is a port of the MapBox company's Earcut computer code, which triangulates polygons. Please see https://github.com/mapbox/earcut for more

Rust bindings for GDAL

gdal [] GDAL bindings for Rust. So far, you can: open a raster dataset for reading/writing get size and number of bands get/set projection and geo-tra

Rust read/write support for GPS Exchange Format (GPX)

gpx gpx is a library for reading and writing GPX (GPS Exchange Format) files. It uses the primitives provided by geo-types to allow for storage of GPS

Reading GeoTIFFs in Rust, nothing else!

A TIFF Library for Rust I needed this library to import elevation models for a routing library. As elevation models usually come in GeoTIFF format, bu

Comments
  • Bounds for type parameters

    Bounds for type parameters

    Hi @popzxc and thanks for the library, it's useful for MoonZoon.

    It would be nice if we could add bounds to type parameters in traits. Example from the real code, notice UPHO: UpHandlerOutput:

    trait_set!{
        pub trait UpHandlerOutput = Future<Output = ()> + 'static;
        pub trait UpHandler<UPHO: UpHandlerOutput> = Fn(UpMsgRequest) -> UPHO + Clone + Send + 'static;
    }
    

    The macro would expand to something like the code below (it's compilable):

    pub trait UpHandlerOutput: Future<Output = ()> + 'static {}
    impl<T> UpHandlerOutput for T where T: Future<Output = ()> + 'static {}
    
    pub trait UpHandler<UPHO: UpHandlerOutput>: Fn(UpMsgRequest) -> UPHO + Clone + Send + 'static {}
    impl<T, UPHO: UpHandlerOutput> UpHandler<UPHO> for T where T: Fn(UpMsgRequest) -> UPHO + Clone + Send + 'static {}
    

    It's just an idea - maybe it doesn't make sense and it isn't a show-stopper for me. Thank you.

    opened by MartinKavik 3
  • doc comments support

    doc comments support

    Hi, thanks for publishing this,

    The only thing I miss is the ability to add doc-coments.

    It would be very nice to have support for either syntax /// or #[doc = ""].

    opened by joseluis 2
Releases(v0.3.0)
Owner
Igor Aleksanov
Passionate programmer
Igor Aleksanov
Rust bindings for the latest stable release of PROJ

PROJ Coordinate transformation via bindings to the PROJ v7.2.1 API. Two coordinate transformation operations are currently provided: projection (and i

GeoRust 96 Dec 21, 2022
Rust crate for performing coordinate transforms

Synopsis A Rust crate use for performing coordinate transformations. The crate relies on nalgebra vectors to perform the coordinate transformations. C

Dave 25 Aug 20, 2022
An fast, offline reverse geocoder (>1,000 HTTP requests per second) in Rust.

Rust Reverse Geocoder A fast reverse geocoder in Rust. Inspired by Python reverse-geocoder. Links Crate 2.0.0 Docs 1.0.1 Docs Description rrgeo takes

Grant Miner 91 Dec 29, 2022
Geospatial primitives and algorithms for Rust

geo Geospatial Primitives, Algorithms, and Utilities The geo crate provides geospatial primitive types such as Point, LineString, and Polygon, and pro

GeoRust 989 Dec 29, 2022
Rust bindings for GDAL

gdal [] GDAL bindings for Rust. So far, you can: open a raster dataset for reading/writing get size and number of bands get/set projection and geo-tra

GeoRust 211 Jan 4, 2023
Geohash for Rust

Rust-Geohash Rust-Geohash is a Rust library for Geohash algorithm. Ported from node-geohash module. Documentation Docs Check the API doc at docs.rs Li

GeoRust 74 Sep 8, 2022
Rust read/write support for well-known text (WKT)

wkt Rust read/write support for well-known text (WKT). License Licensed under either of Apache License, Version 2.0 (LICENSE-APACHE or http://www.apac

GeoRust 40 Dec 11, 2022
Google Encoded Polyline encoding & decoding in Rust.

polyline Google Encoded Polyline encoding & decoding in Rust. A Note on Coordinate Order This crate uses Coordinate and LineString types from the geo-

GeoRust 14 Dec 11, 2022
Geocoding library for Rust.

geocoding Rust utilities to enrich addresses, cities, countries, and landmarks with geographic coordinates through third-party geocoding web services.

GeoRust 55 Dec 12, 2022
Rust read/write support for GPS Exchange Format (GPX)

gpx gpx is a library for reading and writing GPX (GPS Exchange Format) files. It uses the primitives provided by geo-types to allow for storage of GPS

GeoRust 63 Dec 5, 2022