code: func (c *VaultConfig) Merge(o *VaultConfig) *VaultConfig {
  	if c == nil {
  		if o == nil {
  			return nil
  		}
  		return o.Copy()
  	}
  
  	if o == nil {
  		return c.Copy()
  	}
  
  	r := c.Copy()
  
  	if o.Address != nil {
  		r.Address = o.Address
  	}
  
  	if o.Enabled != nil {
  		r.Enabled = o.Enabled
  	}
  
  	if o.Grace != nil {
  		r.Grace = o.Grace
  	}
  
  	if o.Namespace != nil {
  		r.Namespace = o.Namespace
  	}
  
  	if o.RenewToken != nil {
  		r.RenewToken = o.RenewToken
  	}
  
  	if o.Retry != nil {
  		r.Retry = r.Retry.Merge(o.Retry)
  	}
  
  	if o.SSL != nil {
  		r.SSL = r.SSL.Merge(o.SSL)
  	}
  
  	if o.Token != nil {
  		r.Token = o.Token
  	}
  
  	if o.VaultAgentTokenFile != nil {
  		r.VaultAgentTokenFile = o.VaultAgentTokenFile
  	}
  
  	if o.Transport != nil {
  		r.Transport = r.Transport.Merge(o.Transport)
  	}
  
  	if o.UnwrapToken != nil {
  		r.UnwrapToken = o.UnwrapToken
  	}
  
  	return r
  }
docs: // Merge combines all values in this configuration with the values in the other
  // configuration, with values in the other configuration taking precedence.
  // Maps and slices are merged, most other values are overwritten. Complex
  // structs define their own merge functionality.