verty 0.1.1

procedural macro to generate different versions of a type
Documentation
assert_expansion_eq!(unversioned: {
	enum Foo {
		A,
		B(u8),
		C { x: u16 }
	}
} => {
	enum FooV0 {
		A,
		B(u8),
		C { x: u16 }
	}
});

assert_expansion_eq!(added_variants: {
	enum Foo {
		A,
		#[ver = 1..]
		B,
		#[ver = 2..=3]
		C,
		#[ver = ..2]
		D
	}
} => {
	enum FooV0 {
		A,
		D
	}

	enum FooV1 {
		A,
		B,
		D
	}

	enum FooV2 {
		A,
		B,
		C
	}

	enum FooV3 {
		A,
		B,
		C
	}
});

assert_expansion_eq!(added_fields: {
	enum Foo {
		A(#[ver = 1..] u8, #[ver = ..=2] u16),
		B { x: bool, #[ver = 2..3] y: bool },
	}
} => {
	enum FooV0 {
		A(u16),
		B { x: bool }
	}

	enum FooV1 {
		A(u8, u16),
		B { x: bool }
	}

	enum FooV2 {
		A(u8, u16),
		B { x: bool, y: bool }
	}

	enum FooV3 {
		A(u8),
		B { x: bool }
	}
});

assert_expansion_eq!(added_variants_and_fields: {
	enum Foo {
		#[ver = 1..=2]
		A { x: bool, #[ver = 2..] y: bool },
		#[ver = ..2]
		B { a: u8, #[ver = 2..] b: u8 }
	}
} => {
	enum FooV0 {
		B { a: u8 }
	}

	enum FooV1 {
		A { x: bool },
		B { a: u8 }
	}

	enum FooV2 {
		A { x: bool, y: bool }
	}
});