MCPcopy Create free account
hub / github.com/DoNewsCode/core / newDefaultDriver

Function newDefaultDriver

leader/dependency.go:101–140  ·  view source on GitHub ↗
(args DriverArgs)

Source from the content-addressed store, hash-verified

99}
100
101func newDefaultDriver(args DriverArgs) (Driver, error) {
102 var diDriver struct {
103 di.In
104 Driver `optional:"true"`
105 }
106 if err := args.Populator.Populate(&diDriver); err != nil {
107 return nil, fmt.Errorf("failed to contruct default driver from DI: %w", err)
108 }
109 if diDriver.Driver != nil {
110 return diDriver.Driver, nil
111 }
112
113 var injected struct {
114 di.In
115
116 Conf contract.ConfigUnmarshaler
117 AppName contract.AppName
118 Env contract.Env
119 Maker otetcd.Maker
120 Driver Driver `optional:"true"`
121 }
122 if err := args.Populator.Populate(&injected); err != nil {
123 return nil, fmt.Errorf("missing dependency for the default election driver: %w", err)
124 }
125 if injected.Driver != nil {
126 return injected.Driver, nil
127 }
128 var option Option
129 if err := injected.Conf.Unmarshal("leader", &option); err != nil {
130 return nil, fmt.Errorf("leader election configuration error: %w", err)
131 }
132 if option.EtcdName == "" {
133 option.EtcdName = "default"
134 }
135 etcdClient, err := injected.Maker.Make(option.EtcdName)
136 if err != nil {
137 return nil, fmt.Errorf("failed to initiate leader election with etcd driver (%s): %w", option.EtcdName, err)
138 }
139 return leaderetcd.NewEtcdDriver(etcdClient, key.New(injected.AppName.String(), injected.Env.String())), nil
140}
141
142type configOut struct {
143 di.Out

Callers 2

TestPreferDriverInDIFunction · 0.85

Calls 6

NewEtcdDriverFunction · 0.92
NewFunction · 0.92
PopulateMethod · 0.65
UnmarshalMethod · 0.65
MakeMethod · 0.65
StringMethod · 0.65

Tested by 2

TestPreferDriverInDIFunction · 0.68