66 "io"
77 "os"
88 "path/filepath"
9+ "reflect"
910
1011 "github.com/speakeasy-api/openapi/extensions"
1112 "github.com/speakeasy-api/openapi/jsonschema/oas3"
@@ -599,8 +600,26 @@ func cleanUnknownPropertiesFromModel(model any) error {
599600 return nil
600601}
601602
603+ func isNilAny (v any ) bool {
604+ if v == nil {
605+ return true
606+ }
607+
608+ rv := reflect .ValueOf (v )
609+ switch rv .Kind () {
610+ case reflect .Chan , reflect .Func , reflect .Map , reflect .Pointer , reflect .Slice :
611+ return rv .IsNil ()
612+ default :
613+ return false
614+ }
615+ }
616+
602617// getCoreModelFromAny attempts to extract a core model from various wrapper types
603618func getCoreModelFromAny (model any ) any {
619+ if isNilAny (model ) {
620+ return nil
621+ }
622+
604623 // Try direct core getter
605624 type coreGetter interface {
606625 GetCoreAny () any
@@ -609,7 +628,7 @@ func getCoreModelFromAny(model any) any {
609628 var directCore any
610629 if coreModel , ok := model .(coreGetter ); ok {
611630 directCore = coreModel .GetCoreAny ()
612- if directCore != nil {
631+ if ! isNilAny ( directCore ) {
613632 if coreModeler , ok := directCore .(marshaller.CoreModeler ); ok {
614633 if len (coreModeler .GetUnknownProperties ()) > 0 {
615634 return directCore
@@ -627,9 +646,9 @@ func getCoreModelFromAny(model any) any {
627646
628647 if navigable , ok := model .(navigableNoder ); ok {
629648 inner , err := navigable .GetNavigableNode ()
630- if err == nil && inner != nil {
649+ if err == nil && ! isNilAny ( inner ) {
631650 // Recursively try to get core from the inner value
632- if innerCore := getCoreModelFromAny (inner ); innerCore != nil {
651+ if innerCore := getCoreModelFromAny (inner ); ! isNilAny ( innerCore ) {
633652 return innerCore
634653 }
635654 }
@@ -641,7 +660,7 @@ func getCoreModelFromAny(model any) any {
641660// getRootNodeFromAny attempts to extract the root yaml.Node from various OpenAPI types.
642661// This is used for node-to-operation mapping during indexing.
643662func getRootNodeFromAny (model any ) * yaml.Node {
644- if model == nil {
663+ if isNilAny ( model ) {
645664 return nil
646665 }
647666
@@ -661,14 +680,14 @@ func getRootNodeFromAny(model any) *yaml.Node {
661680
662681 if navigable , ok := model .(navigableNoder ); ok {
663682 inner , err := navigable .GetNavigableNode ()
664- if err == nil && inner != nil {
683+ if err == nil && ! isNilAny ( inner ) {
665684 // Recursively try to get root node from the inner value
666685 return getRootNodeFromAny (inner )
667686 }
668687 }
669688
670689 // Try to get core model and extract root node from there
671- if core := getCoreModelFromAny (model ); core != nil {
690+ if core := getCoreModelFromAny (model ); ! isNilAny ( core ) {
672691 if getter , ok := core .(rootNodeGetter ); ok {
673692 return getter .GetRootNode ()
674693 }
0 commit comments