You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

config.go 1.0 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package exec
  2. import (
  3. "gitlink.org.cn/cloudream/common/pkgs/types"
  4. "gitlink.org.cn/cloudream/common/utils/reflect2"
  5. "gitlink.org.cn/cloudream/common/utils/serder/json"
  6. )
  7. type ConfigBuilder struct {
  8. unions []*types.AnyTypeUnion
  9. opUnion types.TypeUnion[Op]
  10. workerInfoType reflect2.Type
  11. }
  12. func (c *ConfigBuilder) UseUnion(u *types.AnyTypeUnion) *ConfigBuilder {
  13. c.unions = append(c.unions, u)
  14. return c
  15. }
  16. func (c *ConfigBuilder) UseOpType(nilValue Op) *ConfigBuilder {
  17. c.opUnion.Add(reflect2.TypeOfValue(nilValue))
  18. return c
  19. }
  20. func (c *ConfigBuilder) UseWorkerInfoType(nilValue WorkerInfo) *ConfigBuilder {
  21. c.workerInfoType = reflect2.TypeOfValue(nilValue)
  22. return c
  23. }
  24. func (c *ConfigBuilder) Build() Config {
  25. b := json.New().UseUnionExternallyTagged(c.opUnion.ToAny())
  26. for _, u := range c.unions {
  27. b.UseUnionExternallyTagged(u)
  28. }
  29. // b.UseExtension(&workerInfoJSONExt{workerInfoType: c.workerInfoType})
  30. ser := b.Build()
  31. return Config{
  32. Serder: ser,
  33. }
  34. }
  35. type Config struct {
  36. Serder json.Serder
  37. }