package caps import ( "context" abiv1 "git.dev.alexdunmow.com/block/pluginsdk/abi/v1" "git.dev.alexdunmow.com/block/pluginsdk/menus" "github.com/google/uuid" ) // menusStub implements menus.Menus over menus.* capability calls. type menusStub struct{ base } var _ menus.Menus = (*menusStub)(nil) func (s *menusStub) GetMenuByName(ctx context.Context, name string) (*menus.Menu, error) { resp := &abiv1.MenusGetMenuByNameResponse{} if err := s.invoke(ctx, "get_menu_by_name", &abiv1.MenusGetMenuByNameRequest{Name: name}, resp); err != nil { return nil, err } m := resp.GetMenu() if m == nil { return nil, nil } return &menus.Menu{ID: parseUUID(m.GetId()), Name: m.GetName()}, nil } func (s *menusStub) GetMenuItems(ctx context.Context, menuID uuid.UUID) ([]menus.MenuItem, error) { resp := &abiv1.MenusGetMenuItemsResponse{} req := &abiv1.MenusGetMenuItemsRequest{MenuId: menuID.String()} if err := s.invoke(ctx, "get_menu_items", req, resp); err != nil { return nil, err } items := make([]menus.MenuItem, 0, len(resp.GetItems())) for _, it := range resp.GetItems() { mi := menus.MenuItem{ ID: parseUUID(it.GetId()), MenuID: parseUUID(it.GetMenuId()), Label: it.GetLabel(), URL: it.GetUrl(), PageSlug: it.GetPageSlug(), SortOrder: it.GetSortOrder(), OpenInNewTab: it.GetOpenInNewTab(), CssClass: it.GetCssClass(), ItemType: it.GetItemType(), Icon: it.GetIcon(), } if it.ParentId != nil { pid := parseUUID(it.GetParentId()) mi.ParentID = &pid } items = append(items, mi) } return items, nil }