#ast #iterator #supply #syntax-tree #systems-programming #parameters

no-std parametrized

Supply useful iterating methods for user-defined types which are parametrized by type parameters

6 releases

0.1.5 Oct 14, 2024
0.1.4 Oct 12, 2024
0.1.3 Sep 30, 2024

#422 in Data structures

Download history 260/week @ 2024-09-18 341/week @ 2024-09-25 39/week @ 2024-10-02 299/week @ 2024-10-09 46/week @ 2024-10-16

411 downloads per month

MIT and LGPL-3.0-or-later

42KB
1K SLoC

parametrized crate Latest Version Documentation GitHub Actions

This Rust library provides a procedural macro attribute #[parametrized] that automatically implements methods like [Parametrized::param_iter()], [ParametrizedIntoIter::param_into_iter()], [ParametrizedIterMut::param_iter_mut()], and [ParametrizedMap::param_map()] for user-defined struct and enum types. The primary purpose of the library is to enable seamless traversal and transformation of complex data structures containing various nested collection types.

Motivation

The parametrized library is particularly well-suited for handling complex data structures commonly found in compiler development and systems programming, such as Abstract Syntax Trees (ASTs) and Instruction Set Architectures (ISAs). These data structures often involve deeply nested collections and varying node types, making manual implementation of methods like iter, iter_mut, and map both tedious and error-prone.

ISA example

# use parametrized::*;
# use std::collections::BTreeSet;
# #[allow(unused)]
#[parametrized(default, into_iter, map)]
enum Instruction<Operand: Ord> {
    BinaryOp {
        _op: String,
        _src: Operand,
        _dest: BTreeSet<Operand>,
    },
    LoadStore {
        _op: String,
        _address: Vec<(Operand, bool)>,
        _value: Operand,
    },
    Branch {
        _condition: String,
        _target: String,
    },
}

Dependencies

~16–26MB
~389K SLoC