implementation_set.go 908 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package registry
  2. import "github.com/v2fly/v2ray-core/v4/common/protoext"
  3. //go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen
  4. type implementationSet struct {
  5. AliasLookup map[string]*implementation
  6. }
  7. type implementation struct {
  8. FullName string
  9. Alias []string
  10. }
  11. func (i *implementationSet) RegisterImplementation(name string, opt *protoext.MessageOpt) {
  12. alias := opt.GetShortName()
  13. impl := &implementation{
  14. FullName: name,
  15. Alias: alias,
  16. }
  17. for _, aliasName := range alias {
  18. i.AliasLookup[aliasName] = impl
  19. }
  20. }
  21. func (i *implementationSet) FindImplementationByAlias(alias string) (string, error) {
  22. impl, found := i.AliasLookup[alias]
  23. if found {
  24. return impl.FullName, nil
  25. }
  26. return "", newError("cannot find implementation by alias")
  27. }
  28. func newImplementationSet() *implementationSet {
  29. return &implementationSet{AliasLookup: map[string]*implementation{}}
  30. }