Преобразовать тип языка 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 ответа

Это означает int согласно TLGenerator

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; }

}

извиняется мой английский ржавый

Другие вопросы по тегам