MCPcopy Create free account
hub / github.com/compose-spec/compose-go / processExtensions

Function processExtensions

loader/loader.go:765–812  ·  view source on GitHub ↗
(dict map[string]any, p tree.Path, extensions map[string]any)

Source from the content-addressed store, hash-verified

763}
764
765func processExtensions(dict map[string]any, p tree.Path, extensions map[string]any) (map[string]interface{}, error) {
766 extras := map[string]any{}
767 var err error
768 for key, value := range dict {
769 skip := false
770 for _, uk := range userDefinedKeys {
771 if p.Matches(uk) {
772 skip = true
773 break
774 }
775 }
776 if !skip && strings.HasPrefix(key, "x-") {
777 extras[key] = value
778 delete(dict, key)
779 continue
780 }
781 switch v := value.(type) {
782 case map[string]interface{}:
783 dict[key], err = processExtensions(v, p.Next(key), extensions)
784 if err != nil {
785 return nil, err
786 }
787 case []interface{}:
788 for i, e := range v {
789 if m, ok := e.(map[string]interface{}); ok {
790 v[i], err = processExtensions(m, p.Next(strconv.Itoa(i)), extensions)
791 if err != nil {
792 return nil, err
793 }
794 }
795 }
796 }
797 }
798 for name, val := range extras {
799 if typ, ok := extensions[name]; ok {
800 target := reflect.New(reflect.TypeOf(typ)).Elem().Interface()
801 err = Transform(val, &target)
802 if err != nil {
803 return nil, err
804 }
805 extras[name] = target
806 }
807 }
808 if len(extras) > 0 {
809 dict[consts.Extensions] = extras
810 }
811 return dict, nil
812}
813
814// Transform converts the source into the target struct with compose types transformer
815// and the specified transformers if any.

Callers 1

ModelToProjectFunction · 0.85

Calls 3

TransformFunction · 0.85
MatchesMethod · 0.80
NextMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…