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 args; public final String type; private TLObject(final String fullname, final int code, final List 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 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(); } }