package aeusadmin import "git.nobla.cn/golang/aeus-admin/models" type ( menuOptions struct { icon string position int public bool hidden bool description string } MenuOption func(o *menuOptions) ) func WithMenuIcon(icon string) MenuOption { return func(o *menuOptions) { o.icon = icon } } func WithMenuPosition(position int) MenuOption { return func(o *menuOptions) { o.position = position } } func WithMenuPublic(public bool) MenuOption { return func(o *menuOptions) { o.public = public } } func WithMenuHidden(hidden bool) MenuOption { return func(o *menuOptions) { o.hidden = hidden } } func WithMenuDescription(description string) MenuOption { return func(o *menuOptions) { o.description = description } } func NewMenu(label string, name string, parent string, uri string, viewPath string, cbs ...MenuOption) *models.Menu { opts := &menuOptions{} for _, cb := range cbs { cb(opts) } model := &models.Menu{} model.Name = name model.Label = label model.Parent = parent model.Uri = uri model.ViewPath = viewPath model.Public = opts.public model.Position = int64(opts.position) model.Icon = opts.icon model.Hidden = opts.hidden model.Description = opts.description return model }