121 lines
3.0 KiB
Java
121 lines
3.0 KiB
Java
package io.gitlab.jfronny.muscript.data.dynamic.additional;
|
|
|
|
import io.gitlab.jfronny.commons.LazySupplier;
|
|
import io.gitlab.jfronny.commons.StringFormatter;
|
|
import io.gitlab.jfronny.commons.data.ImmCollection;
|
|
import io.gitlab.jfronny.muscript.compiler.ExprWriter;
|
|
import io.gitlab.jfronny.muscript.data.dynamic.*;
|
|
|
|
import java.io.IOException;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.function.Function;
|
|
import java.util.function.Supplier;
|
|
|
|
public class DFinal<T> {
|
|
public static DBool of(boolean b) {
|
|
return new FBool(b);
|
|
}
|
|
|
|
public static DNumber of(double b) {
|
|
return new FNumber(b);
|
|
}
|
|
|
|
public static DString of(String b) {
|
|
return new FString(b);
|
|
}
|
|
|
|
public static DObject of(Map<String, Dynamic<?>> b) {
|
|
return new FObject(Map.copyOf(b));
|
|
}
|
|
|
|
public static DList of(Dynamic<?>... b) {
|
|
return new FList(List.of(b));
|
|
}
|
|
|
|
public static DList of(List<Dynamic<?>> b) {
|
|
return new FList(ImmCollection.of(b));
|
|
}
|
|
|
|
public static DCallable of(Function<DList, Dynamic<?>> b, Supplier<String> serialized) {
|
|
return new FCallable(b, new LazySupplier<>(serialized));
|
|
}
|
|
|
|
private record FBool(boolean value) implements DBool {
|
|
@Override
|
|
public Boolean getValue() {
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return StringFormatter.toString(value);
|
|
}
|
|
}
|
|
|
|
private record FNumber(double value) implements DNumber {
|
|
@Override
|
|
public Double getValue() {
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return StringFormatter.toString(value);
|
|
}
|
|
}
|
|
|
|
private record FString(String value) implements DString {
|
|
@Override
|
|
public String getValue() {
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return Dynamic.serialize(this);
|
|
}
|
|
}
|
|
|
|
private record FObject(Map<String, Dynamic<?>> value) implements DObject {
|
|
@Override
|
|
public Map<String, Dynamic<?>> getValue() {
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return Dynamic.serialize(this);
|
|
}
|
|
}
|
|
|
|
private record FList(List<Dynamic<?>> value) implements DList {
|
|
@Override
|
|
public List<Dynamic<?>> getValue() {
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return value.toString();
|
|
}
|
|
}
|
|
|
|
private record FCallable(Function<DList, Dynamic<?>> value, Supplier<String> string) implements DCallable {
|
|
@Override
|
|
public void serialize(ExprWriter writer) throws IOException {
|
|
writer.append(toString());
|
|
}
|
|
|
|
@Override
|
|
public Function<DList, Dynamic<?>> getValue() {
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return string.get();
|
|
}
|
|
}
|
|
}
|