Преобразовать тип языка TL (mtproto) в C#
Я использую компилятор языка TL для компиляции схемы языка TL Telegram Api, описанной в https://core.telegram.org/mtproto в C#
Есть компилятор, который компилирует tl-язык для классов C# https://github.com/everbytes/SharpTL.Compiler
Но он может скомпилировать новую схему телеграммы в этой строке:
"params":[
{"name":"flags","type":"#"},
{"name":"report_spam","type":"flags.0?true"}]
,"type":"PeerSettings"}
И скомпилируйте его в неправильный код:
[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
[TLProperty(1)]
public I# Flags { get; set; }
[TLProperty(2)]
public IFlags0?true ReportSpam { get; set; }
}
Есть ли решение в приведении в C# коды?
Я не знаю, что это за тип этого "flags:#" в C#
Этот тип "#" описан в https://core.telegram.org/mtproto/TL-formal
user {flags:#} id:flags.0?string first_name:flags.1?string last_name:flags.2?string reserved3:flags.3?False reserved4:flags.4?False = User flags;
В будущем биты 3 и 4 в поле флагов могут использоваться для передачи новых полей после изменения имен и типов полей reserved3 и reserved4
2 ответа
peerSettings#818426cd flags:# report_spam:flags.0?true = PeerSettings
глубокий поиск вокруг этого, я думаю, что этот хеш (#) означает, что динамическое значение переменной, в некоторых случаях это может быть true или false, в других случаях это может быть последовательность целых неотрицательных чисел:
matrix {X:Type} m:# n:# a:(%Tuple (%Tuple X m) n) = Matrix X;
выше мы получили M и N, принимающие целое случайное значение> 0
get_users req_fields:# ids:%(Vector int) = Vector %(User req_fields)
в этом другом случае он может принимать условное значение
Переменная req_fields приведена только к объекту User, но в других случаях она может быть приведена
к другому виду объекта.
может быть, правильный путь этого TLObject в C#:
[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
[TLProperty(1)]
public int Flags { get; set; }
[TLProperty(2)]
public bool ReportSpam { get; set; }
}
извиняется мой английский ржавый