-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Open
Description
my restful post request body like:
type IssueReq struct {
Name string `json:"name" binding:"required"`
DBType model.DBTypeEnum `json:"db_type" binding:"required"`
IssueType code.IssueTypeEnum `json:"issue_type" binding:"required"`
IDCScope code.IDCScopeEnum `json:"idc_scope" binding:"required"`
// IssuePayload is oneOf multiple schemas, docs see has prefix "issue_payload::" in swagger: /api/v1/annotations
IssuePayload IssuePayload `json:"issue_payload" binding:"required"`
}
IssuePayload interface like:
type IssuePayload interface {
IsValid(req *IssueReq) error
UnmarshalJSON(data []byte) error
}
type UnImplementedIssuePayload struct{}
func (u UnImplementedIssuePayload) IsValid(req *IssueReq) error {
//TODO implement me
panic("implement me")
}
func (u UnImplementedIssuePayload) UnmarshalJSON(data []byte) error {
//TODO implement me
panic("implement me")
}
type IssueAccountChange struct {
UnImplementedIssuePayload
IsCreate bool `json:"is_create" binding:"required"` // create or update db account
Username string `json:"username" binding:"required"`
Permissions []code.AccountPermissionEnum `json:"permissions" binding:"required"`
}
func (i *IssueAccountChange) UnmarshalJSON(data []byte) error {
var alias map[string]any
err := json.Unmarshal(data, &alias)
if err != nil {
return err
}
i.Username, _ = alias["username"].(string)
ps, _ := alias["permissions"].([]interface{})
for _, v := range ps {
s, ok := v.(string)
if !ok {
return fmt.Errorf("permissions must be string")
}
i.Permissions = append(i.Permissions, code.AccountPermissionEnum(s))
}
// i.DBName, _ = alias["db_name"].(string)
i.IsCreate, _ = alias["is_create"].(bool)
return nil
}
when i use swag init , this issue_payload can not be parsed in swaggger api documents.
Metadata
Metadata
Assignees
Labels
No labels