code: func (t *Type) parseOptionalProperty(name string) {
  	if !strings.HasSuffix(name, "?") {
  		return
  	}
  	newName := strings.TrimSuffix(name, "?")
  
  	p := t.Properties[name]
  
  	// we will modify both property name
  	// and content, so we delete it
  	delete(t.Properties, name)
  
  	switch p.(type) {
  	case string:
  		// if it is a simple string
  		// convert it to map style property
  		newProp := map[interface{}]interface{}{}
  		newProp["type"] = p
  		newProp["required"] = false
  		t.Properties[newName] = newProp
  
  	case map[interface{}]interface{}:
  		// already in map style property
  		propMap := p.(map[interface{}]interface{})
  		propMap["required"] = false
  		t.Properties[newName] = propMap
  	default:
  		log.Fatalf("unexpeced property type: %v", p)
  	}
  }
docs: // parse property with `?` suffix as optional property