/* * Copyright 2026 Safronov Grigorii * * Licensed under the CDDL, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * https://opensource.org/licenses/CDDL-1.0 */ // Файл: internal/serializer/msgpack.go // Назначение: Сериализация и десериализация документов в формате MessagePack. // Используется библиотека vmihailenco/msgpack/v5 для высокой производительности. // // MessagePack — это эффективный бинарный формат сериализации, который: // - компактнее JSON (меньше размер); // - быстрее при сериализации/десериализации; // - поддерживает все основные типы данных; // - позволяет сериализовать структуры Go с учётом тегов `msgpack`/`json` // (поведение зависит от настроек библиотеки). // // Данный пакет предоставляет простую обёртку для унификации // использования MessagePack во всём проекте. // Package serializer предоставляет обёртки над сериализацией в формат // MessagePack. Используется для эффективного хранения и передачи // документов внутри СУБД futriis. package serializer import ( "github.com/vmihailenco/msgpack/v5" ) // Marshal сериализует значение в формат MessagePack. // // Параметры: // - v: любое значение Go (структура, карта, срез, примитив и т.д.). // // Возвращает: // - []byte: сериализованные данные; // - error: ошибка при сериализации (например, при наличии // несериализуемых типов, таких как каналы или функции). // // Пример использования: // // data, err := serializer.Marshal(myStruct) // if err != nil { // return err // } // // data содержит бинарное представление myStruct func Marshal(v interface{}) ([]byte, error) { return msgpack.Marshal(v) } // Unmarshal десериализует данные из формата MessagePack в значение. // // Параметры: // - data: бинарные данные в формате MessagePack; // - v: указатель на значение, в которое нужно десериализовать данные. // // Возвращает: // - error: ошибка при десериализации (например, если данные повреждены // или не соответствуют типу v). // // Важно: v должен быть указателем (!), иначе функция вернёт ошибку. // // Пример использования: // // var myStruct MyStruct // err := serializer.Unmarshal(data, &myStruct) // if err != nil { // return err // } // // myStruct содержит восстановленные данные func Unmarshal(data []byte, v interface{}) error { return msgpack.Unmarshal(data, v) }