// Path: src/main/java/com/statemachinesystems/envy/ValueParser.java
// public interface ValueParser<T> {
// 
//     /**
//      * Parse the given string into a value of the required type.
//      *
//      * @param value  the string to parse
//      * @return       a value of the required type
//      */
//     T parseValue(String value);
// 
//     /**
//      * Provide the type required by this parser.
//      *
//      * @return  a {@link java.lang.Class} object representing the required type
//      */
//     Class<T> getValueClass();
// }
// 
// Path: src/main/java/com/statemachinesystems/envy/Assertions.java
// public static void assertEnum(Class<?> c) {
//     if (! c.isEnum()) {
//         throw new IllegalArgumentException(
//                 String.format("%s is not an enum", c.getCanonicalName()));
//     }
// }


import com.statemachinesystems.envy.ValueParser;
import static com.statemachinesystems.envy.Assertions.assertEnum;
package com.statemachinesystems.envy.parsers;



/**
 * {@link ValueParser} implementation for enum values.
 *
 * @param <T>  the enum type to be parsed
 */
public class EnumValueParser<T extends Enum<T>> implements ValueParser<T> {

    private final Class<T> enumClass;

    public EnumValueParser(Class<T> enumClass) {
// Path: src/main/java/com/statemachinesystems/envy/ValueParser.java
// public interface ValueParser<T> {
// 
//     /**
//      * Parse the given string into a value of the required type.
//      *
//      * @param value  the string to parse
//      * @return       a value of the required type
//      */
//     T parseValue(String value);
// 
//     /**
//      * Provide the type required by this parser.
//      *
//      * @return  a {@link java.lang.Class} object representing the required type
//      */
//     Class<T> getValueClass();
// }
// 
// Path: src/main/java/com/statemachinesystems/envy/Assertions.java
// public static void assertEnum(Class<?> c) {
//     if (! c.isEnum()) {
//         throw new IllegalArgumentException(
//                 String.format("%s is not an enum", c.getCanonicalName()));
//     }
// }


// Path: src/main/java/com/statemachinesystems/envy/parsers/EnumValueParser.java
import com.statemachinesystems.envy.ValueParser;
import static com.statemachinesystems.envy.Assertions.assertEnum;

package com.statemachinesystems.envy.parsers;



/**
 * {@link ValueParser} implementation for enum values.
 *
 * @param <T>  the enum type to be parsed
 */
public class EnumValueParser<T extends Enum<T>> implements ValueParser<T> {

    private final Class<T> enumClass;

    public EnumValueParser(Class<T> enumClass) {
        assertEnum(enumClass);