Skip to content

Instantly share code, notes, and snippets.

@DeepSpawn
Created June 22, 2016 22:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DeepSpawn/eac6651d336f620405907607c509741f to your computer and use it in GitHub Desktop.
Save DeepSpawn/eac6651d336f620405907607c509741f to your computer and use it in GitHub Desktop.
public abstract class Json {
private Json() {
}
public abstract <T> T match(Function<Jseq, T> a,
Function<Jobj, T> b,
Function<Jnumber, T> c,
Function<Jstring, T> d,
Function<Jboolean, T> e,
Function<JNull, T> f
);
public static final class Jseq extends Json {
private final List<Json> elems;
public Jseq(final List<Json> elems) {
this.elems = elems;
}
public List<Json> getElems() {
return elems;
}
@Override
public <T> T match(final Function<Jseq, T> a,
final Function<Jobj, T> b,
final Function<Jnumber, T> c,
final Function<Jstring, T> d,
final Function<Jboolean, T> e,
final Function<JNull, T> f) {
return a.apply(this);
}
}
public static final class Jobj extends Json {
private final Map<String, Json> members;
public Jobj(final Map<String, Json> members) {
this.members = members;
}
public Map<String, Json> getMembers() {
return members;
}
@Override
public <T> T match(final Function<Jseq, T> a,
final Function<Jobj, T> b,
final Function<Jnumber, T> c,
final Function<Jstring, T> d,
final Function<Jboolean, T> e,
final Function<JNull, T> f) {
return b.apply(this);
}
}
public static final class Jnumber extends Json {
private final Double num;
public Jnumber(final double num) {
this.num = num;
}
public Double getNum() {
return num;
}
@Override
public <T> T match(final Function<Jseq, T> a,
final Function<Jobj, T> b,
final Function<Jnumber, T> c,
final Function<Jstring, T> d,
final Function<Jboolean, T> e,
final Function<JNull, T> f) {
return c.apply(this);
}
}
public static final class Jstring extends Json {
private final String str;
public Jstring(final String str) {
this.str = str;
}
public String getStr() {
return str;
}
@Override
public <T> T match(final Function<Jseq, T> a,
final Function<Jobj, T> b,
final Function<Jnumber, T> c,
final Function<Jstring, T> d,
final Function<Jboolean, T> e,
final Function<JNull, T> f) {
return d.apply(this);
}
}
public static final class Jboolean extends Json {
private final Boolean b;
public Jboolean(final Boolean b) {
this.b = b;
}
public Boolean getB() {
return b;
}
@Override
public <T> T match(final Function<Jseq, T> a,
final Function<Jobj, T> b,
final Function<Jnumber, T> c,
final Function<Jstring, T> d,
final Function<Jboolean, T> e,
final Function<JNull, T> f) {
return e.apply(this);
}
}
public static final class JNull extends Json {
public JNull() {
}
@Override
public <T> T match(final Function<Jseq, T> a,
final Function<Jobj, T> b,
final Function<Jnumber, T> c,
final Function<Jstring, T> d,
final Function<Jboolean, T> e,
final Function<JNull, T> f) {
return f.apply(this);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment