type navigationSteps … type navigationStep … func newNavigationSteps(path string) (*navigationSteps, error) { … } func (s *navigationSteps) pop() navigationStep { … } func (s *navigationSteps) moreStepsRemaining() bool { … } // findNameStep takes the list of parts and a set of valid tags that can be used after the name. It then walks the list of parts // until it find a valid "next" tag or until it reaches the end of the parts and then builds the name back up out of the individual parts func findNameStep(parts []string, typeOptions sets.String) string { … } // getPotentialTypeValues takes a type and looks up the tags used to represent its fields when serialized. func getPotentialTypeValues(typeValue reflect.Type) (map[string]reflect.Type, error) { … } func findKnownValue(parts []string, valueOptions sets.String) int { … }