45 lines
1.8 KiB
Go
45 lines
1.8 KiB
Go
// /futriis/internal/msgpack/deserializer.go
|
||
// Пакет msgpack расширяет функциональность десериализации для работы с динамическими типами.
|
||
// Deserializer предоставляет дополнительные методы для десериализации произвольных значений и map-структур из формата MessagePack.
|
||
// Используется когда точный тип данных неизвестен заранее, например, при обработке полей кортежей с различными типами значений.
|
||
// Интегрируется с основным сериализатором для полного цикла преобразований.
|
||
|
||
package msgpack
|
||
|
||
import (
|
||
"futriis/pkg/types"
|
||
"github.com/vmihailenco/msgpack/v5"
|
||
)
|
||
|
||
// Deserializer расширяет функциональность десериализации
|
||
type Deserializer struct {
|
||
serializer *Serializer
|
||
}
|
||
|
||
// NewDeserializer создаёт новый экземпляр десериализатора
|
||
func NewDeserializer() *Deserializer {
|
||
return &Deserializer{
|
||
serializer: NewSerializer(),
|
||
}
|
||
}
|
||
|
||
// DeserializeValue десериализует значение произвольного типа
|
||
func (d *Deserializer) DeserializeValue(data []byte) (interface{}, error) {
|
||
var value interface{}
|
||
err := msgpack.Unmarshal(data, &value)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return value, nil
|
||
}
|
||
|
||
// DeserializeMap десериализует данные в карту
|
||
func (d *Deserializer) DeserializeMap(data []byte) (map[string]interface{}, error) {
|
||
var m map[string]interface{}
|
||
err := msgpack.Unmarshal(data, &m)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return m, nil
|
||
}
|