code: func (t *Type) createTypeFromPropItems(name string, apiDef *APIDefinition) {
  	p := t.Properties[name]
  
  	// propMap is this properties as map
  	propMap, ok := p.(map[interface{}]interface{})
  	if !ok {
  		return
  	}
  
  	// only process the array
  	tip, ok := propMap["type"]
  	if !ok || tip != "array" {
  		return
  	}
  
  	// only process if it has 'items' field
  	itemsIf, ok := propMap["items"]
  	if !ok {
  		return
  	}
  
  	// check it's validity
  	items, ok := itemsIf.(map[interface{}]interface{})
  	if !ok {
  		return
  	}
  
  	// to define new type, it needs to have 'properties' field
  	props, ok := items["properties"].(map[interface{}]interface{})
  	if !ok { // doesn't define new type, no problem, we can simply return
  		return
  	}
  	newName := t.Name + name + "Item"
  	created := apiDef.createType(newName, tip, props)
  
  	delete(items, "properties")
  	items["type"] = newName
  	propMap["items"] = items
  
  	t.Properties[name] = propMap
  
  	if created {
  		createdType := apiDef.Types[newName]
  		createdType.postProcess(newName, apiDef)
  	}
  }
docs: // create type from item with inline type definition