#zig #zero #const #macro #fn #play #comptime

macro constime

Zig's comptime for Rust with zero dependencies. Mostly something to play around with until more stuff is const fn.

5 unstable releases

new 0.3.0 Jan 18, 2025
0.2.2 Jan 6, 2023
0.2.1 Jan 6, 2023
0.2.0 Jan 6, 2023
0.1.0 Jan 6, 2023

#328 in Procedural macros

MIT license

9KB
95 lines

constime

Zig's comptime for Rust, with zero dependencies.

Usage

cargo add constime

Dependencies in comptime! can be stored in either [dependencies] or [build-dependencies].

If you use build dependencies, you will need to explicitly link with extern crate and a build.rs file to force them to compile.

Example

fn main() {
	use constime::comptime;

	// Let's use a pure-build time dependency
	println!("Here's a fact about the number 5: {}", comptime! {
		extern crate ureq;

		ureq::get("http://numbersapi.com/5/math")
			.call()
			.unwrap()
			.into_string()
			.unwrap()
	});

	// Standard library works fine too.
	println!(
		"Compiled {} seconds after unix epoch.",
		comptime! {
			std::time::SystemTime::now()
				.duration_since(std::time::UNIX_EPOCH)
				.expect("Time went backwards")
				.as_secs()
		}
	);
}

Note

You should get autocomplete and error feedback when using the macro.

This works with temporary files, which currently aren't automatically cleared.

If you notice your project getting a little large, periodically run cargo clean to remove these.

No runtime deps