using Lattice.Core.Docking.Abstractions;
using Lattice.Core.Docking.Engine;
namespace Lattice.Serialization.Docking;
///
/// Определяет контракт для сериализации и десериализации состояния макета док-системы.
/// Этот интерфейс позволяет реализовать различные форматы сериализации (JSON, XML, Binary)
/// и различные хранилища (файлы, базы данных, облако) без изменения основной логики.
///
///
/// Реализации этого интерфейса должны преобразовывать объектную модель док-системы
/// в промежуточный DTO (), который затем сериализуется в целевой формат.
/// Это обеспечивает независимость формата сериализации от структуры DTO.
///
public interface ILayoutSerializer
{
///
/// Получает уникальный идентификатор формата сериализации.
///
/// Строковый идентификатор формата, например "json", "xml", "binary".
string FormatId { get; }
///
/// Получает MIME-тип формата сериализации.
///
/// MIME-тип, например "application/json", "application/xml".
string MimeType { get; }
///
/// Получает расширение файла по умолчанию для данного формата.
///
/// Расширение файла, например ".json", ".xml".
string DefaultFileExtension { get; }
///
/// Сериализует состояние менеджера макета в массив байтов.
///
/// Менеджер макета для сериализации.
/// Массив байтов, содержащий сериализованное состояние макета.
/// Выбрасывается, если равен null.
byte[] Serialize(LayoutManager manager);
///
/// Сериализует состояние менеджера макета в строку.
///
/// Менеджер макета для сериализации.
/// Строковое представление состояния макета.
/// Выбрасывается, если равен null.
string SerializeToString(LayoutManager manager);
///
/// Сериализует состояние менеджера макета в поток.
///
/// Менеджер макета для сериализации.
/// Поток для записи сериализованных данных.
///
/// Выбрасывается, если или равен null.
///
void SerializeToStream(LayoutManager manager, Stream stream);
///
/// Десериализует состояние макета из массива байтов и восстанавливает его в менеджере.
///
/// Менеджер макета для восстановления состояния.
/// Массив байтов с сериализованным состоянием макета.
///
/// Функция разрешения контента по идентификатору, используемая для восстановления
/// ссылок на контент в десериализованном состоянии.
///
///
/// Выбрасывается, если или равен null.
///
void Deserialize(LayoutManager manager, byte[] data, Func contentResolver);
///
/// Десериализует состояние макета из строки и восстанавливает его в менеджере.
///
/// Менеджер макета для восстановления состояния.
/// Строка с сериализованным состоянием макета.
///
/// Функция разрешения контента по идентификатору, используемая для восстановления
/// ссылок на контент в десериализованном состоянии.
///
///
/// Выбрасывается, если или равен null.
///
void DeserializeFromString(LayoutManager manager, string serializedData, Func contentResolver);
///
/// Десериализует состояние макета из потока и восстанавливает его в менеджере.
///
/// Менеджер макета для восстановления состояния.
/// Поток с сериализованными данными.
///
/// Функция разрешения контента по идентификатору, используемая для восстановления
/// ссылок на контент в десериализованном состоянии.
///
///
/// Выбрасывается, если или равен null.
///
void DeserializeFromStream(LayoutManager manager, Stream stream, Func contentResolver);
}