package scotch.data.ord; import static scotch.runtime.RuntimeSupport.callable; import static scotch.symbol.type.TypeDescriptors.sum; import java.util.List; import com.google.common.collect.ImmutableList; import scotch.runtime.Callable; import scotch.symbol.DataConstructor; import scotch.symbol.DataType; import scotch.symbol.TypeParameters; import scotch.symbol.Value; import scotch.symbol.ValueType; import scotch.symbol.type.TypeDescriptor; @SuppressWarnings("unused") @DataType(memberName = "Ordering") public abstract class Ordering { public static final TypeDescriptor TYPE = sum("scotch.data.ord.Ordering"); @Value(memberName = "EqualTo") public static Callable<Ordering> equalTo() { return EqualTo.INSTANCE; } @ValueType(forMember = "EqualTo") public static TypeDescriptor equalTo$type() { return TYPE; } @Value(memberName = "GreaterThan") public static Callable<Ordering> greaterThan() { return GreaterThan.INSTANCE; } @ValueType(forMember = "GreaterThan") public static TypeDescriptor greaterThan$type() { return TYPE; } @Value(memberName = "LessThan") public static Callable<Ordering> lessThan() { return LessThan.INSTANCE; } @ValueType(forMember = "LessThan") public static TypeDescriptor lessThan$type() { return TYPE; } @TypeParameters public static List<TypeDescriptor> parameters() { return ImmutableList.of(); } private Ordering() { // intentionally empty } @DataConstructor(ordinal = 1, memberName = "EqualTo", dataType = "Ordering") public static class EqualTo extends Ordering { public static final Callable<Ordering> INSTANCE = callable(EqualTo::new); private EqualTo() { // intentionally empty } @Override public String toString() { return "EqualTo"; } } @DataConstructor(ordinal = 2, memberName = "GreaterThan", dataType = "Ordering") public static class GreaterThan extends Ordering { public static final Callable<Ordering> INSTANCE = callable(GreaterThan::new); private GreaterThan() { // intentionally empty } @Override public String toString() { return "GreaterThan"; } } @DataConstructor(ordinal = 0, memberName = "LessThan", dataType = "Ordering") public static class LessThan extends Ordering { public static final Callable<Ordering> INSTANCE = callable(LessThan::new); private LessThan() { // intentionally empty } @Override public String toString() { return "LessThan"; } } }