У меня есть следующая PartnerType
структура enum в go:
// PartnerType enum
type PartnerType int
const (
// PartnerTypeUnknown should never happen
PartnerTypeUnknown PartnerType = iota
// PartnerTypeTest test
PartnerTypeTest
)
func (t PartnerType) String() string {
names := [...]string{
"UNKNOWN",
"TEST"}
if t < PartnerTypeUnknown || t > PartnerTypeTest {
return names[0]
}
return names[t]
}
// MarshalJSON for enum
func (t PartnerType) MarshalJSON() ([]byte, error) {
s := t.String()
return json.Marshal(s)
}
// UnmarshalJSON for enum
func (t *PartnerType) UnmarshalJSON(b []byte) error {
*t = PartnerTypeUnknown
return nil
}
// MarshalText implements the text marshaller method
func (t *PartnerType) MarshalText() ([]byte, error) {
return []byte(t.String()), nil
}
// UnmarshalText implements the text unmarshaller method
func (t *PartnerType) UnmarshalText(text []byte) error {
*t = PartnerTypeUnknown
return nil
}
// Partner entity
type Partner struct {
ID string `dynamodbav:"PK,omitempty"`
Foo string `dynamodbav:"SK,omitempty"`
PartnerType PartnerType `dynamodbav:",omitempty,string"`
}
При выполнении dynamodbattribute.MarshalMap()
я бы хотел, чтобы мой PartnerType
был сохранен в виде строки. Тег dynamicodbav позволяет вам хранить int в виде строки (dynamodbav:",omitempty,string"
), однако он не вызывает мои определенные реализации .String()
или Marshal/Unmarshal
.
Сказанный иначе, он хранит PartnerTypeTest
как "1"
, а не "TEST"
.
Как это можно сделать?