81 lines
2.2 KiB
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();
|
|
}
|
|
}
|