package caps import ( "context" "encoding/json" abiv1 "git.dev.alexdunmow.com/block/pluginsdk/abi/v1" "git.dev.alexdunmow.com/block/pluginsdk/settings" ) // settingsStub implements both settings.Settings and settings.Updater over // settings.* capability calls. One instance backs both CoreServices fields. type settingsStub struct{ base } var ( _ settings.Settings = (*settingsStub)(nil) _ settings.Updater = (*settingsStub)(nil) ) func (s *settingsStub) GetSiteSettings(ctx context.Context) (map[string]any, error) { resp := &abiv1.SettingsGetSiteSettingsResponse{} if err := s.invoke(ctx, "get_site_settings", &abiv1.SettingsGetSiteSettingsRequest{}, resp); err != nil { return nil, err } return unmarshalMap(resp.GetSettingsJson()), nil } func (s *settingsStub) GetPluginSettings(ctx context.Context, pluginName string) (map[string]any, error) { resp := &abiv1.SettingsGetPluginSettingsResponse{} req := &abiv1.SettingsGetPluginSettingsRequest{PluginName: pluginName} if err := s.invoke(ctx, "get_plugin_settings", req, resp); err != nil { return nil, err } return unmarshalMap(resp.GetSettingsJson()), nil } func (s *settingsStub) UpdateSiteSetting(ctx context.Context, key string, value any) error { valueJSON, err := json.Marshal(value) if err != nil { return err } req := &abiv1.SettingsUpdateSiteSettingRequest{Key: key, ValueJson: valueJSON} return s.invoke(ctx, "update_site_setting", req, &abiv1.SettingsUpdateSiteSettingResponse{}) } func (s *settingsStub) UpdatePluginSettings(ctx context.Context, pluginName string, settingsMap map[string]any) error { settingsJSON, err := json.Marshal(settingsMap) if err != nil { return err } req := &abiv1.SettingsUpdatePluginSettingsRequest{PluginName: pluginName, SettingsJson: settingsJSON} return s.invoke(ctx, "update_plugin_settings", req, &abiv1.SettingsUpdatePluginSettingsResponse{}) }