Example: Enum-introspection
public enum MyEnum {
	VALUE_A = -10,
	VALUE_B = 10;
    public static bool try_parse_name (string name, out MyEnum result = null) {
        EnumClass enumc = (EnumClass) typeof (MyEnum).class_ref ();
        unowned EnumValue? eval = enumc.get_value_by_name (name);
        if (eval == null) {
			result = MyEnum.VALUE_A;
			return false;
		}
        result = (MyEnum) eval.value;
		return true;
    }
    public static bool try_parse_nick (string nick, out MyEnum result = null) {
        EnumClass enumc = (EnumClass) typeof (MyEnum).class_ref ();
        unowned EnumValue? eval = enumc.get_value_by_nick (nick);
        return_val_if_fail (eval != null, -1);
        if (eval == null) {
			result = MyEnum.VALUE_A;
			return false;
		}
       	result = (MyEnum) eval.value;
		return true;
    }
	public static int min () {
        EnumClass enumc = (EnumClass) typeof (MyEnum).class_ref ();
		return enumc.minimum;
	}
	public static int max () {
        EnumClass enumc = (EnumClass) typeof (MyEnum).class_ref ();
		return enumc.maximum;
	}
	public static uint n_values () {
        EnumClass enumc = (EnumClass) typeof (MyEnum).class_ref ();
		return enumc.n_values;
	}
	public string to_nick () {
        EnumClass enumc = (EnumClass) typeof (MyEnum).class_ref ();
        unowned EnumValue? eval = enumc.get_value (this);
        return_val_if_fail (eval != null, null);
        return eval.value_nick;
	}
	public static HashTable<unowned string, MyEnum> to_hash_table () {
		HashTable<unowned string, MyEnum> table = new HashTable<unowned string, MyEnum> (str_hash, str_equal);
        EnumClass enumc = (EnumClass) typeof (MyEnum).class_ref ();
		foreach (unowned EnumValue val in enumc.values) {
			table.insert (val.value_nick, (MyEnum) val.@value);
		}
		return table;
	}
}
public static int main (string[] args) {
	uint n_values = MyEnum.n_values ();
	assert (n_values == 2);
	int min = MyEnum.min ();
	assert (min == -10);
	int max = MyEnum.max ();
	assert (max == 10);
	// Output: ``MY_ENUM_VALUE_A, value-a``
	string str = MyEnum.VALUE_A.to_string ();
	string nick = MyEnum.VALUE_A.to_nick ();
	print ("%s, %s\n", str, nick);
	HashTable<unowned string, MyEnum> table = MyEnum.to_hash_table ();
	string key = "value-a";
	// Output: ``value-a, MY_ENUM_VALUE_A = value-a = -10``
	MyEnum val = table.lookup (key);
	print ("%s, %s = %s = %d\n", key, val.to_string (), val.to_nick (), val);
	// Output: ``value-b, MY_ENUM_VALUE_B = value-b = 10``
	key = "value-b";
	val = table.lookup (key);
	print ("%s, %s = %s = %d\n", key, val.to_string (), val.to_nick (), val);
	// Output: ``try-parse-nick: MY_ENUM_VALUE_A``
	MyEnum result;
	if (MyEnum.try_parse_nick ("value-a", out result)) {
		print ("try-parse-nick: %s\n", result.to_string ());
	}
	// Output: ``try-parse-name: MY_ENUM_VALUE_A``
	if (MyEnum.try_parse_name ("MY_ENUM_VALUE_A", out result)) {
		print ("try-parse-name: %s\n", result.to_string ());
	}
	return 0;
}
 valac --pkg gobject-2.0 GLib.EnumClass.vala
See: