Files
Lattice/Lattice.Serialization.Docking/ILayoutSerializer.cs
2026-01-18 16:33:35 +03:00

103 lines
6.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Lattice.Core.Docking.Abstractions;
using Lattice.Core.Docking.Engine;
namespace Lattice.Serialization.Docking;
/// <summary>
/// Определяет контракт для сериализации и десериализации состояния макета док-системы.
/// Этот интерфейс позволяет реализовать различные форматы сериализации (JSON, XML, Binary)
/// и различные хранилища (файлы, базы данных, облако) без изменения основной логики.
/// </summary>
/// <remarks>
/// Реализации этого интерфейса должны преобразовывать объектную модель док-системы
/// в промежуточный DTO (<see cref="LayoutDto"/>), который затем сериализуется в целевой формат.
/// Это обеспечивает независимость формата сериализации от структуры DTO.
/// </remarks>
public interface ILayoutSerializer
{
/// <summary>
/// Получает уникальный идентификатор формата сериализации.
/// </summary>
/// <value>Строковый идентификатор формата, например "json", "xml", "binary".</value>
string FormatId { get; }
/// <summary>
/// Получает MIME-тип формата сериализации.
/// </summary>
/// <value>MIME-тип, например "application/json", "application/xml".</value>
string MimeType { get; }
/// <summary>
/// Получает расширение файла по умолчанию для данного формата.
/// </summary>
/// <value>Расширение файла, например ".json", ".xml".</value>
string DefaultFileExtension { get; }
/// <summary>
/// Сериализует состояние менеджера макета в массив байтов.
/// </summary>
/// <param name="manager">Менеджер макета для сериализации.</param>
/// <returns>Массив байтов, содержащий сериализованное состояние макета.</returns>
/// <exception cref="ArgumentNullException">Выбрасывается, если <paramref name="manager"/> равен null.</exception>
byte[] Serialize(LayoutManager manager);
/// <summary>
/// Сериализует состояние менеджера макета в строку.
/// </summary>
/// <param name="manager">Менеджер макета для сериализации.</param>
/// <returns>Строковое представление состояния макета.</returns>
/// <exception cref="ArgumentNullException">Выбрасывается, если <paramref name="manager"/> равен null.</exception>
string SerializeToString(LayoutManager manager);
/// <summary>
/// Сериализует состояние менеджера макета в поток.
/// </summary>
/// <param name="manager">Менеджер макета для сериализации.</param>
/// <param name="stream">Поток для записи сериализованных данных.</param>
/// <exception cref="ArgumentNullException">
/// Выбрасывается, если <paramref name="manager"/> или <paramref name="stream"/> равен null.
/// </exception>
void SerializeToStream(LayoutManager manager, Stream stream);
/// <summary>
/// Десериализует состояние макета из массива байтов и восстанавливает его в менеджере.
/// </summary>
/// <param name="manager">Менеджер макета для восстановления состояния.</param>
/// <param name="data">Массив байтов с сериализованным состоянием макета.</param>
/// <param name="contentResolver">
/// Функция разрешения контента по идентификатору, используемая для восстановления
/// ссылок на контент в десериализованном состоянии.
/// </param>
/// <exception cref="ArgumentNullException">
/// Выбрасывается, если <paramref name="manager"/> или <paramref name="data"/> равен null.
/// </exception>
void Deserialize(LayoutManager manager, byte[] data, Func<string, IDockContent?> contentResolver);
/// <summary>
/// Десериализует состояние макета из строки и восстанавливает его в менеджере.
/// </summary>
/// <param name="manager">Менеджер макета для восстановления состояния.</param>
/// <param name="serializedData">Строка с сериализованным состоянием макета.</param>
/// <param name="contentResolver">
/// Функция разрешения контента по идентификатору, используемая для восстановления
/// ссылок на контент в десериализованном состоянии.
/// </param>
/// <exception cref="ArgumentNullException">
/// Выбрасывается, если <paramref name="manager"/> или <paramref name="serializedData"/> равен null.
/// </exception>
void DeserializeFromString(LayoutManager manager, string serializedData, Func<string, IDockContent?> contentResolver);
/// <summary>
/// Десериализует состояние макета из потока и восстанавливает его в менеджере.
/// </summary>
/// <param name="manager">Менеджер макета для восстановления состояния.</param>
/// <param name="stream">Поток с сериализованными данными.</param>
/// <param name="contentResolver">
/// Функция разрешения контента по идентификатору, используемая для восстановления
/// ссылок на контент в десериализованном состоянии.
/// </param>
/// <exception cref="ArgumentNullException">
/// Выбрасывается, если <paramref name="manager"/> или <paramref name="stream"/> равен null.
/// </exception>
void DeserializeFromStream(LayoutManager manager, Stream stream, Func<string, IDockContent?> contentResolver);
}