code: func (o *OIDCConnector) Parse() (services.OIDCConnector, error) {
  	if o.Display == "" {
  		o.Display = o.ID
  	}
  
  	var mappings []services.ClaimMapping
  	for _, c := range o.ClaimsToRoles {
  		var roles []string
  		if len(c.Roles) > 0 {
  			roles = append(roles, c.Roles...)
  		}
  
  		mappings = append(mappings, services.ClaimMapping{
  			Claim:        c.Claim,
  			Value:        c.Value,
  			Roles:        roles,
  			RoleTemplate: c.RoleTemplate,
  		})
  	}
  
  	other := &services.OIDCConnectorV1{
  		ID:            o.ID,
  		Display:       o.Display,
  		IssuerURL:     o.IssuerURL,
  		ClientID:      o.ClientID,
  		ClientSecret:  o.ClientSecret,
  		RedirectURL:   o.RedirectURL,
  		Scope:         o.Scope,
  		ClaimsToRoles: mappings,
  	}
  	v2 := other.V2()
  	v2.SetACR(o.ACR)
  	v2.SetProvider(o.Provider)
  	if err := v2.Check(); err != nil {
  		return nil, trace.Wrap(err)
  	}
  	return v2, nil
  }
docs: // Parse parses config struct into services connector and checks if it's valid