Overgram/generator/src/main/java/io/github/lonamiwebs/overgram/parser/TLObject.java

81 lines
2.2 KiB
Java

package io.github.lonamiwebs.overgram.parser;
import java.util.ArrayList;
import java.util.List;
public class TLObject {
public final String fullname;
public final String namespace;
public final String name;
public final int code;
public final List<TLArg> args;
public final String type;
private TLObject(final String fullname, final int code, final List<TLArg> args, final String type) {
this.fullname = fullname;
this.code = code;
this.args = args;
this.type = type;
final String[] nsName = fullname.split("\\.");
if (nsName.length == 1) {
namespace = "";
name = nsName[0];
} else {
namespace = nsName[0];
name = nsName[1];
}
}
public static String toCamelCase(final String string) {
final int dot = string.lastIndexOf(".");
return string.substring(0, dot + 1)
+ string.substring(dot + 1, dot + 2).toUpperCase()
+ string.substring(dot + 2);
}
public static TLObject fromString(String string) {
String[] tmp;
String name;
String code;
String type;
tmp = string.split("\\s+=\\s+");
string = tmp[0];
type = tmp[1];
tmp = string.split(" ", 2);
name = tmp[0];
string = tmp.length == 1 ? "" : tmp[1];
tmp = name.split("#");
name = tmp[0];
code = tmp.length == 1 ? "0" : tmp[1];
final List<TLArg> args = new ArrayList<>();
if (!string.isEmpty()) {
for (final String part : string.split(" ")) {
args.add(TLArg.fromString(part));
}
}
return new TLObject(name, Integer.parseUnsignedInt(code, 16), args, type);
}
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append(fullname);
builder.append('#');
builder.append(Integer.toString(code, 16));
for (final TLArg arg : args) {
builder.append(' ');
builder.append(arg.toString());
}
builder.append(" = ");
builder.append(type);
return builder.toString();
}
}