aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/values
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/values')
-rw-r--r--src/main/java/org/zwobble/couscous/values/BooleanValue.java20
-rw-r--r--src/main/java/org/zwobble/couscous/values/IntegerValue.java17
-rw-r--r--src/main/java/org/zwobble/couscous/values/PrimitiveValue.java5
-rw-r--r--src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java8
-rw-r--r--src/main/java/org/zwobble/couscous/values/PrimitiveValues.java17
-rw-r--r--src/main/java/org/zwobble/couscous/values/StringValue.java17
-rw-r--r--src/main/java/org/zwobble/couscous/values/UnitValue.java13
7 files changed, 97 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/values/BooleanValue.java b/src/main/java/org/zwobble/couscous/values/BooleanValue.java
new file mode 100644
index 0000000..e05c246
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/values/BooleanValue.java
@@ -0,0 +1,20 @@
+package org.zwobble.couscous.values;
+
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Value;
+
+@Value
+public class BooleanValue implements PrimitiveValue {
+ @Getter(value = AccessLevel.NONE)
+ boolean value;
+
+ public boolean getValue() {
+ return value;
+ }
+
+ @Override
+ public <T> T accept(PrimitiveValueVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/values/IntegerValue.java b/src/main/java/org/zwobble/couscous/values/IntegerValue.java
new file mode 100644
index 0000000..71c7a41
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/values/IntegerValue.java
@@ -0,0 +1,17 @@
+package org.zwobble.couscous.values;
+
+import static org.zwobble.couscous.values.TypeReference.typeRef;
+
+import lombok.Value;
+
+@Value
+public class IntegerValue implements PrimitiveValue {
+ public static final TypeReference REF = typeRef("java.lang.Integer");
+
+ int value;
+
+ @Override
+ public <T> T accept(PrimitiveValueVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/values/PrimitiveValue.java b/src/main/java/org/zwobble/couscous/values/PrimitiveValue.java
new file mode 100644
index 0000000..2cfe40a
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/values/PrimitiveValue.java
@@ -0,0 +1,5 @@
+package org.zwobble.couscous.values;
+
+public interface PrimitiveValue {
+ <T> T accept(PrimitiveValueVisitor<T> visitor);
+}
diff --git a/src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java b/src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java
new file mode 100644
index 0000000..07047b8
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/values/PrimitiveValueVisitor.java
@@ -0,0 +1,8 @@
+package org.zwobble.couscous.values;
+
+public interface PrimitiveValueVisitor<T> {
+ T visit(IntegerValue value);
+ T visit(StringValue value);
+ T visit(BooleanValue value);
+ T visit(UnitValue unitValue);
+}
diff --git a/src/main/java/org/zwobble/couscous/values/PrimitiveValues.java b/src/main/java/org/zwobble/couscous/values/PrimitiveValues.java
new file mode 100644
index 0000000..f6420f0
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/values/PrimitiveValues.java
@@ -0,0 +1,17 @@
+package org.zwobble.couscous.values;
+
+public class PrimitiveValues {
+ public static final PrimitiveValue UNIT = UnitValue.UNIT;
+
+ public static PrimitiveValue value(String value) {
+ return new StringValue(value);
+ }
+
+ public static PrimitiveValue value(int value) {
+ return new IntegerValue(value);
+ }
+
+ public static PrimitiveValue value(boolean value) {
+ return new BooleanValue(value);
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/values/StringValue.java b/src/main/java/org/zwobble/couscous/values/StringValue.java
new file mode 100644
index 0000000..256d6d1
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/values/StringValue.java
@@ -0,0 +1,17 @@
+package org.zwobble.couscous.values;
+
+import static org.zwobble.couscous.values.TypeReference.typeRef;
+
+import lombok.Value;
+
+@Value
+public class StringValue implements PrimitiveValue {
+ public static final TypeReference REF = typeRef("java.lang.String");
+
+ String value;
+
+ @Override
+ public <T> T accept(PrimitiveValueVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/values/UnitValue.java b/src/main/java/org/zwobble/couscous/values/UnitValue.java
new file mode 100644
index 0000000..14bf327
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/values/UnitValue.java
@@ -0,0 +1,13 @@
+package org.zwobble.couscous.values;
+
+public class UnitValue implements PrimitiveValue {
+ static final UnitValue UNIT = new UnitValue();
+
+ private UnitValue() {
+ }
+
+ @Override
+ public <T> T accept(PrimitiveValueVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}