47 lines
812 B
Go
47 lines
812 B
Go
package kwargs
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"git.towk2.me/towk/makeshift/internal/format"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
const RESERVED_KEY = "kwargs"
|
|
|
|
type KWArgs map[string]any
|
|
|
|
func New() KWArgs {
|
|
return KWArgs{}
|
|
}
|
|
|
|
func (kw KWArgs) String() string {
|
|
return string(kw.Bytes())
|
|
}
|
|
|
|
func (kw KWArgs) Bytes() []byte {
|
|
b, err := json.Marshal(kw)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("failed to marshal kwargs")
|
|
return []byte("{}")
|
|
}
|
|
return b
|
|
}
|
|
|
|
func (kw *KWArgs) Set(v string /* should be JSON object*/) error {
|
|
var (
|
|
newArgs KWArgs
|
|
err error
|
|
)
|
|
err = format.Unmarshal([]byte(v), &newArgs, format.JSON)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to unmarshal value for %s: %w", kw.Type(), err)
|
|
}
|
|
*kw = newArgs
|
|
return nil
|
|
}
|
|
|
|
func (kw *KWArgs) Type() string {
|
|
return "KWArgs"
|
|
}
|