Crate data_type

Source
Expand description

§Module :: data_type

experimental rust-status docs.rs Open in Gitpod discord

Collection of primal data types.

§Basic Use Case :: type constructors

In Rust, you often need to wrap a given type into a new one. The role of the orphan rules in particular is basically to prevent you from implementing external traits for external types. To overcome the restriction developer usually wrap the external type into a tuple introducing a new type. Type constructor does exactly that and auto-implement traits From, Into, Deref and few more for the constructed type.

Macro types is responsible for generating code for Single, Pair, Homopair, Many. Each type constructor has its own keyword for that, but Pair and Homopair use the same keyword difference in a number of constituent types. It is possible to define all types at once:

#[ cfg( feature = "enabled" ) ]
{
  use data_type::prelude::*;

  // qqq : xxx : write please

}

§Basic Use Case :: make - variadic constructor

Implement traits [From_0], [From1] up to MakeN to provide the interface to construct your structure with a different set of arguments. In this example structure, Struct1 could be constructed either without arguments, with a single argument, or with two arguments.

  • Constructor without arguments fills fields with zero.
  • Constructor with a single argument sets both fields to the value of the argument.
  • Constructor with 2 arguments set individual values of each field.
#[ cfg( feature = "make" ) ]
{
  use type_constructor::prelude::*;

  #[ derive( Debug, PartialEq ) ]
  struct Struct1
  {
    a : i32,
    b : i32,
  }

  impl From_0 for Struct1
  {
    fn from_0() -> Self
    {
      Self { a : 0, b : 0 }
    }
  }

  impl From1< i32 > for Struct1
  {
    fn from1( val : i32 ) -> Self
    {
      Self { a : val, b : val }
    }
  }

  impl From2< i32, i32 > for Struct1
  {
    fn from2( val1 : i32, val2 : i32 ) -> Self
    {
      Self { a : val1, b : val2 }
    }
  }

  let got : Struct1 = from!();
  let exp = Struct1{ a : 0, b : 0 };
  assert_eq!( got, exp );

  let got : Struct1 = from!( 13 );
  let exp = Struct1{ a : 13, b : 13 };
  assert_eq!( got, exp );

  let got : Struct1 = from!( 1, 3 );
  let exp = Struct1{ a : 1, b : 3 };
  assert_eq!( got, exp );
}

§To add to your project

cargo add data_type

§Try out from the repository

git clone https://github.com/Wandalen/wTools
cd wTools
cd examples/type_constructor_multiple
cargo run

Modules§

binary_heap
std::collections::BinaryHeap macros
btree_map
std::collections::BTreeMap macros
btree_set
std::collections::BTreeSet macros
collection
Module containing all collection macros
dependency
Namespace with dependencies.
dt
Wrap dependencies under a namespace.
exposed
Exposed namespace of the module.
hash_map
std::collections::HashMap macros
hash_set
std::collections::HashSet macros
linked_list
std::collections::LinkedList macros
orphan
Shared with parent namespace of the module
own
Own namespace of the module.
prelude
Prelude to use essentials: use my_module::prelude::*.
vec_deque
std::collections::VecDeque macros
vector
Vec macros

Structs§

BTreeMap
An ordered map based on a B-Tree.
BTreeSet
An ordered set based on a B-Tree.
BinaryHeap
A priority queue implemented with a binary heap.
Bmap
An ordered map based on a B-Tree.
Bset
An ordered set based on a B-Tree.
Deque
A double-ended queue implemented with a growable ring buffer.
Dlist
A contiguous growable array type, written as Vec<T>, short for ‘vector’.
HashMap
A hash map implemented with quadratic probing and SIMD lookup.
HashSet
A hash set implemented as a HashMap where the value is ().
Hmap
A hash map implemented with quadratic probing and SIMD lookup.
Hset
A hash set implemented as a HashMap where the value is ().
Interval
Canonical implementation of interval. Other implementations of interval is convertible to it.
LinkedList
A doubly-linked list with owned nodes.
Llist
A doubly-linked list with owned nodes.
Map
A hash map implemented with quadratic probing and SIMD lookup.
Set
A hash set implemented as a HashMap where the value is ().
Vec
A contiguous growable array type, written as Vec<T>, short for ‘vector’.
VecDeque
A double-ended queue implemented with a growable ring buffer.

Enums§

Bound
An endpoint of a range of keys.
Either
The enum Either with variants Left and Right is a general purpose sum type with two cases.

Traits§

BoundExt
Extend bound adding few methods.
EndPointTrait
Enpoint of an interval, aka bound of a range. Special trait to avoid repeating all the bound on endpoint.
IntoInterval
Convert it into canonical interval.
IterableInterval
Interval adapter. Interface to interval-like structures.
NonIterableInterval
Interval adapter. Interface to interval-like structures.