code: func setIdentityConfigWithOptionInterface(c *IdentityConfigOptions, o interface{}) error {
  	s := &setter{}
  
  	s.set(c.client, func() bool { _, ok := o.(client); return ok }, func() { c.client = o.(client) })
  	s.set(c.caConfig, func() bool { _, ok := o.(caConfig); return ok }, func() { c.caConfig = o.(caConfig) })
  	s.set(c.caServerCerts, func() bool { _, ok := o.(caServerCerts); return ok }, func() { c.caServerCerts = o.(caServerCerts) })
  	s.set(c.caClientKey, func() bool { _, ok := o.(caClientKey); return ok }, func() { c.caClientKey = o.(caClientKey) })
  	s.set(c.caClientCert, func() bool { _, ok := o.(caClientCert); return ok }, func() { c.caClientCert = o.(caClientCert) })
  	s.set(c.caKeyStorePath, func() bool { _, ok := o.(caKeyStorePath); return ok }, func() { c.caKeyStorePath = o.(caKeyStorePath) })
  	s.set(c.credentialStorePath, func() bool { _, ok := o.(credentialStorePath); return ok }, func() { c.credentialStorePath = o.(credentialStorePath) })
  
  	if !s.isSet {
  		return errors.Errorf("option %#v is not a sub interface of IdentityConfig, at least one of its functions must be implemented.", o)
  	}
  	return nil
  }
docs: // will override IdentityConfig interface with functions provided by o (option)