1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-07-07 05:44:28 -04:00
v2fly/common/taggedfeatures/creator.go

35 lines
907 B
Go
Raw Normal View History

2021-06-19 05:26:54 -04:00
package taggedfeatures
import (
"context"
2021-10-28 06:34:19 -04:00
"github.com/v2fly/v2ray-core/v5/common"
"github.com/v2fly/v2ray-core/v5/common/serial"
"github.com/v2fly/v2ray-core/v5/features"
2021-06-19 05:26:54 -04:00
)
func NewHolderFromConfig(ctx context.Context, config *Config, memberType interface{}) (features.TaggedFeatures, error) {
holder := NewHolder(ctx, memberType)
for k, v := range config.Features {
var err error
2021-06-19 09:36:54 -04:00
instance, err := serial.GetInstanceOf(v)
2021-06-19 05:26:54 -04:00
if err != nil {
return nil, newError("unable to get instance").Base(err)
}
obj, err := common.CreateObject(ctx, instance)
if err != nil {
return nil, newError("unable to create object").Base(err)
}
if feat, ok := obj.(features.Feature); ok {
err = holder.AddFeaturesByTag(k, feat)
if err != nil {
return nil, newError("unable to add feature").Base(err)
}
continue
}
return nil, newError("not a feature ", k)
}
return holder, nil
}