func GetRequiredPropertySet()

in internal/langserver/schema/property_set.go [5:59]


func GetRequiredPropertySet(typeBase *types.TypeBase) []PropertySet {
	if typeBase == nil {
		return nil
	}
	switch t := (*typeBase).(type) {
	case *types.DiscriminatedObjectType:
		res := make([]PropertySet, 0)
		for name, element := range t.Elements {
			if element == nil {
				continue
			}
			propertySet := GetRequiredPropertySet(element.Type)
			if len(propertySet) == 1 {
				requiredProps := propertySet[0].Properties
				requiredProps[t.Discriminator] = Property{
					Name:  t.Discriminator,
					Value: name,
				}

				res = append(res, PropertySet{
					Name:       name,
					Properties: requiredProps,
				})
			}
		}
		return res
	case *types.ObjectType:
		requiredProps := make(map[string]Property)
		for propName, prop := range t.Properties {
			if prop.IsRequired() {
				if value := PropertyFromObjectProperty(propName, prop); value != nil {
					requiredProps[value.Name] = *value
				}
			}
		}
		return []PropertySet{{
			Name:       t.Name,
			Properties: requiredProps,
		}}
	case *types.ResourceType:
		if t.Body != nil {
			return GetRequiredPropertySet(t.Body.Type)
		}
	case *types.UnionType:
		res := make([]PropertySet, 0)
		for _, element := range t.Elements {
			if element.Type == nil {
				continue
			}
			res = append(res, GetRequiredPropertySet(element.Type)...)
		}
		return res
	}
	return nil
}