Schema and its serializers

Schema

Schema is a main class that allow dumps, loads messages for mtproto and returns schema structure that could be used to dump it. To create schema you need passed valid constructors(See Constructor) and functions(See Functions) that will be used in your program.

Example:

from dataclasses import dataclass
from typing import Annotated, Union, List

from mtpylon import Schema


@dataclass
class BoolTrue:
    class Meta:
        name = 'boolTrue'


@dataclass
class BoolFalse:
    class Meta:
        name = 'boolFalse'


Bool = Annotated[
  Union[BoolTrue, BoolFalse],
  'Bool'
]


@dataclass
class AuthorizedUser:
    id: int
    username: str
    password: str

    class Meta:
        name = 'authorizedUser'
        order = ('id', 'username', 'password')


@dataclass
class AnonymousUser:

    class Meta:
        name = 'anonymousUser'


User = Annotated[Union[AuthorizedUser, AnonymousUser], 'User']


@dataclass
class Task:
    id: int
    content: str
    completed: Bool

    class Meta:
        name = 'task'
        order = ('id', 'content', 'completed')


@dataclass
class TaskList:
    tasks: List[Task]

    class Meta:
        name = 'taskList'
        order = ('tasks', )


async def register(username: str, password: str) -> User:
    return AuthorizedUser(
        id=1,
        username=username,
        password=password
    )


async def login(username: str, password: str) -> User:
    if username == 'zapix' and password == '123123':
        return AuthorizedUser(
            id=1,
            username=username,
            password=password
        )

    return AnonymousUser()


async def set_task(content: str) -> Task:
    return Task(
        id=1,
        content=content,
        completed=BoolFalse()
    )


async def get_task_list() -> TaskList:
    return TaskList(tasks=[
        Task(
            id=1,
            content='Init mtpylon project',
            completed=BoolTrue()
        ),
        Task(
            id=2,
            content='Describe mtpylon schema',
            completed=BoolFalse()
        )
    ])


schema = Schema(
    constructors=[
        Bool,
        User,
        Task,
        TaskList,
    ],
    functions=[
        register,
        login,
        set_task,
        get_task_list,
    ]
)

Serializers

You could get schema structure with method schema.get_schema_structure() that allows you to create custom serializers. Mtpylon provides to_dict, to_json and to_tl_program (`See Tl-language: https://core.telegram.org/mtproto/TL`_ ) serializers by default

from mtpylon.serializers import to_dict, to_json, to_tl_program

to_dict(schema)  # returns python dict that could be serialized

to_json(schema)  # return json representation

to_tl_program(schema)  # return tl program representation