Skip to content
This repository has been archived by the owner on Jan 20, 2020. It is now read-only.

Bert-Proesmans/ct-utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

CT-Utils

This crate contains types and behaviours which resolve at compile time.

Getting started

Include this crate as dependancy by inserting the following into your Cargo.toml file.

[dependencies]
ct-utils = "0.0.1"

Inside your lib.rs or main.rs add the usage of this crate. Often used types are re-exported inside the prelude of this crate which lower the verbosity of your implementation. Otherwise all types are accessible through their fully qualified path.

#[macro_use] extern crate ct_utils;

// Optional
use ct_utils::prelude::*;

And you're all set!

Usage

An example of the included cons list is shown, which is the CTCons trait.

Construct a cons list of type items and calculate the offset of one specific type.

#[macro_use] extern crate ct_utils;

use ct_utils::prelude::*;
use ct_utils::ct_cons::Cons;

type BigList = Cons<Cons<Cons<Cons<Cons<TTerm, i32>, u32>, f32>, i64>, usize>;

fn main() {
	let list_size = BigList::size();							// 1-indexed
	let list_offset = <BigList as CTOffset<i64, _>>::offset(); 	// 0-indexed

	assert!(list_size > list_offset);
	assert_eq!(list_size, 5);
	assert_eq!(list_offset, 3);
}

About

Compile time utilities for Rust

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages