onehot-derive 0.1.0

Automatic derivation for the OneHot trait
Documentation
use std::default::Default;

use crate::metadata;


#[derive(Default)]
pub struct OneHotVariantProperties {
	pub ignore: bool,
}


impl OneHotVariantProperties {
	pub fn new(variant: &syn::Variant) -> Self {
		let mut props = Self::default();

		for meta in metadata::get("onehot", &variant.attrs) {
			match meta {
				syn::Meta::Path(p) => {
					if p.is_ident("ignore") {
						props.ignore = true;
					}
					else {
						panic!("unrecognized value in onehot(..) attribute");
					}
				}

				_ => panic!("invalid OneHot attribute"),
			}
		}

		props
	}
}


#[derive(Default)]
pub struct OneHotFieldProperties {
	pub ignore: bool,
}


impl OneHotFieldProperties {
	pub fn new(field: &syn::Field) -> Self {
		let mut props = Self::default();

		for meta in metadata::get("onehot", &field.attrs) {
			match meta {
				syn::Meta::Path(p) => {
					if p.is_ident("ignore") {
						props.ignore = true;
					}
					else {
						panic!("unrecognized value in onehot(..) attribute");
					}
				}

				_ => panic!("invalid OneHot attribute"),
			}
		}

		props
	}
}