code: func (s ClusterRoleBindingGeneratorV1) StructuredGenerate() (runtime.Object, error) {
  	if err := s.validate(); err != nil {
  		return nil, err
  	}
  	clusterRoleBinding := &rbacv1beta1.ClusterRoleBinding{}
  	clusterRoleBinding.Name = s.Name
  	clusterRoleBinding.RoleRef = rbacv1beta1.RoleRef{
  		APIGroup: rbacv1beta1.GroupName,
  		Kind:     "ClusterRole",
  		Name:     s.ClusterRole,
  	}
  	for _, user := range sets.NewString(s.Users...).List() {
  		clusterRoleBinding.Subjects = append(clusterRoleBinding.Subjects, rbacv1beta1.Subject{
  			Kind:     rbacv1beta1.UserKind,
  			APIGroup: rbacv1beta1.GroupName,
  			Name:     user,
  		})
  	}
  	for _, group := range sets.NewString(s.Groups...).List() {
  		clusterRoleBinding.Subjects = append(clusterRoleBinding.Subjects, rbacv1beta1.Subject{
  			Kind:     rbacv1beta1.GroupKind,
  			APIGroup: rbacv1beta1.GroupName,
  			Name:     group,
  		})
  	}
  	for _, sa := range sets.NewString(s.ServiceAccounts...).List() {
  		tokens := strings.Split(sa, ":")
  		if len(tokens) != 2 || tokens[0] == "" || tokens[1] == "" {
  			return nil, fmt.Errorf("serviceaccount must be <namespace>:<name>")
  		}
  		clusterRoleBinding.Subjects = append(clusterRoleBinding.Subjects, rbacv1beta1.Subject{
  			Kind:      rbacv1beta1.ServiceAccountKind,
  			APIGroup:  "",
  			Namespace: tokens[0],
  			Name:      tokens[1],
  		})
  	}
  
  	return clusterRoleBinding, nil
  }
docs: // StructuredGenerate outputs a clusterRoleBinding object using the configured fields.