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
|
|||
|
|
}
|