From 402501824a6f1251328479834a2e37832952cca7 Mon Sep 17 00:00:00 2001 From: Oskar Hahn Date: Tue, 8 Aug 2023 19:30:25 +0200 Subject: [PATCH] Change key representation (#738) Also: * Fix flanky test * Add a fast json parser for int and []int --- README.md | 2 +- internal/autoupdate/connection_test.go | 20 +- internal/autoupdate/feature_test.go | 268 - internal/autoupdate/filter_test.go | 4 +- internal/autoupdate/mock_test.go | 2 +- internal/history/restrict.go | 18 +- internal/history/restrict_test.go | 22 +- internal/history/source_datastore.go | 17 +- internal/history/source_datastore_test.go | 2 +- internal/http/http_test.go | 16 +- internal/keysbuilder/fields.go | 96 +- internal/keysbuilder/fields_test.go | 47 +- internal/keysbuilder/fuzz_test.go | 168 - internal/keysbuilder/keysbuilder.go | 14 +- internal/keysbuilder/keysbuilder_test.go | 530 +- internal/projector/datastore/fetch.go | 11 +- internal/projector/projector.go | 4 +- internal/projector/projector_test.go | 32 +- internal/projector/slide/list_of_speakers.go | 19 +- internal/projector/slide/motion.go | 8 +- internal/projector/slide/motion_test.go | 36 +- internal/restrict/collection/collection.go | 15 +- internal/restrict/collection/meeting_test.go | 2 +- .../collection/motion_comment_test.go | 2 - internal/restrict/collection/motion_test.go | 48 +- internal/restrict/collection/topic_test.go | 2 +- internal/restrict/collection/user_test.go | 2 +- internal/restrict/restrict.go | 29 +- internal/restrict/restrict_test.go | 15 +- pkg/datastore/cache/cache_test.go | 38 +- pkg/datastore/dsfetch/fields_generated.go | 4707 ++++++++++++++--- .../dsfetch/gen_fields/field.go.tmpl | 6 +- .../dsfetch/gen_fields/header.go.tmpl | 1 + .../dsfetch/gen_fields/value.go.tmpl | 20 +- pkg/datastore/dskey/collection_field.go | 24 + pkg/datastore/dskey/gen_collection_fields.go | 2545 +++++++++ .../dskey/gen_collection_fields/main.go | 144 + pkg/datastore/dskey/key.go | 92 +- pkg/datastore/dskey/key_test.go | 191 + pkg/datastore/dskey/map_benchmark_test.go | 128 + pkg/datastore/dsmock/yaml_data.go | 39 +- pkg/datastore/flow/combined_test.go | 6 + pkg/datastore/flow/middleware_test.go | 4 +- pkg/datastore/flow/mock_test.go | 14 +- pkg/datastore/flow_postgres.go | 10 +- pkg/datastore/flow_postgres_test.go | 10 +- pkg/datastore/flow_vote_count.go | 11 +- pkg/fastjson/benchmark_test.go | 100 + pkg/fastjson/fastjson.go | 42 + pkg/fastjson/fuzzy_test.go | 77 + .../fuzz/FuzzDecodeInt/285acbaf8430bedf | 2 + .../fuzz/FuzzDecodeInt/af9bedcb9e0a31e8 | 2 + .../fuzz/FuzzDecodeInt/c2501043394e49f2 | 2 + .../fuzz/FuzzDecodeIntList/3f6f7617c226e0ad | 2 + .../fuzz/FuzzDecodeIntList/caf81e9797b19c76 | 2 + pkg/redis/redis_test.go | 6 +- pkg/redis/stream_test.go | 10 +- 57 files changed, 7974 insertions(+), 1712 deletions(-) delete mode 100644 internal/autoupdate/feature_test.go delete mode 100644 internal/keysbuilder/fuzz_test.go create mode 100644 pkg/datastore/dskey/collection_field.go create mode 100644 pkg/datastore/dskey/gen_collection_fields.go create mode 100644 pkg/datastore/dskey/gen_collection_fields/main.go create mode 100644 pkg/datastore/dskey/key_test.go create mode 100644 pkg/datastore/dskey/map_benchmark_test.go create mode 100644 pkg/fastjson/benchmark_test.go create mode 100644 pkg/fastjson/fastjson.go create mode 100644 pkg/fastjson/fuzzy_test.go create mode 100644 pkg/fastjson/testdata/fuzz/FuzzDecodeInt/285acbaf8430bedf create mode 100644 pkg/fastjson/testdata/fuzz/FuzzDecodeInt/af9bedcb9e0a31e8 create mode 100644 pkg/fastjson/testdata/fuzz/FuzzDecodeInt/c2501043394e49f2 create mode 100644 pkg/fastjson/testdata/fuzz/FuzzDecodeIntList/3f6f7617c226e0ad create mode 100644 pkg/fastjson/testdata/fuzz/FuzzDecodeIntList/caf81e9797b19c76 diff --git a/README.md b/README.md index c8129667..584c1fa0 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ A request can have a body and the `k`-query parameter. After the request is send, the values to the keys are returned as a json-object without a newline: ``` -{"user/1/name":"value","user/2/name":"value"} +{"user/1/username":"value","user/2/username":"value"} ``` With the query parameter `single` the server writes the first response and diff --git a/internal/autoupdate/connection_test.go b/internal/autoupdate/connection_test.go index 799aae2a..55788b0b 100644 --- a/internal/autoupdate/connection_test.go +++ b/internal/autoupdate/connection_test.go @@ -14,7 +14,7 @@ import ( "github.com/OpenSlides/openslides-autoupdate-service/pkg/environment" ) -var userNameKey = dskey.MustKey("user/1/name") +var userNameKey = dskey.MustKey("user/1/username") func TestConnect(t *testing.T) { next, _, _ := getConnection() @@ -25,7 +25,7 @@ func TestConnect(t *testing.T) { } if value, ok := data[userNameKey]; !ok || string(value) != `"Hello World"` { - t.Errorf("next() returned %v, expected map[user/1/name:\"Hello World\"", data) + t.Errorf("next() returned %v, expected map[user/1/username:\"Hello World\"", data) } } @@ -75,15 +75,15 @@ func TestConnectionReadNewData(t *testing.T) { func TestConnectionEmptyData(t *testing.T) { var ( - doesNotExistKey = dskey.MustKey("doesnot/1/exist") - doesExistKey = userNameKey + doesNotExistKey = dskey.MustKey("user/2/username") + doesExistKey = dskey.MustKey("user/1/username") ) ctx, cancel := context.WithCancel(context.Background()) defer cancel() ds := dsmock.NewFlow(dsmock.YAMLData(`--- - user/1/name: Hello World + user/1/username: Hello World `)) s, bg, _ := autoupdate.New(environment.ForTests{}, ds, RestrictAllowed) @@ -237,7 +237,7 @@ func TestConntectionFilterOnlyOneKey(t *testing.T) { defer cancel() ds := dsmock.NewFlow(dsmock.YAMLData(`--- - user/1/name: Hello World + user/1/username: Hello World `)) s, bg, _ := autoupdate.New(environment.ForTests{}, ds, RestrictAllowed) @@ -265,7 +265,7 @@ func TestConntectionFilterOnlyOneKey(t *testing.T) { } if _, ok := data[userNameKey]; !ok { - t.Errorf("Returned value does not have key `user/1/name`") + t.Errorf("Returned value does not have key `user/1/username`") } if got := string(data[userNameKey]); got != `"newname"` { @@ -275,7 +275,7 @@ func TestConntectionFilterOnlyOneKey(t *testing.T) { func TestNextNoReturnWhenDataIsRestricted(t *testing.T) { ds := dsmock.NewFlow(dsmock.YAMLData(`--- - user/1/name: Hello World + user/1/username: Hello World `)) s, _, _ := autoupdate.New(environment.ForTests{}, ds, RestrictNotAllowed) @@ -349,7 +349,7 @@ func TestKeyNotRequestedAnymore(t *testing.T) { organization/1/organization_tag_ids: [1,2] organization_tag/1/id: 1 organization_tag/2/id: 2 - user/1/name: Hello World + user/1/username: Hello World `)) s, bg, _ := autoupdate.New(environment.ForTests{}, datastore, RestrictAllowed) @@ -420,7 +420,7 @@ func TestKeyRequestedAgain(t *testing.T) { organization/1/organization_tag_ids: [1,2] organization_tag/1/id: 1 organization_tag/2/id: 2 - user/1/name: Hello World + user/1/username: Hello World `)) s, bg, _ := autoupdate.New(environment.ForTests{}, datastore, RestrictAllowed) diff --git a/internal/autoupdate/feature_test.go b/internal/autoupdate/feature_test.go deleted file mode 100644 index 04fa594e..00000000 --- a/internal/autoupdate/feature_test.go +++ /dev/null @@ -1,268 +0,0 @@ -package autoupdate_test - -import ( - "context" - "encoding/json" - "strings" - "testing" - - "github.com/OpenSlides/openslides-autoupdate-service/internal/autoupdate" - "github.com/OpenSlides/openslides-autoupdate-service/internal/keysbuilder" - "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dsmock" - "github.com/OpenSlides/openslides-autoupdate-service/pkg/environment" -) - -const dataSet = `--- -user/1/id: 1 -a/1: - a: a1 - title: a1 - b_id: 1 - c_ids: [] - ga_ids: [1,2] -a/2: - a: a2 - title: a2 - c_ids: [1,2] - ga_ids: [] -b/1: - b: b1 - title: b1 - a_id: 1 - c_ids: [1] - gb_id: 1 - b_children_ids: [2] - d_ids: [1] -b/2: - b: b2 - title: b2 - c_ids: [1,2] - b_parent_id: 1 - b_children_ids: [] - d_ids: [1,2] -c/1: - c: c1 - title: c1 - a_id: 2 - b_ids: [1,2] - ga_ids: [2,3] -c/2: - c: c2 - title: c2 - a_id: 2 - b_ids: [2] - ga_ids: [2,3] -d/1: - d: d1 -d/2: - d: d2 -ga/1: - ga: ga.1 - content_object_ids: ["a/1"] -ga/2: - ga: ga.2 - content_object_ids: ["a/1","c/1","c/2"] -ga/3: - ga: ga.3 - content_object_ids: ["c/1","c/2"] -gb/1: - gb: gb.1 - content_object_id: b/1 -` - -func TestFeatures(t *testing.T) { - datastore := dsmock.NewFlow(dsmock.YAMLData(dataSet)) - lookup := environment.ForTests{} - service, _, _ := autoupdate.New(lookup, datastore, RestrictAllowed) - - for _, tt := range []struct { - name string - - // request is an example request to the autoupdate service. The - // http-server expects not one request, but a list of requests. - request string - - // result is the data returned for the request. The http-server returns - // the same json encoded data but its format differs. It only returns - // one line without spaces. - result string - }{ - { - "Basic", - `{ - "collection": "a", - "ids": [ - 1, - 2 - ], - "fields": { - "a": null, - "c_ids": { - "type": "relation-list", - "collection": "c", - "fields": { - "c": null, - "ga_ids": { - "type": "relation-list", - "collection": "ga", - "fields": { - "ga": null - } - } - } - }, - "b_id": { - "type": "relation", - "collection": "b", - "fields": {} - }, - "ga_ids": { - "type": "relation-list", - "collection": "ga", - "fields": { - "ga": null - } - } - } - }`, - `{ - "a/1/a": "a1", - "a/1/c_ids": [], - "a/1/b_id": 1, - "a/1/ga_ids": [1,2], - "a/2/a": "a2", - "a/2/c_ids": [1,2], - "a/2/ga_ids": [], - "c/1/c": "c1", - "c/1/ga_ids": [2,3], - "c/2/c": "c2", - "c/2/ga_ids": [2,3], - "ga/1/ga": "ga.1", - "ga/2/ga": "ga.2", - "ga/3/ga": "ga.3" - }`, - }, - { - "Partial merged fields, generic lookup", - `{ - "collection": "gb", - "ids": [1], - "fields": { - "content_object_id": { - "type": "generic-relation", - "fields": { - "b_children_ids": { - "type": "relation-list", - "collection": "b", - "fields": { - "c_ids": { - "type": "relation-list", - "collection": "c", - "fields": { - "c": null - } - }, - "b_parent_id": null - } - }, - "c_ids": { - "type": "relation-list", - "collection": "c", - "fields": { - "c": null, - "title": null - } - }, - "gb_id": null - } - } - } - }`, - `{ - "b/1/b_children_ids": [2], - "b/1/c_ids": [1], - "b/1/gb_id": 1, - "b/2/c_ids": [1,2], - "b/2/b_parent_id": 1, - "gb/1/content_object_id": "b/1", - "c/1/c": "c1", - "c/1/title": "c1", - "c/2/c": "c2" - }`, - }, - { - "non-existent ids, fields, fqids, references, generic relations and fields without a relation", - `{ - "collection": "ga", - "ids": [2,4], - "fields": { - "content_object_ids": { - "type": "generic-relation-list", - "fields": { - "a": null, - "b": null, - "not_existent": { - "type": "generic-relation", - "fields": {"key": null} - }, - "title": null, - "ga_ids": null, - "a_id": null - } - } - } - }`, - `{ - "ga/2/content_object_ids": ["a/1","c/1","c/2"], - "a/1/a": "a1", - "a/1/title": "a1", - "a/1/ga_ids": [1,2], - "c/1/title": "c1", - "c/1/a_id": 2, - "c/1/ga_ids": [2,3], - "c/2/title": "c2", - "c/2/a_id": 2, - "c/2/ga_ids": [2,3] - }`, - }, - } { - t.Run(tt.name, func(t *testing.T) { - builder, err := keysbuilder.FromJSON(strings.NewReader(tt.request)) - if err != nil { - t.Fatalf("FromJSON() returned an unexpected error: %v", err) - } - - conn, err := service.Connect(context.Background(), 1, builder) - if err != nil { - t.Fatalf("creating conection: %v", err) - } - next, _ := conn() - - data, err := next(context.Background()) - if err != nil { - t.Fatalf("Can not get data: %v", err) - } - - converted := make(map[string]json.RawMessage, len(data)) - for k, v := range data { - converted[k.String()] = v - } - - var expect map[string]json.RawMessage - if err := json.Unmarshal([]byte(tt.result), &expect); err != nil { - t.Fatalf("Can not decode keys from expected data: %v", err) - } - - cmpMap(t, converted, expect) - }) - } -} - -func cmpMap(t *testing.T, got, expect map[string]json.RawMessage) { - t.Helper() - v1, _ := json.Marshal(got) - v2, _ := json.Marshal(expect) - if string(v1) != string(v2) { - t.Errorf("got %s, expected %s", string(v1), string(v2)) - } -} diff --git a/internal/autoupdate/filter_test.go b/internal/autoupdate/filter_test.go index 1ec6441b..cf324189 100644 --- a/internal/autoupdate/filter_test.go +++ b/internal/autoupdate/filter_test.go @@ -8,8 +8,8 @@ import ( ) var ( - myKey1 = dskey.MustKey("collection/1/field") - myKey2 = dskey.MustKey("collection/2/field") + myKey1 = dskey.MustKey("user/1/username") + myKey2 = dskey.MustKey("user/2/username") ) func TestFilterFirstCall(t *testing.T) { diff --git a/internal/autoupdate/mock_test.go b/internal/autoupdate/mock_test.go index 205ce551..8c35c813 100644 --- a/internal/autoupdate/mock_test.go +++ b/internal/autoupdate/mock_test.go @@ -15,7 +15,7 @@ import ( func getConnection() (func(context.Context) (map[dskey.Key][]byte, error), *dsmock.Flow, func(context.Context, func(error))) { datastore := dsmock.NewFlow(dsmock.YAMLData(`--- - user/1/name: Hello World + user/1/username: Hello World `)) lookup := environment.ForTests{} diff --git a/internal/history/restrict.go b/internal/history/restrict.go index 59f05276..c6996f1d 100644 --- a/internal/history/restrict.go +++ b/internal/history/restrict.go @@ -88,12 +88,12 @@ func (h restricter) canSeeKey( adminInMeeting map[int]struct{}, key dskey.Key, ) (bool, error) { - if key.Collection == "user" && key.Field == "password" { + if key.Collection() == "user" && key.Field() == "password" { return false, nil } - if key.Collection == "personal_note" { - personalNoteMeetingUserID := oldDS.PersonalNote_MeetingUserID(key.ID).ErrorLater(ctx) + if key.Collection() == "personal_note" { + personalNoteMeetingUserID := oldDS.PersonalNote_MeetingUserID(key.ID()).ErrorLater(ctx) personalNoteUserID, err := oldDS.MeetingUser_UserID(personalNoteMeetingUserID).Value(ctx) if err != nil { return false, fmt.Errorf("getting personal note user: %w", err) @@ -106,15 +106,15 @@ func (h restricter) canSeeKey( return true, nil } - if key.Collection == "theme" || key.Collection == "organization" || key.Collection == "organization_tag" || key.Collection == "mediafile" { + if key.Collection() == "theme" || key.Collection() == "organization" || key.Collection() == "organization_tag" || key.Collection() == "mediafile" { return true, nil } - if key.Collection == "committee" { + if key.Collection() == "committee" { return false, nil } - meetingID, hasMeeting, err := collection.Collection(ctx, key.Collection).MeetingID(ctx, oldDS, key.ID) + meetingID, hasMeeting, err := collection.Collection(ctx, key.Collection()).MeetingID(ctx, oldDS, key.ID()) if err != nil { return false, fmt.Errorf("getting meeting id: %w", err) } @@ -124,10 +124,10 @@ func (h restricter) canSeeKey( return isAdmin, nil } - if key.Collection == "user" { - meetingUserIDs, err := oldDS.User_MeetingUserIDs(key.ID).Value(ctx) + if key.Collection() == "user" { + meetingUserIDs, err := oldDS.User_MeetingUserIDs(key.ID()).Value(ctx) if err != nil { - return false, fmt.Errorf("getting meeting user ids from user %d in old version: %w", key.ID, err) + return false, fmt.Errorf("getting meeting user ids from user %d in old version: %w", key.ID(), err) } for _, muID := range meetingUserIDs { diff --git a/internal/history/restrict_test.go b/internal/history/restrict_test.go index a7eb0ae2..a802b67b 100644 --- a/internal/history/restrict_test.go +++ b/internal/history/restrict_test.go @@ -23,7 +23,7 @@ func TestHistoryGetter(t *testing.T) { `--- user/1/id: 1`, ``, - "user/1/name", + "user/1/username", false, }, { @@ -31,7 +31,7 @@ func TestHistoryGetter(t *testing.T) { `--- user/1/organization_management_level: can_manage_organization`, ``, - "user/1/name", + "user/1/username", true, }, { @@ -39,7 +39,7 @@ func TestHistoryGetter(t *testing.T) { `--- user/1/organization_management_level: can_manage_users`, ``, - "user/1/name", + "user/1/username", false, }, { @@ -180,22 +180,6 @@ func TestHistoryGetter(t *testing.T) { "user/50/username", true, }, - { - "unknown collection", - `--- - user/1: - meeting_user_ids: [10] - meeting_ids: [2] - meeting_user/10: - group_ids: [3] - meeting_id: 2 - group/3/permissions: ["meeting.can_see_history"] - meeting/2/admin_group_id: 3 - `, - ``, - "unknown/50/name", - false, - }, } { t.Run(tt.name, func(t *testing.T) { currentDS := dsmock.Stub(dsmock.YAMLData(tt.current)) diff --git a/internal/history/source_datastore.go b/internal/history/source_datastore.go index 477d3010..ac1022f4 100644 --- a/internal/history/source_datastore.go +++ b/internal/history/source_datastore.go @@ -91,19 +91,19 @@ func (s *sourceDatastore) GetPosition(ctx context.Context, position int, keys .. // Sort keys to help datastore sort.Slice(keys, func(i, j int) bool { - if keys[i].Collection < keys[j].Collection { + if keys[i].Collection() < keys[j].Collection() { return true - } else if keys[i].Collection < keys[j].Collection { + } else if keys[i].Collection() > keys[j].Collection() { return false } - if keys[i].ID < keys[j].ID { + if keys[i].ID() < keys[j].ID() { return true - } else if keys[i].ID < keys[j].ID { + } else if keys[i].ID() > keys[j].ID() { return false } - return keys[i].Field < keys[j].Field + return keys[i].Field() < keys[j].Field() }) eg, ctx := errgroup.WithContext(ctx) @@ -261,7 +261,12 @@ func parseGetManyResponse(r io.Reader) (map[dskey.Key][]byte, error) { return nil, fmt.Errorf("invalid key. Id is no number: %s", idstr) } for field, value := range fieldValue { - keyValue[dskey.Key{Collection: collection, ID: id, Field: field}] = value + key, err := dskey.FromParts(collection, id, field) + if err != nil { + return nil, fmt.Errorf("invalid key: %w", err) + } + + keyValue[key] = value } } } diff --git a/internal/history/source_datastore_test.go b/internal/history/source_datastore_test.go index 7f5d8d98..db98a927 100644 --- a/internal/history/source_datastore_test.go +++ b/internal/history/source_datastore_test.go @@ -64,7 +64,7 @@ func TestSourceDefaultRequestCount(t *testing.T) { keys := make([]dskey.Key, tt.keyCount) for i := 0; i < len(keys); i++ { - keys[i] = dskey.Key{Collection: "coll", ID: i + 1, Field: "field"} + keys[i], _ = dskey.FromParts("user", i+1, "username") } got, err := sd.GetPosition(context.Background(), 0, keys...) diff --git a/internal/http/http_test.go b/internal/http/http_test.go index b7e859ad..33d749ba 100644 --- a/internal/http/http_test.go +++ b/internal/http/http_test.go @@ -16,8 +16,8 @@ import ( ) var ( - myKey1 = dskey.Key{Collection: "collection", ID: 1, Field: "field"} - myKey2 = dskey.Key{Collection: "collection", ID: 2, Field: "field"} + myKey1, _ = dskey.FromParts("user", 1, "username") + myKey2, _ = dskey.FromParts("user", 2, "username") ) type connecterMock struct { @@ -52,7 +52,7 @@ func TestKeysHandler(t *testing.T) { ahttp.HandleAutoupdate(mux, fakeAuth(1), connecter, nil, nil) - req := httptest.NewRequest("GET", "/system/autoupdate?k=user/1/name,user/2/name", nil).WithContext(ctx) + req := httptest.NewRequest("GET", "/system/autoupdate?k=user/1/username,user/2/username", nil).WithContext(ctx) rec := httptest.NewRecorder() mux.ServeHTTP(rec, req) @@ -62,7 +62,7 @@ func TestKeysHandler(t *testing.T) { t.Errorf("Got status %q, expected %q", res.Status, http.StatusText(200)) } - expect := `{"collection/1/field":"bar"}` + "\n" + expect := `{"user/1/username":"bar"}` + "\n" got, _ := io.ReadAll(res.Body) if string(got) != expect { t.Errorf("Got content `%s`, expected `%s`", got, expect) @@ -91,7 +91,7 @@ func TestComplexHandler(t *testing.T) { req := httptest.NewRequest( "GET", "/system/autoupdate", - strings.NewReader(`[{"ids":[1],"collection":"user","fields":{"name":null}}]`), + strings.NewReader(`[{"ids":[1],"collection":"user","fields":{"username":null}}]`), ).WithContext(ctx) rec := httptest.NewRecorder() mux.ServeHTTP(rec, req) @@ -102,7 +102,7 @@ func TestComplexHandler(t *testing.T) { t.Errorf("Got status %s, expected %s", res.Status, http.StatusText(200)) } - expect := `{"collection/1/field":"bar"}` + "\n" + expect := `{"user/1/username":"bar"}` + "\n" got, _ := io.ReadAll(res.Body) if string(got) != expect { t.Errorf("Got %s, expected %s", got, expect) @@ -188,7 +188,7 @@ func TestErrors(t *testing.T) { httptest.NewRequest( "GET", "/system/autoupdate", - strings.NewReader(`{"ids":[1],"collection":"foo","fields":{}}`), + strings.NewReader(`{"ids":[1],"collection":"user","fields":{}}`), ), 400, `SyntaxError`, @@ -199,7 +199,7 @@ func TestErrors(t *testing.T) { httptest.NewRequest( "GET", "/system/autoupdate", - strings.NewReader(`[{"ids":["1"],"collection":"foo","fields":{}}]`), + strings.NewReader(`[{"ids":["1"],"collection":"user","fields":{}}]`), ), 400, `SyntaxError`, diff --git a/internal/keysbuilder/fields.go b/internal/keysbuilder/fields.go index 4982b238..55a414bd 100644 --- a/internal/keysbuilder/fields.go +++ b/internal/keysbuilder/fields.go @@ -22,11 +22,11 @@ package keysbuilder import ( "encoding/json" "fmt" - "regexp" "strconv" "strings" "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dskey" + "github.com/OpenSlides/openslides-autoupdate-service/pkg/fastjson" ) const ( @@ -36,11 +36,6 @@ const ( ftGenericRelationList = "generic-relation-list" ) -var ( - reCollection = regexp.MustCompile(`^([a-z]+|[a-z][a-z_]*[a-z])$`) - reField = regexp.MustCompile(`^[a-z][a-z0-9_]*$`) -) - // keyDescription combines a key and a fieldDescription. // // This is used, when a list of key-description combinations are needed. @@ -81,6 +76,7 @@ func (b *body) UnmarshalJSON(data []byte) error { if len(field.IDs) == 0 { return InvalidError{msg: "no ids"} } + for _, id := range field.IDs { if id <= 0 { return InvalidError{msg: "id has to be a positive number"} @@ -90,11 +86,18 @@ func (b *body) UnmarshalJSON(data []byte) error { if field.Collection == "" { return InvalidError{msg: "attribute collection is missing"} } + if field.Fields.fields == nil { return InvalidError{msg: "attribte fields is missing"} } - if !reCollection.MatchString(field.Collection) { - return InvalidError{msg: "invalid collection name"} + + for fieldName := range field.Fields.fields { + if !dskey.ValidateCollectionField(field.Collection, fieldName) { + return InvalidError{ + msg: fmt.Sprintf("%s/%s does not exist", field.Collection, fieldName), + field: fieldName, + } + } } // Set the body fields. @@ -108,11 +111,15 @@ func (b *body) UnmarshalJSON(data []byte) error { // // It is simular to the fieldDescription interface. But it requires other // arguments. -func (b *body) appendKeys(data []keyDescription) []keyDescription { +func (b *body) appendKeys(data []keyDescription) ([]keyDescription, error) { + var err error for _, id := range b.ids { - data = b.fieldsMap.appendKeys(b.collection, id, data) + data, err = b.fieldsMap.appendKeys(b.collection, id, data) + if err != nil { + return nil, err + } } - return data + return data, nil } // relationField is a fieldtype that redirects to one other collection. @@ -141,28 +148,41 @@ func (r *relationField) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &field); err != nil { return err } + if field.Collection == "" { return InvalidError{msg: "no collection"} } + if field.Fields.fields == nil { return InvalidError{msg: "no fields"} } - if !reCollection.MatchString(field.Collection) { - return InvalidError{msg: "invalid collection name"} + + for fieldName := range field.Fields.fields { + if !dskey.ValidateCollectionField(field.Collection, fieldName) { + return InvalidError{ + msg: fmt.Sprintf("%s/%s does not exist", field.Collection, fieldName), + field: fieldName, + } + } } + r.collection = field.Collection r.fieldsMap = field.Fields return nil } func (r *relationField) appendKeys(key dskey.Key, value json.RawMessage, data []keyDescription) ([]keyDescription, error) { - var id int - if err := json.Unmarshal(value, &id); err != nil { + id, err := fastjson.DecodeInt(value) + if err != nil { return nil, fmt.Errorf("decoding value for key %s: %w", key, err) } - data = r.fieldsMap.appendKeys(r.collection, id, data) - return data, nil + if id <= 0 { + // TODO: This should be return an error on required fields + return data, nil + } + + return r.fieldsMap.appendKeys(r.collection, id, data) } // relationListField is a fieldtype like relation, but redirects to a list of objects. @@ -183,14 +203,17 @@ type relationListField struct { } func (r *relationListField) appendKeys(key dskey.Key, value json.RawMessage, data []keyDescription) ([]keyDescription, error) { - var ids []int - if err := json.Unmarshal(value, &ids); err != nil { + ids, err := fastjson.DecodeIntList(value) + if err != nil { return nil, fmt.Errorf("decoding value for key %s: %w", key, err) } for _, id := range ids { for field, description := range r.fields { - key := dskey.Key{Collection: r.collection, ID: id, Field: field} + key, err := dskey.FromParts(r.collection, id, field) + if err != nil { + return nil, fmt.Errorf("invalid key: %w", err) + } data = append(data, keyDescription{key: key, description: description}) } } @@ -243,8 +266,13 @@ func (g *genericRelationField) appendKeys(key dskey.Key, value json.RawMessage, return nil, fmt.Errorf("invalid collection id: %s", fqID) } - data = g.fieldsMap.appendKeys(collection, id, data) - return data, nil + for fieldName := range g.fieldsMap.fields { + if !dskey.ValidateCollectionField(collection, fieldName) { + delete(g.fieldsMap.fields, fieldName) + } + } + + return g.fieldsMap.appendKeys(collection, id, data) } // genericRelationListField is like a genericRelationField but with a list of relations. @@ -280,7 +308,16 @@ func (g *genericRelationListField) appendKeys(key dskey.Key, value json.RawMessa return nil, fmt.Errorf("invalid collection id: %s", fqID) } - data = g.fieldsMap.appendKeys(collection, id, data) + for fieldName := range g.fieldsMap.fields { + if !dskey.ValidateCollectionField(collection, fieldName) { + delete(g.fieldsMap.fields, fieldName) + } + } + + data, err = g.fieldsMap.appendKeys(collection, id, data) + if err != nil { + return nil, err + } } return data, nil } @@ -344,10 +381,6 @@ func (f *fieldsMap) UnmarshalJSON(data []byte) error { f.fields = make(map[string]fieldDescription, len(fm)) for name, field := range fm { - if !reField.MatchString(name) { - return InvalidError{msg: fmt.Sprintf("fieldname %q is not a valid fieldname", name), field: name} - } - fd, err := unmarshalField(field) if err != nil { if sub, ok := err.(InvalidError); ok { @@ -363,10 +396,13 @@ func (f *fieldsMap) UnmarshalJSON(data []byte) error { // appendKeys appends its fields to data. // // It is like the fieldDescription interface. But it requires other arguments. -func (f *fieldsMap) appendKeys(collection string, id int, data []keyDescription) []keyDescription { +func (f *fieldsMap) appendKeys(collection string, id int, data []keyDescription) ([]keyDescription, error) { for field, description := range f.fields { - key := dskey.Key{Collection: collection, ID: id, Field: field} + key, err := dskey.FromParts(collection, id, field) + if err != nil { + return nil, err + } data = append(data, keyDescription{key: key, description: description}) } - return data + return data, nil } diff --git a/internal/keysbuilder/fields_test.go b/internal/keysbuilder/fields_test.go index 71d448cb..248d8578 100644 --- a/internal/keysbuilder/fields_test.go +++ b/internal/keysbuilder/fields_test.go @@ -14,10 +14,10 @@ func TestJSONValid(t *testing.T) { "ids": [5], "collection": "user", "fields": { - "motion_ids": { + "meeting_user_ids": { "type": "relation-list", - "collection": "motion", - "fields": {"name": null} + "collection": "meeting_user", + "fields": {"comment": null} } } } @@ -81,13 +81,13 @@ func TestJSONSuffixNoFields(t *testing.T) { "ids": [5], "collection": "user", "fields": { - "group_ids": null, - "note_id": null + "meeting_user_ids": null, + "username": null } } `) - _, err := keysbuilder.FromJSON(json) - if err != nil { + + if _, err := keysbuilder.FromJSON(json); err != nil { t.Errorf("Expected no error, got: %v", err) } } @@ -238,8 +238,8 @@ func TestRequestErrors(t *testing.T) { "fields": {"username": null} } `, - "invalid collection name", - nil, + "field \"username\": User/username does not exist", + []string{"username"}, }, { "field with upper letter", @@ -249,7 +249,7 @@ func TestRequestErrors(t *testing.T) { "fields": {"Username": null} } `, - "field \"Username\": fieldname \"Username\" is not a valid fieldname", + "field \"Username\": user/Username does not exist", []string{"Username"}, }, { @@ -266,8 +266,8 @@ func TestRequestErrors(t *testing.T) { } } `, - "field \"group_id\": invalid collection name", - []string{"group_id"}, + "field \"group_id.name\": Group/name does not exist", + []string{"group_id", "name"}, }, { "collection in relation-list-field has upper letter", @@ -283,24 +283,27 @@ func TestRequestErrors(t *testing.T) { } } `, - "field \"group_ids\": invalid collection name", - []string{"group_ids"}, + "field \"group_ids.name\": Group/name does not exist", + []string{"group_ids", "name"}, }, } { t.Run(tt.name, func(t *testing.T) { _, err := keysbuilder.FromJSON(strings.NewReader(tt.input)) if err == nil { - t.Errorf("Expected an error, got none") + t.Errorf("Got no error none") } + var kErr keysbuilder.InvalidError if !errors.As(err, &kErr) { - t.Errorf("Expected err to be %T, got: %v", kErr, err) + t.Errorf("Got error %v. Expected err to be %T", err, kErr) } + if got := kErr.Error(); got != tt.msg { - t.Errorf("Expected error message %q, got: %q", tt.msg, got) + t.Errorf("Got error message:\n%s\n\nExpected:\n%s", got, tt.msg) } + if fields := kErr.Fields(); !cmpSlice(fields, tt.fields) { - t.Errorf("Expected error to be on field \"%v\", got %v", tt.fields, fields) + t.Errorf("Got error on field %v. Expected on field `%v`", fields, tt.fields) } }) } @@ -312,11 +315,11 @@ func TestManyFromJSON(t *testing.T) { "ids": [5], "collection": "user", "fields": { - "group_ids": { + "meeting_user_ids": { "type": "relation-list", - "collection": "group", + "collection": "meeting_user", "fields": { - "name": null + "comment": null } } } @@ -325,7 +328,7 @@ func TestManyFromJSON(t *testing.T) { "ids": [5], "collection": "user", "fields": { - "name": null + "username": null } }]`) diff --git a/internal/keysbuilder/fuzz_test.go b/internal/keysbuilder/fuzz_test.go deleted file mode 100644 index 41f1869d..00000000 --- a/internal/keysbuilder/fuzz_test.go +++ /dev/null @@ -1,168 +0,0 @@ -package keysbuilder_test - -import ( - "context" - "encoding/json" - "errors" - "strings" - "testing" - - "github.com/OpenSlides/openslides-autoupdate-service/internal/keysbuilder" - "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dskey" - "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dsmock" -) - -func FuzzFromJSON(f *testing.F) { - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": {"name": null} - }`) - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": { - "first": null, - "last": null - } - }`) - f.Add(`{ - "ids": [1, 2], - "collection": "user", - "fields": { - "first": null, - "last": null - } - }`) - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": { - "note_id": { - "type": "relation", - "collection": "note", - "fields": {"important": null} - } - } - }`) - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": { - "group_ids": { - "type": "relation-list", - "collection": "group", - "fields": {"admin": null} - } - } - }`) - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": { - "note_id": { - "type": "relation", - "collection": "note", - "fields": { - "motion_id": { - "type": "relation", - "collection": "motion", - "fields": {"name": null} - } - } - } - } - }`) - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": { - "group_ids": { - "type": "relation-list", - "collection": "group", - "fields": { - "perm_ids": { - "type": "relation-list", - "collection": "perm", - "fields": {"name": null} - } - } - } - } - }`) - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": { - "like": { - "type": "generic-relation", - "fields": {"name": null} - } - } - }`) - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": { - "like": { - "type": "generic-relation", - "fields": { - "tag_ids": { - "type": "relation-list", - "collection": "tag", - "fields": {"name": null} - } - } - } - } - }`) - f.Add(`{ - "ids": [1], - "collection": "user", - "fields": { - "likes": { - "type": "generic-relation-list", - "fields": {"name": null} - } - } - }`) - - ds := dsmock.Stub(map[dskey.Key][]byte{ - dskey.MustKey("user/1/note_id"): []byte(`1`), - dskey.MustKey("user/1/group_ids"): []byte(`[1,2]`), - dskey.MustKey("note/1/motion_id"): []byte(`1`), - dskey.MustKey("group/1/perm_ids"): []byte(`[1,2]`), - dskey.MustKey("group/2/perm_ids"): []byte(`[1,2]`), - dskey.MustKey("user/1/like"): []byte(`"topic/1"`), - dskey.MustKey("user/1/likes"): []byte(`["topic/1","agenda/1"]`), - dskey.MustKey("topic/1/tag_ids"): []byte(`[1,2]`), - dskey.MustKey("agenda/1/tag_ids"): []byte(`[1,2]`), - }) - - f.Fuzz(func(t *testing.T, query string) { - if !json.Valid([]byte(query)) { - t.Skip("invalid JSON") - } - - kb, err := keysbuilder.FromJSON(strings.NewReader(query)) - if err != nil { - var typedErr interface { - Type() string - } - if errors.As(err, &typedErr) { - t.Skip() - } - t.Fatalf("building keysbuilder:\n%s\n%v", query, err) - } - - if _, err := kb.Update(context.Background(), ds); err != nil { - var typedErr interface { - Type() string - } - if errors.As(err, &typedErr) { - t.Skip() - } - t.Fatalf("Updating keybuilder: %v", err) - } - }) -} diff --git a/internal/keysbuilder/keysbuilder.go b/internal/keysbuilder/keysbuilder.go index ce6fdd69..f7595d31 100644 --- a/internal/keysbuilder/keysbuilder.go +++ b/internal/keysbuilder/keysbuilder.go @@ -43,11 +43,11 @@ func FromKeys(rawKeys ...string) (*Builder, error) { for _, key := range keys { body := body{ - ids: []int{key.ID}, - collection: key.Collection, + ids: []int{key.ID()}, + collection: key.Collection(), fieldsMap: fieldsMap{ fields: map[string]fieldDescription{ - key.Field: nil, + key.Field(): nil, }, }, } @@ -87,9 +87,13 @@ func (b *Builder) Update(ctx context.Context, getter flow.Getter) ([]dskey.Key, } // Start with all keys from all the bodies. + var err error queue := make([]keyDescription, 0, bodyFieldLen(b.bodies)) for _, body := range b.bodies { - queue = body.appendKeys(queue) + queue, err = body.appendKeys(queue) + if err != nil { + return nil, fmt.Errorf("building keys from bodys: %w", err) + } } var keys []dskey.Key @@ -136,7 +140,7 @@ func (b *Builder) Update(ctx context.Context, getter flow.Getter) ([]dskey.Key, // value has wrong type. return nil, ValueError{key: kd.key, gotType: invalidErr.Value, expectType: invalidErr.Type, err: err} } - return nil, err + return nil, fmt.Errorf("appending keys for key %s: %w", kd.key, err) } } diff --git a/internal/keysbuilder/keysbuilder_test.go b/internal/keysbuilder/keysbuilder_test.go index 84401218..8dc5941a 100644 --- a/internal/keysbuilder/keysbuilder_test.go +++ b/internal/keysbuilder/keysbuilder_test.go @@ -2,7 +2,9 @@ package keysbuilder_test import ( "context" + "errors" "fmt" + "reflect" "strings" "testing" @@ -23,10 +25,10 @@ func TestKeys(t *testing.T) { `{ "ids": [1], "collection": "user", - "fields": {"name": null} + "fields": {"username": null} }`, "", - mustKeys("user/1/name"), + mustKeys("user/1/username"), }, { "Many Fields", @@ -34,12 +36,12 @@ func TestKeys(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "first": null, - "last": null + "first_name": null, + "last_name": null } }`, "", - mustKeys("user/1/first", "user/1/last"), + mustKeys("user/1/first_name", "user/1/last_name"), }, { "Many IDs Many Fields", @@ -47,12 +49,12 @@ func TestKeys(t *testing.T) { "ids": [1, 2], "collection": "user", "fields": { - "first": null, - "last": null + "first_name": null, + "last_name": null } }`, "", - mustKeys("user/1/first", "user/1/last", "user/2/first", "user/2/last"), + mustKeys("user/1/first_name", "user/1/last_name", "user/2/first_name", "user/2/last_name"), }, { "Redirect Once id", @@ -60,15 +62,15 @@ func TestKeys(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"name": null} } } }`, - "user/1/note_id: 1", - mustKeys("user/1/note_id", "note/1/important"), + "user/1/organization_id: 1", + mustKeys("user/1/organization_id", "organization/1/name"), }, { "Redirect Once ids", @@ -76,15 +78,15 @@ func TestKeys(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "group_ids": { + "meeting_user_ids": { "type": "relation-list", - "collection": "group", - "fields": {"admin": null} + "collection": "meeting_user", + "fields": {"comment": null} } } }`, - "user/1/group_ids: [1,2]", - mustKeys("user/1/group_ids", "group/1/admin", "group/2/admin"), + "user/1/meeting_user_ids: [1,2]", + mustKeys("user/1/meeting_user_ids", "meeting_user/1/comment", "meeting_user/2/comment"), }, { "Redirect twice id", @@ -92,13 +94,13 @@ func TestKeys(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", + "collection": "organization", "fields": { - "motion_id": { + "theme_id": { "type": "relation", - "collection": "motion", + "collection": "theme", "fields": {"name": null} } } @@ -106,10 +108,10 @@ func TestKeys(t *testing.T) { } }`, `--- - user/1/note_id: 1 - note/1/motion_id: 1 + user/1/organization_id: 1 + organization/1/theme_id: 1 `, - mustKeys("user/1/note_id", "note/1/motion_id", "motion/1/name"), + mustKeys("user/1/organization_id", "organization/1/theme_id", "theme/1/name"), }, { "Redirect twice ids", @@ -117,13 +119,13 @@ func TestKeys(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "group_ids": { + "meeting_user_ids": { "type": "relation-list", - "collection": "group", + "collection": "meeting_user", "fields": { - "perm_ids": { + "group_ids": { "type": "relation-list", - "collection": "perm", + "collection": "group", "fields": {"name": null} } } @@ -131,107 +133,75 @@ func TestKeys(t *testing.T) { } }`, `--- - user/1/group_ids: [1,2] - group/1/perm_ids: [1,2] - group/2/perm_ids: [1,2] + user/1/meeting_user_ids: [1,2] + meeting_user/1/group_ids: [1,2] + meeting_user/2/group_ids: [1,2] `, - mustKeys("user/1/group_ids", "group/1/perm_ids", "group/2/perm_ids", "perm/1/name", "perm/2/name"), + mustKeys("user/1/meeting_user_ids", "meeting_user/1/group_ids", "meeting_user/2/group_ids", "group/1/name", "group/2/name"), }, { "Request _id without redirect", `{ "ids": [1], "collection": "user", - "fields": {"note_id": null} + "fields": {"organization_id": null} }`, "", - mustKeys("user/1/note_id"), - }, - { - "Redirect id not exist", - `{ - "ids": [1], - "collection": "not_exist", - "fields": { - "note_id": { - "type": "relation", - "collection": "note", - "fields": {"important": null} - } - } - }`, - "", - mustKeys("not_exist/1/note_id"), - }, - { - "Redirect ids not exist", - `{ - "ids": [1], - "collection": "not_exist", - "fields": { - "group_ids": { - "type": "relation-list", - "collection": "group", - "fields": {"name": null} - } - } - }`, - "", - mustKeys("not_exist/1/group_ids"), + mustKeys("user/1/organization_id"), }, { "Generic field", `{ "ids": [1], - "collection": "user", + "collection": "personal_note", "fields": { - "likes": { + "content_object_id": { "type": "generic-relation", - "fields": {"name": null} + "fields": {"title": null} } } }`, - "user/1/likes: other/1", - mustKeys("user/1/likes", "other/1/name"), + "personal_note/1/content_object_id: motion/1", + mustKeys("personal_note/1/content_object_id", "motion/1/title"), }, { "Generic field with sub fields", `{ "ids": [1], - "collection": "user", + "collection": "personal_note", "fields": { - "likes": { + "content_object_id": { "type": "generic-relation", "fields": { - "tag_ids": { + "amendment_ids": { "type": "relation-list", - "collection": "tag", - "fields": {"name": null} + "collection": "motion", + "fields": {"title": null} } } } } }`, `--- - user/1/likes: other/1 - other/1/tag_ids: [1,2] + personal_note/1/content_object_id: motion/1 + motion/1/amendment_ids: [1,2] `, - mustKeys("user/1/likes", "other/1/tag_ids", "tag/1/name", "tag/2/name"), + mustKeys("personal_note/1/content_object_id", "motion/1/amendment_ids", "motion/1/title", "motion/2/title"), }, { "Generic list field", `{ "ids": [1], - "collection": "user", + "collection": "organization_tag", "fields": { - "likes": { + "tagged_ids": { "type": "generic-relation-list", "fields": {"name": null} } } }`, - `user/1/likes: ["other/1","other/2"]`, - mustKeys("user/1/likes", "other/1/name", "other/2/name"), + `organization_tag/1/tagged_ids: ["meeting/1","meeting/2"]`, + mustKeys("organization_tag/1/tagged_ids", "meeting/1/name", "meeting/2/name"), }, } { t.Run(tt.name, func(t *testing.T) { @@ -268,16 +238,16 @@ func TestUpdate(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"login_text": null} } } }`, - "user/1/note_id: 1", - "user/1/note_id: 2", - mustKeys("user/1/note_id", "note/2/important"), + "user/1/organization_id: 1", + "user/1/organization_id: 2", + mustKeys("user/1/organization_id", "organization/2/login_text"), 1, }, { @@ -286,16 +256,16 @@ func TestUpdate(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"login_text": null} } } }`, - "user/1/note_id: 1", - "user/1/note_id: 1", - mustKeys("user/1/note_id", "note/1/important"), + "user/1/organization_id: 1", + "user/1/organization_id: 1", + mustKeys("user/1/organization_id", "organization/1/login_text"), 0, }, { @@ -304,22 +274,22 @@ func TestUpdate(t *testing.T) { "ids": [1, 2], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"login_text": null} } } }`, `--- - user/1/note_id: 1 - user/2/note_id: 1 + user/1/organization_id: 1 + user/2/organization_id: 1 `, `--- - user/1/note_id: 2 - user/2/note_id: 1 + user/1/organization_id: 2 + user/2/organization_id: 1 `, - mustKeys("user/1/note_id", "user/2/note_id", "note/1/important", "note/2/important"), + mustKeys("user/1/organization_id", "user/2/organization_id", "organization/1/login_text", "organization/2/login_text"), 1, }, { @@ -328,29 +298,29 @@ func TestUpdate(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"login_text": null} }, - "group_ids": { + "meeting_user_ids": { "type": "relation-list", - "collection": "group", - "fields": {"admin": null} + "collection": "meeting_user", + "fields": {"comment": null} } } }`, `--- - user/1/note_id: 1 - user/1/group_ids: [1,2] - user/2/group_ids: [1,2] + user/1/organization_id: 1 + user/1/meeting_user_ids: [1,2] + user/2/meeting_user_ids: [1,2] `, `--- - user/1/note_id: 2 - user/1/group_ids: [1,2] - user/2/group_ids: [1,2] + user/1/organization_id: 2 + user/1/meeting_user_ids: [1,2] + user/2/meeting_user_ids: [1,2] `, - mustKeys("user/1/note_id", "user/1/group_ids", "note/2/important", "group/1/admin", "group/2/admin"), + mustKeys("user/1/organization_id", "user/1/meeting_user_ids", "organization/2/login_text", "meeting_user/1/comment", "meeting_user/2/comment"), 1, }, { @@ -359,27 +329,27 @@ func TestUpdate(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"login_text": null} }, - "group_ids": { + "meeting_user_ids": { "type": "relation-list", - "collection": "group", - "fields": {"admin": null} + "collection": "meeting_user", + "fields": {"comment": null} } } }`, `--- - user/1/note_id: 1 - user/1/group_ids: [1,2] + user/1/organization_id: 1 + user/1/meeting_user_ids: [1,2] `, `--- - user/1/note_id: 2 - user/1/group_ids: [2] + user/1/organization_id: 2 + user/1/meeting_user_ids: [2] `, - mustKeys("user/1/note_id", "note/2/important", "user/1/group_ids", "group/2/admin"), + mustKeys("user/1/organization_id", "organization/2/login_text", "user/1/meeting_user_ids", "meeting_user/2/comment"), 2, }, { @@ -388,30 +358,30 @@ func TestUpdate(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "group_ids": { + "meeting_user_ids": { "type": "relation-list", - "collection": "group", + "collection": "meeting_user", "fields": { - "perm_ids": { + "personal_note_ids": { "type": "relation-list", - "collection": "perm", - "fields": {"name": null} + "collection": "personal_note", + "fields": {"note": null} } } } } }`, `--- - user/1/group_ids: [1,2] - group/1/perm_ids: [1,2] - group/2/perm_ids: [1,2] + user/1/meeting_user_ids: [1,2] + meeting_user/1/personal_note_ids: [1,2] + meeting_user/2/personal_note_ids: [1,2] `, `--- - user/1/group_ids: [2] - group/1/perm_ids: [1,2] - group/2/perm_ids: [1,2] + user/1/meeting_user_ids: [2] + meeting_user/1/personal_note_ids: [1,2] + meeting_user/2/personal_note_ids: [1,2] `, - mustKeys("user/1/group_ids", "group/2/perm_ids", "perm/2/name", "perm/1/name"), + mustKeys("user/1/meeting_user_ids", "meeting_user/2/personal_note_ids", "personal_note/2/note", "personal_note/1/note"), 1, }, } { @@ -439,6 +409,194 @@ func TestUpdate(t *testing.T) { } } +func TestInvalidRequestsAtParsingTime(t *testing.T) { + for _, tt := range []struct { + name string + request string + isInvalid bool + }{ + { + "invalid collection", + `{ + "collection": "does_not_exist", + "ids":[1], + "fields": {"username": null} + }`, + true, + }, + { + "invalid field", + `{ + "collection": "user", + "ids":[1], + "fields": {"does_not_exist": null} + }`, + true, + }, + { + "invalid id", + `{ + "collection": "user", + "ids":[0], + "fields": {"username": null} + }`, + true, + }, + { + "invalid collection in relation-list", + `{ + "collection": "user", + "ids":[1], + "fields": { + "meeting_user_ids": { + "type": "relation-list", + "collection": "does_not_exist", + "fields": {"name": null} + } + } + }`, + true, + }, + { + "invalid collection in relation", + `{ + "collection": "user", + "ids":[1], + "fields": { + "organization_id": { + "type": "relation", + "collection": "does_not_exist", + "fields": {"name": null} + } + } + }`, + true, + }, + { + "invalid collection in generic-relation does not return an error", + `{ + "collection": "personal_note", + "ids":[1], + "fields": { + "content_object_id": { + "type": "generic-relation", + "fields": {"does-not-exist": null} + } + } + }`, + false, + }, + } { + t.Run(tt.name, func(t *testing.T) { + if _, err := keysbuilder.FromJSON(strings.NewReader(tt.request)); err != nil { + if tt.isInvalid { + var errInvalid keysbuilder.InvalidError + if errors.As(err, &errInvalid) { + return + } + + t.Fatalf("Got error `%v`, expedted InvalidError", err) + } + + t.Fatalf("Update(): %v", err) + } + + if tt.isInvalid { + t.Errorf("FromJson did not return an error") + } + }) + } +} + +func TestInvalidOnUpdateIgnoresKeys(t *testing.T) { + ctx := context.Background() + for _, tt := range []struct { + name string + request string + data string + expectKeys []dskey.Key + }{ + { + "invalid field on generic-relation", + `{ + "collection": "personal_note", + "ids": [1], + "fields": { + "content_object_id": { + "type": "generic-relation", + "fields": {"does-not-exist": null} + } + } + }`, + `personal_note/1/content_object_id: motion/1`, + mustKeys("personal_note/1/content_object_id"), + }, + { + "invalid field on generic-relation-list", + `{ + "collection": "tag", + "ids": [1], + "fields": { + "tagged_ids": { + "type": "generic-relation-list", + "fields": {"does-not-exist": null} + } + } + }`, + `tag/1/tagged_ids: [motion/1, agenda_item/2]`, + mustKeys("tag/1/tagged_ids"), + }, + { + "invalid field on one value of an generic-relation-list", + `{ + "collection": "tag", + "ids": [1], + "fields": { + "tagged_ids": { + "type": "generic-relation-list", + "fields": {"title": null} + } + } + }`, + `tag/1/tagged_ids: [motion/1, agenda_item/2]`, + mustKeys("tag/1/tagged_ids", "motion/1/title"), + }, + { + "optional value in database for an relation field", + `{ + "collection": "agenda_item", + "ids": [1], + "fields": { + "parent_id": { + "type": "relation", + "collection": "agenda_item", + "fields": {"item_number": null} + } + } + }`, + `agenda_item/1/parent_id: 0`, + mustKeys("agenda_item/1/parent_id"), + }, + } { + t.Run(tt.name, func(t *testing.T) { + kb, err := keysbuilder.FromJSON(strings.NewReader(tt.request)) + if err != nil { + t.Fatalf("FromJSON: %v", err) + } + + data := dsmock.NewFlow(dsmock.YAMLData(tt.data)) + got, err := kb.Update(ctx, data) + if err != nil { + t.Fatalf("Update(): %v", err) + } + + if !reflect.DeepEqual(got, tt.expectKeys) { + t.Errorf("Got keys %v, expected %v", got, tt.expectKeys) + } + }) + } +} + func TestConcurency(t *testing.T) { ctx := context.Background() jsonData := ` @@ -446,14 +604,14 @@ func TestConcurency(t *testing.T) { "ids": [1, 2, 3], "collection": "user", "fields": { - "group_ids": { + "meeting_user_ids": { "type": "relation-list", - "collection": "group", + "collection": "meeting_user", "fields": { - "perm_ids": { + "personal_note_ids": { "type": "relation-list", - "collection": "perm", - "fields": {"name": null} + "collection": "personal_note", + "fields": {"note": null} } } } @@ -463,11 +621,11 @@ func TestConcurency(t *testing.T) { ds := dsmock.NewFlow( dsmock.YAMLData(`--- - user/1/group_ids: [1,2] - user/2/group_ids: [1,2] - user/3/group_ids: [1,2] - group/1/perm_ids: [1,2] - group/2/perm_ids: [1,2] + user/1/meeting_user_ids: [1,2] + user/2/meeting_user_ids: [1,2] + user/3/meeting_user_ids: [1,2] + meeting_user/1/personal_note_ids: [1,2] + meeting_user/2/personal_note_ids: [1,2] `), dsmock.NewCounter, ) @@ -487,7 +645,15 @@ func TestConcurency(t *testing.T) { t.Errorf("Got %d requests to the datastore, expected 2: %v", got, counter.Requests()) } - expect := mustKeys("user/1/group_ids", "user/2/group_ids", "user/3/group_ids", "group/1/perm_ids", "group/2/perm_ids", "perm/1/name", "perm/2/name") + expect := mustKeys( + "user/1/meeting_user_ids", + "user/2/meeting_user_ids", + "user/3/meeting_user_ids", + "meeting_user/1/personal_note_ids", + "meeting_user/2/personal_note_ids", + "personal_note/1/note", + "personal_note/2/note", + ) if diff := cmpSet(set(expect...), set(keys...)); diff != nil { t.Errorf("Expected %v, got: %v", expect, diff) } @@ -500,24 +666,24 @@ func TestManyRequests(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"login_text": null} } } }, { "ids": [1], "collection": "motion", - "fields": {"name": null} + "fields": {"title": null} }, { "ids": [2], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"login_text": null} } } } @@ -525,8 +691,8 @@ func TestManyRequests(t *testing.T) { ds := dsmock.NewFlow( dsmock.YAMLData(`--- - user/1/note_id: 1 - user/2/note_id: 1 + user/1/organization_id: 1 + user/2/organization_id: 1 `), dsmock.NewCounter, ) @@ -546,7 +712,7 @@ func TestManyRequests(t *testing.T) { t.Errorf("Got %d requests, expected 1: %v", got, counter.Requests()) } - expect := mustKeys("user/1/note_id", "user/2/note_id", "motion/1/name", "note/1/important") + expect := mustKeys("user/1/organization_id", "user/2/organization_id", "motion/1/title", "organization/1/login_text") if diff := cmpSet(set(expect...), set(keys...)); diff != nil { t.Errorf("Got %v, expected %v", diff, expect) } @@ -561,11 +727,11 @@ func TestManyRequestsSameKeys(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", + "collection": "organization", "fields": { - "important": null + "login_text": null } } } @@ -573,13 +739,13 @@ func TestManyRequestsSameKeys(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": null + "organization_id": null } } ]` ds := dsmock.Stub(dsmock.YAMLData(`--- - user/1/note_id: 1 + user/1/organization_id: 1 `)) b, err := keysbuilder.ManyFromJSON(strings.NewReader(jsonData)) @@ -593,8 +759,8 @@ func TestManyRequestsSameKeys(t *testing.T) { } expect := mustKeys( - "user/1/note_id", - "note/1/important", + "user/1/organization_id", + "organization/1/login_text", ) if diff := cmpSet(set(expect...), set(keys...)); diff != nil { t.Errorf("Got %v, expected %v", diff, expect) @@ -617,10 +783,10 @@ func TestError(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "note_id": { + "organization_id": { "type": "relation", - "collection": "note", - "fields": {"important": null} + "collection": "organization", + "fields": {"login_text": null} } } }` @@ -650,22 +816,20 @@ func TestRequestCount(t *testing.T) { "ids": [1], "collection": "user", "fields": { - "name": null, - "goodlooking": null, - "note_ids": { - "type": "relation-list", - "collection": "note", + "username": null, + "organization_id": { + "type": "relation", + "collection": "organization", "fields": { - "important": null, - "text": null + "login_text": null, + "name": null } }, - "main_group": { - "type": "relation", - "collection": "note", + "meeting_user_ids": { + "type": "relation-list", + "collection": "meeting_user", "fields": { - "name": null, - "permissions": null + "comment": null } } } diff --git a/internal/projector/datastore/fetch.go b/internal/projector/datastore/fetch.go index a6d3a8ed..78eef771 100644 --- a/internal/projector/datastore/fetch.go +++ b/internal/projector/datastore/fetch.go @@ -40,7 +40,7 @@ func (f *Fetcher) Fetch(ctx context.Context, value interface{}, keyFmt string, a fqfield, err := dskey.FromString(fmt.Sprintf(keyFmt, a...)) if err != nil { - f.err = fmt.Errorf("invalid key: %s", fmt.Sprintf(keyFmt, a...)) + f.err = err return } @@ -68,7 +68,7 @@ func (f *Fetcher) FetchIfExist(ctx context.Context, value interface{}, keyFmt st fqfield, err := dskey.FromString(fmt.Sprintf(keyFmt, a...)) if err != nil { - f.err = fmt.Errorf("invalid key: %s", fmt.Sprintf(keyFmt, a...)) + f.err = err return } @@ -106,7 +106,7 @@ func (f *Fetcher) Object(ctx context.Context, fqID string, fields ...string) map keys := make([]dskey.Key, len(fields)+1) idKey, err := dskey.FromString(fqID + "/id") if err != nil { - f.err = fmt.Errorf("invalid key: %s", fqID+"/id") + f.err = err return nil } keys[0] = idKey @@ -114,7 +114,7 @@ func (f *Fetcher) Object(ctx context.Context, fqID string, fields ...string) map for i := 0; i < len(fields); i++ { k, err := dskey.FromString(fqID + "/" + fields[i]) if err != nil { - f.err = fmt.Errorf("invalid key: %s", fqID+fields[i]) + f.err = err return nil } keys[i+1] = k @@ -135,7 +135,7 @@ func (f *Fetcher) Object(ctx context.Context, fqID string, fields ...string) map for i := 0; i < len(fields); i++ { key, err := dskey.FromString(fqID + "/" + fields[i]) if err != nil { - f.err = fmt.Errorf("invalid key: %s", fqID+"/"+fields[i]) + f.err = err return nil } object[fields[i]] = vals[key] @@ -147,6 +147,7 @@ func (f *Fetcher) Object(ctx context.Context, fqID string, fields ...string) map // then Err() returns nil. func (f *Fetcher) Err() error { err := f.err + f.err = nil return err } diff --git a/internal/projector/projector.go b/internal/projector/projector.go index 592acd36..d0fdf3cc 100644 --- a/internal/projector/projector.go +++ b/internal/projector/projector.go @@ -143,7 +143,7 @@ func splitKeys(keys []dskey.Key) ([]dskey.Key, []dskey.Key) { var contentKeys []dskey.Key normalKeys := make([]dskey.Key, 0, len(keys)) for _, k := range keys { - if !(k.Collection == "projection" && k.Field == "content") { + if !(k.Collection() == "projection" && k.Field() == "content") { normalKeys = append(normalKeys, k) continue } @@ -190,7 +190,7 @@ func (p *Projector) calculateHelper(ctx context.Context, fqfield dskey.Key) ([]b if errors.As(err, &errDoesNotExist) { return nil, nil } - return nil, fmt.Errorf("fetching projection %d from datastore: %w", fqfield.ID, err) + return nil, fmt.Errorf("fetching projection %d from datastore: %w", fqfield.ID(), err) } p7on, err := p7onFromMap(data) diff --git a/internal/projector/projector_test.go b/internal/projector/projector_test.go index 4bfc84a6..3b670863 100644 --- a/internal/projector/projector_test.go +++ b/internal/projector/projector_test.go @@ -38,7 +38,7 @@ func TestProjectionFromContentObject(t *testing.T) { ctx := context.Background() flow := dsmock.NewFlow(dsmock.YAMLData(`--- projection/1: - content_object_id: test_model/1 + content_object_id: user/1 current_projector_id: 1 `)) key := dskey.MustKey("projection/1/content") @@ -49,7 +49,7 @@ func TestProjectionFromContentObject(t *testing.T) { t.Fatalf("Get: %v", err) } - expect := []byte(`{"collection":"test_model","value":"test_model"}` + "\n") + expect := []byte(`{"collection":"user","value":"user"}` + "\n") if equal, explain := cmpJson(got[key], expect); !equal { t.Errorf("got != expect: %s", explain) @@ -60,7 +60,7 @@ func TestProjectionFromContentObjectIfNotOnProjector(t *testing.T) { ctx := context.Background() flow := dsmock.NewFlow(dsmock.YAMLData(`--- projection/1: - content_object_id: test_model/1 + content_object_id: user/1 current_projector_id: null `)) key := dskey.MustKey("projection/1/content") @@ -177,7 +177,7 @@ func TestProjectionUpdateProjection(t *testing.T) { flow.Send(dsmock.YAMLData(`--- projection/1: type: null - content_object_id: test_model/1 + content_object_id: user/1 `)) <-done @@ -186,7 +186,7 @@ func TestProjectionUpdateProjection(t *testing.T) { t.Fatalf("Second Get: %v", err) } - expect := []byte(`{"collection":"test_model","value":"test_model"}` + "\n") + expect := []byte(`{"collection":"user","value":"user"}` + "\n") if equal, expain := cmpJson(got[key], expect); !equal { t.Errorf("got != expect: %s", expain) } @@ -235,7 +235,7 @@ func TestProjectionUpdateSlide(t *testing.T) { flow := dsmock.NewFlow(dsmock.YAMLData(`--- projection/1: - type: test_model + type: user content_object_id: meeting/6 current_projector_id: 1 `)) @@ -252,7 +252,7 @@ func TestProjectionUpdateSlide(t *testing.T) { t.Fatalf("Get: %v", err) } - flow.Send(dsmock.YAMLData("test_model/1/field: new value")) + flow.Send(dsmock.YAMLData("user/1/username: new value")) <-done got, err := p.Get(ctx, key) @@ -260,7 +260,7 @@ func TestProjectionUpdateSlide(t *testing.T) { t.Errorf("second Get: %v", err) } - expect := []byte(`{"collection":"test_model","value":"calculated with new value"}` + "\n") + expect := []byte(`{"collection":"user","value":"calculated with new value"}` + "\n") if equal, expain := cmpJson(got[key], expect); !equal { t.Errorf("got != expect: %s", expain) } @@ -272,7 +272,7 @@ func TestProjectionUpdateOtherKey(t *testing.T) { flow := dsmock.NewFlow(dsmock.YAMLData(`--- projection/1: - type: test_model + type: user content_object_id: meeting/1 current_projector_id: 1 `)) @@ -289,7 +289,7 @@ func TestProjectionUpdateOtherKey(t *testing.T) { t.Fatalf("Get: %v", err) } - flow.Send(dsmock.YAMLData("some_other/1/field: new value")) + flow.Send(dsmock.YAMLData("group/1/name: new value")) <-done got, err := p.Get(ctx, key) @@ -297,7 +297,7 @@ func TestProjectionUpdateOtherKey(t *testing.T) { t.Errorf("second Get: %v", err) } - expect := []byte(`{"collection":"test_model","value":"test_model"}` + "\n") + expect := []byte(`{"collection":"user","value":"user"}` + "\n") if equal, expain := cmpJson(got[key], expect); !equal { t.Errorf("got != expect: %s", expain) } @@ -318,11 +318,11 @@ func TestOnTwoProjections(t *testing.T) { projection: 1: content_object_id: meeting/1 - type: test_model + type: user 2: content_object_id: meeting/1 - type: test_model + type: user `)) p := projector.NewProjector(ds, testSlides()) @@ -355,11 +355,11 @@ func testSlides() *projector.SlideStore { return []byte(`{"value":"abc"}`), nil }) - s.RegisterSliderFunc("test_model", func(ctx context.Context, fetch *datastore.Fetcher, p7on *projector.Projection) (encoded []byte, err error) { + s.RegisterSliderFunc("user", func(ctx context.Context, fetch *datastore.Fetcher, p7on *projector.Projection) (encoded []byte, err error) { var field json.RawMessage - fetch.Fetch(ctx, &field, "test_model/1/field") + fetch.Fetch(ctx, &field, "user/1/username") if field == nil { - return []byte(`{"value":"test_model"}`), nil + return []byte(`{"value":"user"}`), nil } return []byte(fmt.Sprintf(`{"value":"calculated with %s"}`, string(field[1:len(field)-1]))), nil }) diff --git a/internal/projector/slide/list_of_speakers.go b/internal/projector/slide/list_of_speakers.go index b52e596d..70095538 100644 --- a/internal/projector/slide/list_of_speakers.go +++ b/internal/projector/slide/list_of_speakers.go @@ -3,6 +3,7 @@ package slide import ( "context" "encoding/json" + "errors" "fmt" "sort" "strconv" @@ -10,6 +11,7 @@ import ( "github.com/OpenSlides/openslides-autoupdate-service/internal/projector" "github.com/OpenSlides/openslides-autoupdate-service/internal/projector/datastore" + "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dskey" ) type dbListOfSpeakers struct { @@ -182,21 +184,32 @@ func getLosID(ctx context.Context, ContentObjectID string, fetch *datastore.Fetc } referenceProjectorID = datastore.Int(ctx, fetch.FetchIfExist, "meeting/%d/reference_projector_id", meetingID) referenceP7onIDs := datastore.Ints(ctx, fetch.FetchIfExist, "projector/%d/current_projection_ids", referenceProjectorID) + if err := fetch.Err(); err != nil { + return losID, referenceProjectorID, err + } for _, pID := range referenceP7onIDs { contentObjectID := datastore.String(ctx, fetch.FetchIfExist, "projection/%d/content_object_id", pID) + if err := fetch.Err(); err != nil { + return 0, 0, fmt.Errorf("fetching projection/%d/content_object_id: %w", pID, err) + } + if contentObjectID == "" { continue } losID = datastore.Int(ctx, fetch.FetchIfExist, "%s/list_of_speakers_id", contentObjectID) + if err := fetch.Err(); err != nil { + var errInvalidKey dskey.InvalidKeyError + if !errors.As(err, &errInvalidKey) { + return 0, 0, fmt.Errorf("%s/content_object_id: %w", contentObjectID, err) + } + } if losID != 0 { break } } - if err := fetch.Err(); err != nil { - return losID, referenceProjectorID, err - } + return losID, referenceProjectorID, nil } diff --git a/internal/projector/slide/motion.go b/internal/projector/slide/motion.go index 37931454..b9161168 100644 --- a/internal/projector/slide/motion.go +++ b/internal/projector/slide/motion.go @@ -58,7 +58,7 @@ type amendmentsType struct { ID int `json:"id"` Title string `json:"title"` Number string `json:"number"` - AmendmentParagraph json.RawMessage `json:"amendment_paragraph"` + AmendmentParagraph json.RawMessage `json:"amendment_paragraphs"` ChangeRecommendations []dbMotionChangeRecommendation `json:"change_recommendations"` MergeAmendmentIntoFinal string `json:"merge_amendment_into_final"` MergeAmendmentIntoDiff string `json:"merge_amendment_into_diff"` @@ -91,7 +91,7 @@ type dbMotion struct { LineLength int `json:"line_length"` Preamble string `json:"preamble"` LineNumbering string `json:"line_numbering"` - AmendmentParagraph json.RawMessage `json:"amendment_paragraph,omitempty"` + AmendmentParagraph json.RawMessage `json:"amendment_paragraphs,omitempty"` LeadMotion *leadMotionType `json:"lead_motion,omitempty"` BaseStatute *dbMotionStatuteParagraph `json:"base_statute,omitempty"` ChangeRecommendations []dbMotionChangeRecommendation `json:"change_recommendations"` @@ -160,7 +160,7 @@ func Motion(store *projector.SlideStore) { "meeting_id", "lead_motion_id", "statute_paragraph_id", - "amendment_paragraph", + "amendment_paragraphs", "change_recommendation_ids", "amendment_ids", "submitter_ids", @@ -454,7 +454,7 @@ func fillAmendments(ctx context.Context, fetch *datastore.Fetcher, motion *dbMot "title", "number", "meeting_id", - "amendment_paragraph", + "amendment_paragraphs", "state_id", "recommendation_id", "change_recommendation_ids", diff --git a/internal/projector/slide/motion_test.go b/internal/projector/slide/motion_test.go index 932e4f24..abda50f2 100644 --- a/internal/projector/slide/motion_test.go +++ b/internal/projector/slide/motion_test.go @@ -47,16 +47,13 @@ func TestMotion(t *testing.T) { reason:

Motion1 reason HTML

modified_final_version:

Motion1 modifiedFinalVersion HTML

submitter_ids: [1,2,3] - amendment_paragraph: {"1": "amendmentParagraph1", "2": "amendmentParagraph2"} + amendment_paragraphs: {"1": "amendmentParagraph1", "2": "amendmentParagraph2"} change_recommendation_ids: [1,2,3] amendment_ids: [3,4,5,6] referenced_in_motion_recommendation_extension_ids: [7,8] recommendation_id: 4 recommendation_extension: RecommendationExtension_motion1 recommendation_extension_reference_ids: ["motion/9", "motion/10"] - global_yes: false - global_no: true - global_abstain: false meeting_id: 1 agenda_item_id: 1 2: @@ -67,27 +64,27 @@ func TestMotion(t *testing.T) { 3: title: Amendment3 title number: Amendment3 123 - amendment_paragraph: {"31": "amendmentParagraph31", "32": "amendmentParagraph32"} + amendment_paragraphs: {"31": "amendmentParagraph31", "32": "amendmentParagraph32"} change_recommendation_ids: [4, 5] state_id: 1 agenda_item_id: 3 4: title: Amendment4 title number: Amendment4 4123 - amendment_paragraph: null + amendment_paragraphs: null state_id: 2 agenda_item_id: 4 5: title: Amendment5 title number: Amendment5 5123 - amendment_paragraph: null + amendment_paragraphs: null state_id: 3 recommendation_id: 1 agenda_item_id: 5 6: title: Amendment6 title number: Amendment6 6123 - amendment_paragraph: null + amendment_paragraphs: null state_id: 3 recommendation_id: 2 agenda_item_id: 6 @@ -218,7 +215,7 @@ func TestMotion(t *testing.T) { "line_length": 85, "preamble": "The assembly may decide", "line_numbering": "outside", - "amendment_paragraph":{ + "amendment_paragraphs":{ "1":"amendmentParagraph1", "2":"amendmentParagraph2" }, @@ -249,7 +246,7 @@ func TestMotion(t *testing.T) { "id": 3, "title": "Amendment3 title", "number": "Amendment3 123", - "amendment_paragraph":{ + "amendment_paragraphs":{ "31":"amendmentParagraph31", "32":"amendmentParagraph32" }, @@ -272,7 +269,7 @@ func TestMotion(t *testing.T) { "id": 4, "title": "Amendment4 title", "number": "Amendment4 4123", - "amendment_paragraph": null, + "amendment_paragraphs": null, "change_recommendations": null, "merge_amendment_into_final": "undefined", "merge_amendment_into_diff": "undefined" @@ -281,7 +278,7 @@ func TestMotion(t *testing.T) { "id": 5, "title": "Amendment5 title", "number": "Amendment5 5123", - "amendment_paragraph": null, + "amendment_paragraphs": null, "change_recommendations": null, "merge_amendment_into_final": "undefined", "merge_amendment_into_diff": "do_merge" @@ -290,7 +287,7 @@ func TestMotion(t *testing.T) { "id": 6, "title": "Amendment6 title", "number": "Amendment6 6123", - "amendment_paragraph": null, + "amendment_paragraphs": null, "change_recommendations": null, "merge_amendment_into_final": "undefined", "merge_amendment_into_diff": "undefined" @@ -323,7 +320,7 @@ func TestMotion(t *testing.T) { "line_length": 85, "preamble": "The assembly may decide", "line_numbering": "outside", - "amendment_paragraph":{ + "amendment_paragraphs":{ "1":"amendmentParagraph1", "2":"amendmentParagraph2" }, @@ -354,7 +351,7 @@ func TestMotion(t *testing.T) { "id": 3, "title": "Amendment3 title", "number": "Amendment3 123", - "amendment_paragraph":{ + "amendment_paragraphs":{ "31":"amendmentParagraph31", "32":"amendmentParagraph32" }, @@ -377,7 +374,7 @@ func TestMotion(t *testing.T) { "id": 4, "title": "Amendment4 title", "number": "Amendment4 4123", - "amendment_paragraph": null, + "amendment_paragraphs": null, "change_recommendations": null, "merge_amendment_into_final": "undefined", "merge_amendment_into_diff": "undefined" @@ -386,7 +383,7 @@ func TestMotion(t *testing.T) { "id": 5, "title": "Amendment5 title", "number": "Amendment5 5123", - "amendment_paragraph": null, + "amendment_paragraphs": null, "change_recommendations": null, "merge_amendment_into_final": "undefined", "merge_amendment_into_diff": "do_merge" @@ -395,7 +392,7 @@ func TestMotion(t *testing.T) { "id": 6, "title": "Amendment6 title", "number": "Amendment6 6123", - "amendment_paragraph": null, + "amendment_paragraphs": null, "change_recommendations": null, "merge_amendment_into_final": "undefined", "merge_amendment_into_diff": "undefined" @@ -453,6 +450,7 @@ func TestMotion(t *testing.T) { }, } { t.Run(tt.name, func(t *testing.T) { + ctx := context.Background() ds := dsmock.Stub(tt.data) fetch := datastore.NewFetcher(ds) @@ -462,7 +460,7 @@ func TestMotion(t *testing.T) { Options: tt.options, } - bs, err := motionSlide.Slide(context.Background(), fetch, p7on) + bs, err := motionSlide.Slide(ctx, fetch, p7on) assert.NoError(t, err) assert.JSONEq(t, tt.expect, string(bs)) }) diff --git a/internal/restrict/collection/collection.go b/internal/restrict/collection/collection.go index 86d7ee4a..0d469219 100644 --- a/internal/restrict/collection/collection.go +++ b/internal/restrict/collection/collection.go @@ -97,7 +97,10 @@ func (r *restrictCache) Modes(mode string) FieldRestricter { notFound := make([]int, 0, len(ids)) cachedAllowedIDs := make([]int, 0, len(ids)) for _, id := range ids { - key := dskey.Key{Collection: r.Name(), ID: id, Field: mode} + key, err := dskey.FromParts(r.Name(), id, mode) + if err != nil { + return nil, err + } allowed, found := r.cache[key] if !found { @@ -121,13 +124,19 @@ func (r *restrictCache) Modes(mode string) FieldRestricter { // Add all not Found keys to the cache as not allowed. for _, id := range notFound { - key := dskey.Key{Collection: r.Name(), ID: id, Field: mode} + key, err := dskey.FromParts(r.Name(), id, mode) + if err != nil { + return nil, err + } r.cache[key] = false } // Set all new allowed ids to the cache as true. for _, id := range newAllowedIDs { - key := dskey.Key{Collection: r.Name(), ID: id, Field: mode} + key, err := dskey.FromParts(r.Name(), id, mode) + if err != nil { + return nil, err + } r.cache[key] = true } diff --git a/internal/restrict/collection/meeting_test.go b/internal/restrict/collection/meeting_test.go index e0e773ad..3fea37e3 100644 --- a/internal/restrict/collection/meeting_test.go +++ b/internal/restrict/collection/meeting_test.go @@ -91,7 +91,7 @@ func TestMeetingModeB(t *testing.T) { false, `--- meeting/30: - template_for_committee_id: 16 + template_for_organization_id: 1 committee_id: 4 `, withElementID(30), diff --git a/internal/restrict/collection/motion_comment_test.go b/internal/restrict/collection/motion_comment_test.go index 82d9f17c..a450f661 100644 --- a/internal/restrict/collection/motion_comment_test.go +++ b/internal/restrict/collection/motion_comment_test.go @@ -114,7 +114,6 @@ func TestMotionCommentModeA(t *testing.T) { meeting_id: 30 read_group_ids: [2] - user/1/meeting_user_id: [10] meeting_user/10/group_ids: [2] group/2/id: 2 `, @@ -142,7 +141,6 @@ func TestMotionCommentModeA(t *testing.T) { meeting_id: 30 write_group_ids: [2] - user/1/meeting_user_id: [10] meeting_user/10/group_ids: [2] group/2/id: 2 `, diff --git a/internal/restrict/collection/motion_test.go b/internal/restrict/collection/motion_test.go index 0ded769d..0d38a5ee 100644 --- a/internal/restrict/collection/motion_test.go +++ b/internal/restrict/collection/motion_test.go @@ -31,7 +31,7 @@ func TestMotionModeC(t *testing.T) { motion/1: meeting_id: 30 state_id: 3 - + motion_state/3/id: 3 `, withPerms(30, perm.MotionCanSee), @@ -47,7 +47,7 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 state_id: 3 submitter_ids: [4] - + motion_state/3/restrictions: - is_submitter @@ -67,7 +67,7 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 state_id: 3 submitter_ids: [4] - + motion_state/3/restrictions: - is_submitter @@ -86,7 +86,7 @@ func TestMotionModeC(t *testing.T) { motion/1: meeting_id: 30 state_id: 3 - + motion_state/3/restrictions: - motion.can_manage `, @@ -102,7 +102,7 @@ func TestMotionModeC(t *testing.T) { motion/1: meeting_id: 30 state_id: 3 - + motion_state/3/restrictions: - motion.can_manage `, @@ -118,7 +118,7 @@ func TestMotionModeC(t *testing.T) { motion/1: meeting_id: 30 state_id: 3 - + motion_state/3/restrictions: - motion.can_manage - is_submitter @@ -136,7 +136,7 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 state_id: 3 submitter_ids: [4] - + motion_state/3/restrictions: - motion.can_manage - is_submitter @@ -156,7 +156,7 @@ func TestMotionModeC(t *testing.T) { motion/1: meeting_id: 30 state_id: 3 - + motion_state/3/restrictions: - motion.can_manage - is_submitter @@ -174,12 +174,13 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 state_id: 3 submitter_ids: [4] - + motion_state/3/restrictions: - motion.can_manage - is_submitter - motion_submitter/4/user_id: 1 + motion_submitter/4/meeting_user_id: 10 + meeting_user/10/user_id: 1 `, withPerms(30, perm.MotionCanManage), ) @@ -194,20 +195,19 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 lead_motion_id: 2 state_id: 10 - + motion/2: meeting_id: 30 state_id: 20 submitter_ids: [4] - + motion_state/10/id: 10 motion_state/20/restrictions: - is_submitter - motion_submitter/4/meeting_user_id: 404 - - meeting_user/404/user_id: 404 + motion_submitter/4/meeting_user_id: 400 + meeting_user/400/user_id: 40 `, withPerms(30, perm.MotionCanSee), ) @@ -222,14 +222,14 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 lead_motion_id: 2 state_id: 10 - + motion/2: meeting_id: 30 state_id: 20 submitter_ids: [4] - + motion_state/10/id: 10 - + motion_state/20/restrictions: - is_submitter @@ -250,7 +250,7 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 lead_motion_id: 1 state_id: 10 - + motion_state/10/id: 10 `, withPerms(30, perm.MotionCanSee), @@ -266,7 +266,7 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 lead_motion_id: 1 state_id: 10 - + motion_state/10/id: 10 `, ) @@ -291,13 +291,14 @@ func TestMotionModeC(t *testing.T) { meeting_id: 30 lead_motion_id: 1 state_id: 10 - + motion_state/10/id: 10 motion_state/30/restrictions: - is_submitter - motion_submitter/4/user_id: 1 + motion_submitter/4/meeting_user_id: 10 + meeting_user/10/user_id: 1 `, withPerms(30, perm.MotionCanSee), ) @@ -328,7 +329,8 @@ func TestMotionModeC(t *testing.T) { motion_state/30/restrictions: - is_submitter - motion_submitter/4/user_id: 404 + motion_submitter/4/meeting_user_id: 4040 + meeting_user/4040/user_id: 404 `, withPerms(30, perm.MotionCanSee), ) diff --git a/internal/restrict/collection/topic_test.go b/internal/restrict/collection/topic_test.go index eb793398..05c881ce 100644 --- a/internal/restrict/collection/topic_test.go +++ b/internal/restrict/collection/topic_test.go @@ -34,7 +34,7 @@ func TestTopicModeA(t *testing.T) { agenda_item_id: 3 agenda_item/3: - internal: true + is_internal: true meeting_id: 30 `, withPerms(30, perm.AgendaItemCanSeeInternal), diff --git a/internal/restrict/collection/user_test.go b/internal/restrict/collection/user_test.go index df447d91..78af78b9 100644 --- a/internal/restrict/collection/user_test.go +++ b/internal/restrict/collection/user_test.go @@ -337,7 +337,7 @@ func TestUserModeA(t *testing.T) { meeting/30/id: 30 chat_message/4: - user_id: 2 + meeting_user_id: 20 chat_group_id: 3 chat_group/3: diff --git a/internal/restrict/restrict.go b/internal/restrict/restrict.go index 549c4010..6b0e71fd 100644 --- a/internal/restrict/restrict.go +++ b/internal/restrict/restrict.go @@ -18,6 +18,7 @@ import ( "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dsfetch" "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dskey" "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/flow" + "github.com/OpenSlides/openslides-autoupdate-service/pkg/fastjson" "github.com/OpenSlides/openslides-autoupdate-service/pkg/set" ) @@ -79,7 +80,7 @@ func restrict(ctx context.Context, getter flow.Getter, uid int, data map[dskey.K isSuperAdmin, err := perm.HasOrganizationManagementLevel(ctx, ds, uid, perm.OMLSuperadmin) if err != nil { var errDoesNotExist dsfetch.DoesNotExistError - if errors.As(err, &errDoesNotExist) || dskey.Key(errDoesNotExist).Collection == "user" { + if errors.As(err, &errDoesNotExist) || dskey.Key(errDoesNotExist).Collection() == "user" { // TODO LAST ERROR return nil, fmt.Errorf("request user %d does not exist", uid) } @@ -142,13 +143,13 @@ func restrict(ctx context.Context, getter flow.Getter, uid int, data map[dskey.K continue } - restrictionMode, err := restrictModeName(key.Collection, key.Field) + restrictionMode, err := restrictModeName(key.Collection(), key.Field()) if err != nil { return nil, fmt.Errorf("getting restriction Mode for %s: %w", key, err) } - cm := collection.CM{Collection: key.Collection, Mode: restrictionMode} - if !allowedMods[cm].Has(key.ID) { + cm := collection.CM{Collection: key.Collection(), Mode: restrictionMode} + if !allowedMods[cm].Has(key.ID()) { data[key] = nil continue } @@ -174,7 +175,7 @@ func restrictSuperAdmin(ctx context.Context, getter flow.Getter, uid int, data m continue } - restricter := collection.Collection(ctx, key.Collection) + restricter := collection.Collection(ctx, key.Collection()) if restricter == nil { // Superadmins can see unknown collections. continue @@ -188,7 +189,7 @@ func restrictSuperAdmin(ctx context.Context, getter flow.Getter, uid int, data m continue } - restrictionMode, err := restrictModeName(key.Collection, key.Field) + restrictionMode, err := restrictModeName(key.Collection(), key.Field()) if err != nil { return fmt.Errorf("getting restriction Mode for %s: %w", key, err) } @@ -199,7 +200,7 @@ func restrictSuperAdmin(ctx context.Context, getter flow.Getter, uid int, data m continue } - allowed, err := modefunc(ctx, ds, key.ID) + allowed, err := modefunc(ctx, ds, key.ID()) if err != nil { return fmt.Errorf("calling mode func: %w", err) } @@ -213,16 +214,16 @@ func restrictSuperAdmin(ctx context.Context, getter flow.Getter, uid int, data m // groupKeysByCollection groups all the keys in data by there collection. func groupKeysByCollection(key dskey.Key, value []byte, restrictModeIDs map[collection.CM]set.Set[int]) error { - restrictionMode, err := restrictModeName(key.Collection, key.Field) + restrictionMode, err := restrictModeName(key.Collection(), key.Field()) if err != nil { return fmt.Errorf("getting restriction Mode for %s: %w", key, err) } - cm := collection.CM{Collection: key.Collection, Mode: restrictionMode} + cm := collection.CM{Collection: key.Collection(), Mode: restrictionMode} if restrictModeIDs[cm].IsNotInitialized() { restrictModeIDs[cm] = set.New[int]() } - restrictModeIDs[cm].Add(key.ID) + restrictModeIDs[cm].Add(key.ID()) if err := addRelationToRestrictModeIDs(key, value, restrictModeIDs); err != nil { return fmt.Errorf("check %s for relation: %w", key, err) @@ -371,8 +372,8 @@ func isRelation(collectionField string, value []byte) (collection.CM, int, bool, return collection.CM{}, 0, false, nil } - var id int - if err := json.Unmarshal(value, &id); err != nil { + id, err := fastjson.DecodeInt(value) + if err != nil { return collection.CM{}, 0, false, fmt.Errorf("decoding %q (`%s`): %w", collectionField, value, err) } @@ -391,8 +392,8 @@ func isRelationList(keyPrefix string, value []byte) (collection.CM, []int, bool, return collection.CM{}, nil, false, nil } - var ids []int - if err := json.Unmarshal(value, &ids); err != nil { + ids, err := fastjson.DecodeIntList(value) + if err != nil { return collection.CM{}, nil, false, fmt.Errorf("decoding value (size: %d): %w", len(value), err) } diff --git a/internal/restrict/restrict_test.go b/internal/restrict/restrict_test.go index 6d824875..ad7173dd 100644 --- a/internal/restrict/restrict_test.go +++ b/internal/restrict/restrict_test.go @@ -53,7 +53,6 @@ func TestRestrict(t *testing.T) { 1: meeting_id: 30 item_number: five - unknown_field: unknown tag_ids: [1,2] 2: meeting_id: 30 @@ -79,8 +78,6 @@ func TestRestrict(t *testing.T) { id: 1 meeting_id: 30 agenda_item_id: 1 - - unknown_collection/1/field: 404 `)) ctx, restricter := restrict.Middleware(ctx, ds, 1) @@ -91,8 +88,8 @@ func TestRestrict(t *testing.T) { dskey.MustKey("agenda_item/10/item_number"), dskey.MustKey("tag/1/tagged_ids"), dskey.MustKey("user/1/meeting_user_ids"), - dskey.MustKey("user_meeting/10/group_ids"), - dskey.MustKey("user_meeting/11/group_ids"), + dskey.MustKey("meeting_user/10/group_ids"), + dskey.MustKey("meeting_user/11/group_ids"), dskey.MustKey("agenda_item/2/content_object_id"), dskey.MustKey("agenda_item/2/parent_id"), dskey.MustKey("motion/1/origin_id"), @@ -108,18 +105,10 @@ func TestRestrict(t *testing.T) { t.Errorf("agenda_item/1/item_number was removed") } - if data[dskey.MustKey("agenda_item/1/unknown_field")] != nil { - t.Errorf("agenda_item/1/item_number was not removed") - } - if data[dskey.MustKey("agenda_item/10/item_number")] != nil { t.Errorf("agenda_item/10/item_number was not removed") } - if data[dskey.MustKey("unknown_collection/1/field")] != nil { - t.Errorf("unknown_collection/1/field was not removed") - } - if got := string(data[dskey.MustKey("tag/1/tagged_ids")]); got != `["agenda_item/1"]` { t.Errorf("tag/1/tagged_ids was restricted to %q, expedted %q", got, `["agenda_item/1"]`) } diff --git a/pkg/datastore/cache/cache_test.go b/pkg/datastore/cache/cache_test.go index 80eb29fb..1c96eeed 100644 --- a/pkg/datastore/cache/cache_test.go +++ b/pkg/datastore/cache/cache_test.go @@ -14,9 +14,9 @@ import ( func TestCache_call_Get_returns_the_value_from_flow(t *testing.T) { ctx := context.Background() - myKey := dskey.MustKey("key/1/field") + myKey := dskey.MustKey("user/1/username") flow := dsmock.NewFlow(dsmock.YAMLData(`--- - key/1/field: value + user/1/username: value `)) c := cache.New(flow) @@ -39,7 +39,7 @@ func TestCache_Get_with_a_key_not_in_the_flow_returns_nil_as_value(t *testing.T) dsmock.NewCounter, ) counter := flow.Middlewares()[0].(*dsmock.Counter) - myKey := dskey.MustKey("key/1/field") + myKey := dskey.MustKey("user/1/username") c := cache.New(flow) if _, err := c.Get(ctx, myKey); err != nil { @@ -67,11 +67,11 @@ func TestCache_call_Get_two_times_only_calls_the_flow_one_time(t *testing.T) { flow := dsmock.NewFlow( dsmock.Stub(dsmock.YAMLData(`--- - key/1/field: value + user/1/username: value `)), dsmock.NewCounter, ) - myKey := dskey.MustKey("key/1/field") + myKey := dskey.MustKey("user/1/username") c := cache.New(flow) if _, err := c.Get(ctx, myKey); err != nil { @@ -93,11 +93,11 @@ func TestCache_calling_get_at_the_same_time_second_call_waits_until_first_is_fin wait := make(chan error) flow := dsmock.NewFlow( dsmock.YAMLData(`--- - key/1/field: value + user/1/username: value `), dsmock.NewWait(wait), ) - myKey := dskey.MustKey("key/1/field") + myKey := dskey.MustKey("user/1/username") c := cache.New(flow) err1 := make(chan error) @@ -144,11 +144,11 @@ func TestCache_Get_gets_an_error_from_flow_does_not_effect_a_second_call_to_Get( waiter := make(chan error, 1) flow := dsmock.NewFlow( dsmock.YAMLData(`--- - key/1/field: value + user/1/username: value `), dsmock.NewWait(waiter), ) - myKey1 := dskey.MustKey("key/1/field") + myKey1 := dskey.MustKey("user/1/username") c := cache.New(flow) waiter <- fmt.Errorf("some error") @@ -168,13 +168,13 @@ func TestCache_Update_values_not_in_the_cache_do_not_update_the_cache(t *testing flow := dsmock.NewFlow( dsmock.YAMLData(`--- - key/1/field: value - key/2/field: value + user/1/username: value + user/2/username: value `), dsmock.NewCounter, ) - myKey1 := dskey.MustKey("key/1/field") - myKey2 := dskey.MustKey("key/2/field") + myKey1 := dskey.MustKey("user/1/username") + myKey2 := dskey.MustKey("user/2/username") c := cache.New(flow) // Calls update in background. @@ -214,11 +214,11 @@ func TestCache_Get_a_value_when_in_parallel_it_is_updated(t *testing.T) { flow := dsmock.NewFlow( dsmock.YAMLData(`--- - key/1/field: old value + user/1/username: old value `), dsmock.NewWait(waiter), ) - myKey := dskey.MustKey("key/1/field") + myKey := dskey.MustKey("user/1/username") c := cache.New(flow) go c.Update(ctx, nil) @@ -267,10 +267,10 @@ func TestCache_flow_returns_null_should_return_nil(t *testing.T) { flow := dsmock.NewFlow( dsmock.YAMLData(`--- - key/1/field: null + user/1/username: null `), ) - myKey := dskey.MustKey("key/1/field") + myKey := dskey.MustKey("user/1/username") c := cache.New(flow) got, err := c.Get(ctx, myKey) @@ -290,12 +290,12 @@ func TestCache_flow_update_pushed_null_is_saved_as_nil(t *testing.T) { flow := dsmock.NewFlow( dsmock.YAMLData(`--- - key/1/field: value + user/1/username: value `), dsmock.NewCounter, ) counter := flow.Middlewares()[0].(*dsmock.Counter) - myKey := dskey.MustKey("key/1/field") + myKey := dskey.MustKey("user/1/username") c := cache.New(flow) waitForUpdated := make(chan struct{}) diff --git a/pkg/datastore/dsfetch/fields_generated.go b/pkg/datastore/dsfetch/fields_generated.go index 1ed0aac8..d7830e1b 100644 --- a/pkg/datastore/dsfetch/fields_generated.go +++ b/pkg/datastore/dsfetch/fields_generated.go @@ -8,6 +8,7 @@ import ( "strconv" "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dskey" + "github.com/OpenSlides/openslides-autoupdate-service/pkg/fastjson" ) // ValueBool is a lazy value from the datastore. @@ -334,9 +335,11 @@ func (v *ValueInt) execute(p []byte) error { } v.isNull = true } else { - if err := json.Unmarshal(p, &v.value); err != nil { + r, err := fastjson.DecodeInt(p) + if err != nil { return fmt.Errorf("decoding value %q: %w", p, err) } + v.value = r } for i := 0; i < len(v.lazies); i++ { @@ -416,9 +419,11 @@ func (v *ValueIntSlice) execute(p []byte) error { } v.isNull = true } else { - if err := json.Unmarshal(p, &v.value); err != nil { + r, err := fastjson.DecodeIntList(p) + if err != nil { return fmt.Errorf("decoding value %q: %w", p, err) } + v.value = r } for i := 0; i < len(v.lazies); i++ { @@ -840,7 +845,11 @@ func (v *ValueStringSlice) execute(p []byte) error { } func (r *Fetch) ActionWorker_Created(actionWorkerID int) *ValueInt { - key := dskey.Key{Collection: "action_worker", ID: actionWorkerID, Field: "created"} + key, err := dskey.FromParts("action_worker", actionWorkerID, "created") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -850,7 +859,11 @@ func (r *Fetch) ActionWorker_Created(actionWorkerID int) *ValueInt { } func (r *Fetch) ActionWorker_ID(actionWorkerID int) *ValueInt { - key := dskey.Key{Collection: "action_worker", ID: actionWorkerID, Field: "id"} + key, err := dskey.FromParts("action_worker", actionWorkerID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -860,7 +873,11 @@ func (r *Fetch) ActionWorker_ID(actionWorkerID int) *ValueInt { } func (r *Fetch) ActionWorker_Name(actionWorkerID int) *ValueString { - key := dskey.Key{Collection: "action_worker", ID: actionWorkerID, Field: "name"} + key, err := dskey.FromParts("action_worker", actionWorkerID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -870,7 +887,11 @@ func (r *Fetch) ActionWorker_Name(actionWorkerID int) *ValueString { } func (r *Fetch) ActionWorker_Result(actionWorkerID int) *ValueJSON { - key := dskey.Key{Collection: "action_worker", ID: actionWorkerID, Field: "result"} + key, err := dskey.FromParts("action_worker", actionWorkerID, "result") + if err != nil { + r.err = err + return &ValueJSON{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueJSON) } @@ -880,7 +901,11 @@ func (r *Fetch) ActionWorker_Result(actionWorkerID int) *ValueJSON { } func (r *Fetch) ActionWorker_State(actionWorkerID int) *ValueString { - key := dskey.Key{Collection: "action_worker", ID: actionWorkerID, Field: "state"} + key, err := dskey.FromParts("action_worker", actionWorkerID, "state") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -890,7 +915,11 @@ func (r *Fetch) ActionWorker_State(actionWorkerID int) *ValueString { } func (r *Fetch) ActionWorker_Timestamp(actionWorkerID int) *ValueInt { - key := dskey.Key{Collection: "action_worker", ID: actionWorkerID, Field: "timestamp"} + key, err := dskey.FromParts("action_worker", actionWorkerID, "timestamp") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -900,7 +929,11 @@ func (r *Fetch) ActionWorker_Timestamp(actionWorkerID int) *ValueInt { } func (r *Fetch) AgendaItem_ChildIDs(agendaItemID int) *ValueIntSlice { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "child_ids"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "child_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -910,7 +943,11 @@ func (r *Fetch) AgendaItem_ChildIDs(agendaItemID int) *ValueIntSlice { } func (r *Fetch) AgendaItem_Closed(agendaItemID int) *ValueBool { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "closed"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "closed") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -920,7 +957,11 @@ func (r *Fetch) AgendaItem_Closed(agendaItemID int) *ValueBool { } func (r *Fetch) AgendaItem_Comment(agendaItemID int) *ValueString { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "comment"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "comment") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -930,7 +971,11 @@ func (r *Fetch) AgendaItem_Comment(agendaItemID int) *ValueString { } func (r *Fetch) AgendaItem_ContentObjectID(agendaItemID int) *ValueString { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "content_object_id"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "content_object_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -940,7 +985,11 @@ func (r *Fetch) AgendaItem_ContentObjectID(agendaItemID int) *ValueString { } func (r *Fetch) AgendaItem_Duration(agendaItemID int) *ValueInt { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "duration"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "duration") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -950,7 +999,11 @@ func (r *Fetch) AgendaItem_Duration(agendaItemID int) *ValueInt { } func (r *Fetch) AgendaItem_ID(agendaItemID int) *ValueInt { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "id"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -960,7 +1013,11 @@ func (r *Fetch) AgendaItem_ID(agendaItemID int) *ValueInt { } func (r *Fetch) AgendaItem_IsHidden(agendaItemID int) *ValueBool { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "is_hidden"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "is_hidden") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -970,7 +1027,11 @@ func (r *Fetch) AgendaItem_IsHidden(agendaItemID int) *ValueBool { } func (r *Fetch) AgendaItem_IsInternal(agendaItemID int) *ValueBool { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "is_internal"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "is_internal") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -980,7 +1041,11 @@ func (r *Fetch) AgendaItem_IsInternal(agendaItemID int) *ValueBool { } func (r *Fetch) AgendaItem_ItemNumber(agendaItemID int) *ValueString { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "item_number"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "item_number") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -990,7 +1055,11 @@ func (r *Fetch) AgendaItem_ItemNumber(agendaItemID int) *ValueString { } func (r *Fetch) AgendaItem_Level(agendaItemID int) *ValueInt { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "level"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "level") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1000,7 +1069,11 @@ func (r *Fetch) AgendaItem_Level(agendaItemID int) *ValueInt { } func (r *Fetch) AgendaItem_MeetingID(agendaItemID int) *ValueInt { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "meeting_id"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1010,7 +1083,11 @@ func (r *Fetch) AgendaItem_MeetingID(agendaItemID int) *ValueInt { } func (r *Fetch) AgendaItem_ParentID(agendaItemID int) *ValueMaybeInt { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "parent_id"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "parent_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1020,7 +1097,11 @@ func (r *Fetch) AgendaItem_ParentID(agendaItemID int) *ValueMaybeInt { } func (r *Fetch) AgendaItem_ProjectionIDs(agendaItemID int) *ValueIntSlice { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "projection_ids"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1030,7 +1111,11 @@ func (r *Fetch) AgendaItem_ProjectionIDs(agendaItemID int) *ValueIntSlice { } func (r *Fetch) AgendaItem_TagIDs(agendaItemID int) *ValueIntSlice { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "tag_ids"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "tag_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1040,7 +1125,11 @@ func (r *Fetch) AgendaItem_TagIDs(agendaItemID int) *ValueIntSlice { } func (r *Fetch) AgendaItem_Type(agendaItemID int) *ValueString { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "type"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1050,7 +1139,11 @@ func (r *Fetch) AgendaItem_Type(agendaItemID int) *ValueString { } func (r *Fetch) AgendaItem_Weight(agendaItemID int) *ValueInt { - key := dskey.Key{Collection: "agenda_item", ID: agendaItemID, Field: "weight"} + key, err := dskey.FromParts("agenda_item", agendaItemID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1060,7 +1153,11 @@ func (r *Fetch) AgendaItem_Weight(agendaItemID int) *ValueInt { } func (r *Fetch) AssignmentCandidate_AssignmentID(assignmentCandidateID int) *ValueInt { - key := dskey.Key{Collection: "assignment_candidate", ID: assignmentCandidateID, Field: "assignment_id"} + key, err := dskey.FromParts("assignment_candidate", assignmentCandidateID, "assignment_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1070,7 +1167,11 @@ func (r *Fetch) AssignmentCandidate_AssignmentID(assignmentCandidateID int) *Val } func (r *Fetch) AssignmentCandidate_ID(assignmentCandidateID int) *ValueInt { - key := dskey.Key{Collection: "assignment_candidate", ID: assignmentCandidateID, Field: "id"} + key, err := dskey.FromParts("assignment_candidate", assignmentCandidateID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1080,7 +1181,11 @@ func (r *Fetch) AssignmentCandidate_ID(assignmentCandidateID int) *ValueInt { } func (r *Fetch) AssignmentCandidate_MeetingID(assignmentCandidateID int) *ValueInt { - key := dskey.Key{Collection: "assignment_candidate", ID: assignmentCandidateID, Field: "meeting_id"} + key, err := dskey.FromParts("assignment_candidate", assignmentCandidateID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1090,7 +1195,11 @@ func (r *Fetch) AssignmentCandidate_MeetingID(assignmentCandidateID int) *ValueI } func (r *Fetch) AssignmentCandidate_MeetingUserID(assignmentCandidateID int) *ValueMaybeInt { - key := dskey.Key{Collection: "assignment_candidate", ID: assignmentCandidateID, Field: "meeting_user_id"} + key, err := dskey.FromParts("assignment_candidate", assignmentCandidateID, "meeting_user_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1100,7 +1209,11 @@ func (r *Fetch) AssignmentCandidate_MeetingUserID(assignmentCandidateID int) *Va } func (r *Fetch) AssignmentCandidate_Weight(assignmentCandidateID int) *ValueInt { - key := dskey.Key{Collection: "assignment_candidate", ID: assignmentCandidateID, Field: "weight"} + key, err := dskey.FromParts("assignment_candidate", assignmentCandidateID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1110,7 +1223,11 @@ func (r *Fetch) AssignmentCandidate_Weight(assignmentCandidateID int) *ValueInt } func (r *Fetch) Assignment_AgendaItemID(assignmentID int) *ValueMaybeInt { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "agenda_item_id"} + key, err := dskey.FromParts("assignment", assignmentID, "agenda_item_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1120,7 +1237,11 @@ func (r *Fetch) Assignment_AgendaItemID(assignmentID int) *ValueMaybeInt { } func (r *Fetch) Assignment_AttachmentIDs(assignmentID int) *ValueIntSlice { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "attachment_ids"} + key, err := dskey.FromParts("assignment", assignmentID, "attachment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1130,7 +1251,11 @@ func (r *Fetch) Assignment_AttachmentIDs(assignmentID int) *ValueIntSlice { } func (r *Fetch) Assignment_CandidateIDs(assignmentID int) *ValueIntSlice { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "candidate_ids"} + key, err := dskey.FromParts("assignment", assignmentID, "candidate_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1140,7 +1265,11 @@ func (r *Fetch) Assignment_CandidateIDs(assignmentID int) *ValueIntSlice { } func (r *Fetch) Assignment_DefaultPollDescription(assignmentID int) *ValueString { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "default_poll_description"} + key, err := dskey.FromParts("assignment", assignmentID, "default_poll_description") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1150,7 +1279,11 @@ func (r *Fetch) Assignment_DefaultPollDescription(assignmentID int) *ValueString } func (r *Fetch) Assignment_Description(assignmentID int) *ValueString { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "description"} + key, err := dskey.FromParts("assignment", assignmentID, "description") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1160,7 +1293,11 @@ func (r *Fetch) Assignment_Description(assignmentID int) *ValueString { } func (r *Fetch) Assignment_ID(assignmentID int) *ValueInt { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "id"} + key, err := dskey.FromParts("assignment", assignmentID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1170,7 +1307,11 @@ func (r *Fetch) Assignment_ID(assignmentID int) *ValueInt { } func (r *Fetch) Assignment_ListOfSpeakersID(assignmentID int) *ValueInt { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "list_of_speakers_id"} + key, err := dskey.FromParts("assignment", assignmentID, "list_of_speakers_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1180,7 +1321,11 @@ func (r *Fetch) Assignment_ListOfSpeakersID(assignmentID int) *ValueInt { } func (r *Fetch) Assignment_MeetingID(assignmentID int) *ValueInt { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "meeting_id"} + key, err := dskey.FromParts("assignment", assignmentID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1190,7 +1335,11 @@ func (r *Fetch) Assignment_MeetingID(assignmentID int) *ValueInt { } func (r *Fetch) Assignment_NumberPollCandidates(assignmentID int) *ValueBool { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "number_poll_candidates"} + key, err := dskey.FromParts("assignment", assignmentID, "number_poll_candidates") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -1200,7 +1349,11 @@ func (r *Fetch) Assignment_NumberPollCandidates(assignmentID int) *ValueBool { } func (r *Fetch) Assignment_OpenPosts(assignmentID int) *ValueInt { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "open_posts"} + key, err := dskey.FromParts("assignment", assignmentID, "open_posts") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1210,7 +1363,11 @@ func (r *Fetch) Assignment_OpenPosts(assignmentID int) *ValueInt { } func (r *Fetch) Assignment_Phase(assignmentID int) *ValueString { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "phase"} + key, err := dskey.FromParts("assignment", assignmentID, "phase") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1220,7 +1377,11 @@ func (r *Fetch) Assignment_Phase(assignmentID int) *ValueString { } func (r *Fetch) Assignment_PollIDs(assignmentID int) *ValueIntSlice { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "poll_ids"} + key, err := dskey.FromParts("assignment", assignmentID, "poll_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1230,7 +1391,11 @@ func (r *Fetch) Assignment_PollIDs(assignmentID int) *ValueIntSlice { } func (r *Fetch) Assignment_ProjectionIDs(assignmentID int) *ValueIntSlice { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "projection_ids"} + key, err := dskey.FromParts("assignment", assignmentID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1240,7 +1405,11 @@ func (r *Fetch) Assignment_ProjectionIDs(assignmentID int) *ValueIntSlice { } func (r *Fetch) Assignment_SequentialNumber(assignmentID int) *ValueInt { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "sequential_number"} + key, err := dskey.FromParts("assignment", assignmentID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1250,7 +1419,11 @@ func (r *Fetch) Assignment_SequentialNumber(assignmentID int) *ValueInt { } func (r *Fetch) Assignment_TagIDs(assignmentID int) *ValueIntSlice { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "tag_ids"} + key, err := dskey.FromParts("assignment", assignmentID, "tag_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1260,7 +1433,11 @@ func (r *Fetch) Assignment_TagIDs(assignmentID int) *ValueIntSlice { } func (r *Fetch) Assignment_Title(assignmentID int) *ValueString { - key := dskey.Key{Collection: "assignment", ID: assignmentID, Field: "title"} + key, err := dskey.FromParts("assignment", assignmentID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1270,7 +1447,11 @@ func (r *Fetch) Assignment_Title(assignmentID int) *ValueString { } func (r *Fetch) ChatGroup_ChatMessageIDs(chatGroupID int) *ValueIntSlice { - key := dskey.Key{Collection: "chat_group", ID: chatGroupID, Field: "chat_message_ids"} + key, err := dskey.FromParts("chat_group", chatGroupID, "chat_message_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1280,7 +1461,11 @@ func (r *Fetch) ChatGroup_ChatMessageIDs(chatGroupID int) *ValueIntSlice { } func (r *Fetch) ChatGroup_ID(chatGroupID int) *ValueInt { - key := dskey.Key{Collection: "chat_group", ID: chatGroupID, Field: "id"} + key, err := dskey.FromParts("chat_group", chatGroupID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1290,7 +1475,11 @@ func (r *Fetch) ChatGroup_ID(chatGroupID int) *ValueInt { } func (r *Fetch) ChatGroup_MeetingID(chatGroupID int) *ValueInt { - key := dskey.Key{Collection: "chat_group", ID: chatGroupID, Field: "meeting_id"} + key, err := dskey.FromParts("chat_group", chatGroupID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1300,7 +1489,11 @@ func (r *Fetch) ChatGroup_MeetingID(chatGroupID int) *ValueInt { } func (r *Fetch) ChatGroup_Name(chatGroupID int) *ValueString { - key := dskey.Key{Collection: "chat_group", ID: chatGroupID, Field: "name"} + key, err := dskey.FromParts("chat_group", chatGroupID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1310,7 +1503,11 @@ func (r *Fetch) ChatGroup_Name(chatGroupID int) *ValueString { } func (r *Fetch) ChatGroup_ReadGroupIDs(chatGroupID int) *ValueIntSlice { - key := dskey.Key{Collection: "chat_group", ID: chatGroupID, Field: "read_group_ids"} + key, err := dskey.FromParts("chat_group", chatGroupID, "read_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1320,7 +1517,11 @@ func (r *Fetch) ChatGroup_ReadGroupIDs(chatGroupID int) *ValueIntSlice { } func (r *Fetch) ChatGroup_Weight(chatGroupID int) *ValueInt { - key := dskey.Key{Collection: "chat_group", ID: chatGroupID, Field: "weight"} + key, err := dskey.FromParts("chat_group", chatGroupID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1330,7 +1531,11 @@ func (r *Fetch) ChatGroup_Weight(chatGroupID int) *ValueInt { } func (r *Fetch) ChatGroup_WriteGroupIDs(chatGroupID int) *ValueIntSlice { - key := dskey.Key{Collection: "chat_group", ID: chatGroupID, Field: "write_group_ids"} + key, err := dskey.FromParts("chat_group", chatGroupID, "write_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1340,7 +1545,11 @@ func (r *Fetch) ChatGroup_WriteGroupIDs(chatGroupID int) *ValueIntSlice { } func (r *Fetch) ChatMessage_ChatGroupID(chatMessageID int) *ValueInt { - key := dskey.Key{Collection: "chat_message", ID: chatMessageID, Field: "chat_group_id"} + key, err := dskey.FromParts("chat_message", chatMessageID, "chat_group_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1350,7 +1559,11 @@ func (r *Fetch) ChatMessage_ChatGroupID(chatMessageID int) *ValueInt { } func (r *Fetch) ChatMessage_Content(chatMessageID int) *ValueString { - key := dskey.Key{Collection: "chat_message", ID: chatMessageID, Field: "content"} + key, err := dskey.FromParts("chat_message", chatMessageID, "content") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1360,7 +1573,11 @@ func (r *Fetch) ChatMessage_Content(chatMessageID int) *ValueString { } func (r *Fetch) ChatMessage_Created(chatMessageID int) *ValueInt { - key := dskey.Key{Collection: "chat_message", ID: chatMessageID, Field: "created"} + key, err := dskey.FromParts("chat_message", chatMessageID, "created") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1370,7 +1587,11 @@ func (r *Fetch) ChatMessage_Created(chatMessageID int) *ValueInt { } func (r *Fetch) ChatMessage_ID(chatMessageID int) *ValueInt { - key := dskey.Key{Collection: "chat_message", ID: chatMessageID, Field: "id"} + key, err := dskey.FromParts("chat_message", chatMessageID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1380,7 +1601,11 @@ func (r *Fetch) ChatMessage_ID(chatMessageID int) *ValueInt { } func (r *Fetch) ChatMessage_MeetingID(chatMessageID int) *ValueInt { - key := dskey.Key{Collection: "chat_message", ID: chatMessageID, Field: "meeting_id"} + key, err := dskey.FromParts("chat_message", chatMessageID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1390,7 +1615,11 @@ func (r *Fetch) ChatMessage_MeetingID(chatMessageID int) *ValueInt { } func (r *Fetch) ChatMessage_MeetingUserID(chatMessageID int) *ValueInt { - key := dskey.Key{Collection: "chat_message", ID: chatMessageID, Field: "meeting_user_id"} + key, err := dskey.FromParts("chat_message", chatMessageID, "meeting_user_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1400,7 +1629,11 @@ func (r *Fetch) ChatMessage_MeetingUserID(chatMessageID int) *ValueInt { } func (r *Fetch) Committee_DefaultMeetingID(committeeID int) *ValueMaybeInt { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "default_meeting_id"} + key, err := dskey.FromParts("committee", committeeID, "default_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1410,7 +1643,11 @@ func (r *Fetch) Committee_DefaultMeetingID(committeeID int) *ValueMaybeInt { } func (r *Fetch) Committee_Description(committeeID int) *ValueString { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "description"} + key, err := dskey.FromParts("committee", committeeID, "description") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1420,7 +1657,11 @@ func (r *Fetch) Committee_Description(committeeID int) *ValueString { } func (r *Fetch) Committee_ExternalID(committeeID int) *ValueString { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "external_id"} + key, err := dskey.FromParts("committee", committeeID, "external_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1430,7 +1671,11 @@ func (r *Fetch) Committee_ExternalID(committeeID int) *ValueString { } func (r *Fetch) Committee_ForwardToCommitteeIDs(committeeID int) *ValueIntSlice { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "forward_to_committee_ids"} + key, err := dskey.FromParts("committee", committeeID, "forward_to_committee_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1440,7 +1685,11 @@ func (r *Fetch) Committee_ForwardToCommitteeIDs(committeeID int) *ValueIntSlice } func (r *Fetch) Committee_ForwardingUserID(committeeID int) *ValueMaybeInt { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "forwarding_user_id"} + key, err := dskey.FromParts("committee", committeeID, "forwarding_user_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1450,7 +1699,11 @@ func (r *Fetch) Committee_ForwardingUserID(committeeID int) *ValueMaybeInt { } func (r *Fetch) Committee_ID(committeeID int) *ValueInt { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "id"} + key, err := dskey.FromParts("committee", committeeID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1460,7 +1713,11 @@ func (r *Fetch) Committee_ID(committeeID int) *ValueInt { } func (r *Fetch) Committee_ManagerIDs(committeeID int) *ValueIntSlice { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "manager_ids"} + key, err := dskey.FromParts("committee", committeeID, "manager_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1470,7 +1727,11 @@ func (r *Fetch) Committee_ManagerIDs(committeeID int) *ValueIntSlice { } func (r *Fetch) Committee_MeetingIDs(committeeID int) *ValueIntSlice { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "meeting_ids"} + key, err := dskey.FromParts("committee", committeeID, "meeting_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1480,7 +1741,11 @@ func (r *Fetch) Committee_MeetingIDs(committeeID int) *ValueIntSlice { } func (r *Fetch) Committee_Name(committeeID int) *ValueString { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "name"} + key, err := dskey.FromParts("committee", committeeID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1490,7 +1755,11 @@ func (r *Fetch) Committee_Name(committeeID int) *ValueString { } func (r *Fetch) Committee_OrganizationID(committeeID int) *ValueInt { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "organization_id"} + key, err := dskey.FromParts("committee", committeeID, "organization_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1500,7 +1769,11 @@ func (r *Fetch) Committee_OrganizationID(committeeID int) *ValueInt { } func (r *Fetch) Committee_OrganizationTagIDs(committeeID int) *ValueIntSlice { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "organization_tag_ids"} + key, err := dskey.FromParts("committee", committeeID, "organization_tag_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1510,7 +1783,11 @@ func (r *Fetch) Committee_OrganizationTagIDs(committeeID int) *ValueIntSlice { } func (r *Fetch) Committee_ReceiveForwardingsFromCommitteeIDs(committeeID int) *ValueIntSlice { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "receive_forwardings_from_committee_ids"} + key, err := dskey.FromParts("committee", committeeID, "receive_forwardings_from_committee_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1520,7 +1797,11 @@ func (r *Fetch) Committee_ReceiveForwardingsFromCommitteeIDs(committeeID int) *V } func (r *Fetch) Committee_UserIDs(committeeID int) *ValueIntSlice { - key := dskey.Key{Collection: "committee", ID: committeeID, Field: "user_ids"} + key, err := dskey.FromParts("committee", committeeID, "user_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1530,7 +1811,11 @@ func (r *Fetch) Committee_UserIDs(committeeID int) *ValueIntSlice { } func (r *Fetch) Group_AdminGroupForMeetingID(groupID int) *ValueMaybeInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "admin_group_for_meeting_id"} + key, err := dskey.FromParts("group", groupID, "admin_group_for_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1540,7 +1825,11 @@ func (r *Fetch) Group_AdminGroupForMeetingID(groupID int) *ValueMaybeInt { } func (r *Fetch) Group_DefaultGroupForMeetingID(groupID int) *ValueMaybeInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "default_group_for_meeting_id"} + key, err := dskey.FromParts("group", groupID, "default_group_for_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1550,7 +1839,11 @@ func (r *Fetch) Group_DefaultGroupForMeetingID(groupID int) *ValueMaybeInt { } func (r *Fetch) Group_ExternalID(groupID int) *ValueString { - key := dskey.Key{Collection: "group", ID: groupID, Field: "external_id"} + key, err := dskey.FromParts("group", groupID, "external_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1560,7 +1853,11 @@ func (r *Fetch) Group_ExternalID(groupID int) *ValueString { } func (r *Fetch) Group_ID(groupID int) *ValueInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "id"} + key, err := dskey.FromParts("group", groupID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1570,7 +1867,11 @@ func (r *Fetch) Group_ID(groupID int) *ValueInt { } func (r *Fetch) Group_MediafileAccessGroupIDs(groupID int) *ValueIntSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "mediafile_access_group_ids"} + key, err := dskey.FromParts("group", groupID, "mediafile_access_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1580,7 +1881,11 @@ func (r *Fetch) Group_MediafileAccessGroupIDs(groupID int) *ValueIntSlice { } func (r *Fetch) Group_MediafileInheritedAccessGroupIDs(groupID int) *ValueIntSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "mediafile_inherited_access_group_ids"} + key, err := dskey.FromParts("group", groupID, "mediafile_inherited_access_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1590,7 +1895,11 @@ func (r *Fetch) Group_MediafileInheritedAccessGroupIDs(groupID int) *ValueIntSli } func (r *Fetch) Group_MeetingID(groupID int) *ValueInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "meeting_id"} + key, err := dskey.FromParts("group", groupID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1600,7 +1909,11 @@ func (r *Fetch) Group_MeetingID(groupID int) *ValueInt { } func (r *Fetch) Group_MeetingUserIDs(groupID int) *ValueIntSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "meeting_user_ids"} + key, err := dskey.FromParts("group", groupID, "meeting_user_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1610,7 +1923,11 @@ func (r *Fetch) Group_MeetingUserIDs(groupID int) *ValueIntSlice { } func (r *Fetch) Group_Name(groupID int) *ValueString { - key := dskey.Key{Collection: "group", ID: groupID, Field: "name"} + key, err := dskey.FromParts("group", groupID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1620,7 +1937,11 @@ func (r *Fetch) Group_Name(groupID int) *ValueString { } func (r *Fetch) Group_Permissions(groupID int) *ValueStringSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "permissions"} + key, err := dskey.FromParts("group", groupID, "permissions") + if err != nil { + r.err = err + return &ValueStringSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueStringSlice) } @@ -1630,7 +1951,11 @@ func (r *Fetch) Group_Permissions(groupID int) *ValueStringSlice { } func (r *Fetch) Group_PollIDs(groupID int) *ValueIntSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "poll_ids"} + key, err := dskey.FromParts("group", groupID, "poll_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1640,7 +1965,11 @@ func (r *Fetch) Group_PollIDs(groupID int) *ValueIntSlice { } func (r *Fetch) Group_ReadChatGroupIDs(groupID int) *ValueIntSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "read_chat_group_ids"} + key, err := dskey.FromParts("group", groupID, "read_chat_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1650,7 +1979,11 @@ func (r *Fetch) Group_ReadChatGroupIDs(groupID int) *ValueIntSlice { } func (r *Fetch) Group_ReadCommentSectionIDs(groupID int) *ValueIntSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "read_comment_section_ids"} + key, err := dskey.FromParts("group", groupID, "read_comment_section_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1660,7 +1993,11 @@ func (r *Fetch) Group_ReadCommentSectionIDs(groupID int) *ValueIntSlice { } func (r *Fetch) Group_UsedAsAssignmentPollDefaultID(groupID int) *ValueMaybeInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "used_as_assignment_poll_default_id"} + key, err := dskey.FromParts("group", groupID, "used_as_assignment_poll_default_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1670,7 +2007,11 @@ func (r *Fetch) Group_UsedAsAssignmentPollDefaultID(groupID int) *ValueMaybeInt } func (r *Fetch) Group_UsedAsMotionPollDefaultID(groupID int) *ValueMaybeInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "used_as_motion_poll_default_id"} + key, err := dskey.FromParts("group", groupID, "used_as_motion_poll_default_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1680,7 +2021,11 @@ func (r *Fetch) Group_UsedAsMotionPollDefaultID(groupID int) *ValueMaybeInt { } func (r *Fetch) Group_UsedAsPollDefaultID(groupID int) *ValueMaybeInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "used_as_poll_default_id"} + key, err := dskey.FromParts("group", groupID, "used_as_poll_default_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1690,7 +2035,11 @@ func (r *Fetch) Group_UsedAsPollDefaultID(groupID int) *ValueMaybeInt { } func (r *Fetch) Group_UsedAsTopicPollDefaultID(groupID int) *ValueMaybeInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "used_as_topic_poll_default_id"} + key, err := dskey.FromParts("group", groupID, "used_as_topic_poll_default_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1700,7 +2049,11 @@ func (r *Fetch) Group_UsedAsTopicPollDefaultID(groupID int) *ValueMaybeInt { } func (r *Fetch) Group_Weight(groupID int) *ValueInt { - key := dskey.Key{Collection: "group", ID: groupID, Field: "weight"} + key, err := dskey.FromParts("group", groupID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1710,7 +2063,11 @@ func (r *Fetch) Group_Weight(groupID int) *ValueInt { } func (r *Fetch) Group_WriteChatGroupIDs(groupID int) *ValueIntSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "write_chat_group_ids"} + key, err := dskey.FromParts("group", groupID, "write_chat_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1720,7 +2077,11 @@ func (r *Fetch) Group_WriteChatGroupIDs(groupID int) *ValueIntSlice { } func (r *Fetch) Group_WriteCommentSectionIDs(groupID int) *ValueIntSlice { - key := dskey.Key{Collection: "group", ID: groupID, Field: "write_comment_section_ids"} + key, err := dskey.FromParts("group", groupID, "write_comment_section_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1730,7 +2091,11 @@ func (r *Fetch) Group_WriteCommentSectionIDs(groupID int) *ValueIntSlice { } func (r *Fetch) ListOfSpeakers_Closed(listOfSpeakersID int) *ValueBool { - key := dskey.Key{Collection: "list_of_speakers", ID: listOfSpeakersID, Field: "closed"} + key, err := dskey.FromParts("list_of_speakers", listOfSpeakersID, "closed") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -1740,7 +2105,11 @@ func (r *Fetch) ListOfSpeakers_Closed(listOfSpeakersID int) *ValueBool { } func (r *Fetch) ListOfSpeakers_ContentObjectID(listOfSpeakersID int) *ValueString { - key := dskey.Key{Collection: "list_of_speakers", ID: listOfSpeakersID, Field: "content_object_id"} + key, err := dskey.FromParts("list_of_speakers", listOfSpeakersID, "content_object_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1750,7 +2119,11 @@ func (r *Fetch) ListOfSpeakers_ContentObjectID(listOfSpeakersID int) *ValueStrin } func (r *Fetch) ListOfSpeakers_ID(listOfSpeakersID int) *ValueInt { - key := dskey.Key{Collection: "list_of_speakers", ID: listOfSpeakersID, Field: "id"} + key, err := dskey.FromParts("list_of_speakers", listOfSpeakersID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1760,7 +2133,11 @@ func (r *Fetch) ListOfSpeakers_ID(listOfSpeakersID int) *ValueInt { } func (r *Fetch) ListOfSpeakers_MeetingID(listOfSpeakersID int) *ValueInt { - key := dskey.Key{Collection: "list_of_speakers", ID: listOfSpeakersID, Field: "meeting_id"} + key, err := dskey.FromParts("list_of_speakers", listOfSpeakersID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1770,7 +2147,11 @@ func (r *Fetch) ListOfSpeakers_MeetingID(listOfSpeakersID int) *ValueInt { } func (r *Fetch) ListOfSpeakers_ProjectionIDs(listOfSpeakersID int) *ValueIntSlice { - key := dskey.Key{Collection: "list_of_speakers", ID: listOfSpeakersID, Field: "projection_ids"} + key, err := dskey.FromParts("list_of_speakers", listOfSpeakersID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1780,7 +2161,11 @@ func (r *Fetch) ListOfSpeakers_ProjectionIDs(listOfSpeakersID int) *ValueIntSlic } func (r *Fetch) ListOfSpeakers_SequentialNumber(listOfSpeakersID int) *ValueInt { - key := dskey.Key{Collection: "list_of_speakers", ID: listOfSpeakersID, Field: "sequential_number"} + key, err := dskey.FromParts("list_of_speakers", listOfSpeakersID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1790,7 +2175,11 @@ func (r *Fetch) ListOfSpeakers_SequentialNumber(listOfSpeakersID int) *ValueInt } func (r *Fetch) ListOfSpeakers_SpeakerIDs(listOfSpeakersID int) *ValueIntSlice { - key := dskey.Key{Collection: "list_of_speakers", ID: listOfSpeakersID, Field: "speaker_ids"} + key, err := dskey.FromParts("list_of_speakers", listOfSpeakersID, "speaker_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1800,7 +2189,11 @@ func (r *Fetch) ListOfSpeakers_SpeakerIDs(listOfSpeakersID int) *ValueIntSlice { } func (r *Fetch) Mediafile_AccessGroupIDs(mediafileID int) *ValueIntSlice { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "access_group_ids"} + key, err := dskey.FromParts("mediafile", mediafileID, "access_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1810,7 +2203,11 @@ func (r *Fetch) Mediafile_AccessGroupIDs(mediafileID int) *ValueIntSlice { } func (r *Fetch) Mediafile_AttachmentIDs(mediafileID int) *ValueStringSlice { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "attachment_ids"} + key, err := dskey.FromParts("mediafile", mediafileID, "attachment_ids") + if err != nil { + r.err = err + return &ValueStringSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueStringSlice) } @@ -1820,7 +2217,11 @@ func (r *Fetch) Mediafile_AttachmentIDs(mediafileID int) *ValueStringSlice { } func (r *Fetch) Mediafile_ChildIDs(mediafileID int) *ValueIntSlice { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "child_ids"} + key, err := dskey.FromParts("mediafile", mediafileID, "child_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1830,7 +2231,11 @@ func (r *Fetch) Mediafile_ChildIDs(mediafileID int) *ValueIntSlice { } func (r *Fetch) Mediafile_CreateTimestamp(mediafileID int) *ValueInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "create_timestamp"} + key, err := dskey.FromParts("mediafile", mediafileID, "create_timestamp") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1840,7 +2245,11 @@ func (r *Fetch) Mediafile_CreateTimestamp(mediafileID int) *ValueInt { } func (r *Fetch) Mediafile_Filename(mediafileID int) *ValueString { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "filename"} + key, err := dskey.FromParts("mediafile", mediafileID, "filename") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1850,7 +2259,11 @@ func (r *Fetch) Mediafile_Filename(mediafileID int) *ValueString { } func (r *Fetch) Mediafile_Filesize(mediafileID int) *ValueInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "filesize"} + key, err := dskey.FromParts("mediafile", mediafileID, "filesize") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1860,7 +2273,11 @@ func (r *Fetch) Mediafile_Filesize(mediafileID int) *ValueInt { } func (r *Fetch) Mediafile_ID(mediafileID int) *ValueInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "id"} + key, err := dskey.FromParts("mediafile", mediafileID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -1870,7 +2287,11 @@ func (r *Fetch) Mediafile_ID(mediafileID int) *ValueInt { } func (r *Fetch) Mediafile_InheritedAccessGroupIDs(mediafileID int) *ValueIntSlice { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "inherited_access_group_ids"} + key, err := dskey.FromParts("mediafile", mediafileID, "inherited_access_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1880,7 +2301,11 @@ func (r *Fetch) Mediafile_InheritedAccessGroupIDs(mediafileID int) *ValueIntSlic } func (r *Fetch) Mediafile_IsDirectory(mediafileID int) *ValueBool { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "is_directory"} + key, err := dskey.FromParts("mediafile", mediafileID, "is_directory") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -1890,7 +2315,11 @@ func (r *Fetch) Mediafile_IsDirectory(mediafileID int) *ValueBool { } func (r *Fetch) Mediafile_IsPublic(mediafileID int) *ValueBool { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "is_public"} + key, err := dskey.FromParts("mediafile", mediafileID, "is_public") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -1900,7 +2329,11 @@ func (r *Fetch) Mediafile_IsPublic(mediafileID int) *ValueBool { } func (r *Fetch) Mediafile_ListOfSpeakersID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "list_of_speakers_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "list_of_speakers_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1910,7 +2343,11 @@ func (r *Fetch) Mediafile_ListOfSpeakersID(mediafileID int) *ValueMaybeInt { } func (r *Fetch) Mediafile_Mimetype(mediafileID int) *ValueString { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "mimetype"} + key, err := dskey.FromParts("mediafile", mediafileID, "mimetype") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1920,7 +2357,11 @@ func (r *Fetch) Mediafile_Mimetype(mediafileID int) *ValueString { } func (r *Fetch) Mediafile_OwnerID(mediafileID int) *ValueString { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "owner_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "owner_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1930,7 +2371,11 @@ func (r *Fetch) Mediafile_OwnerID(mediafileID int) *ValueString { } func (r *Fetch) Mediafile_ParentID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "parent_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "parent_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1940,7 +2385,11 @@ func (r *Fetch) Mediafile_ParentID(mediafileID int) *ValueMaybeInt { } func (r *Fetch) Mediafile_PdfInformation(mediafileID int) *ValueJSON { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "pdf_information"} + key, err := dskey.FromParts("mediafile", mediafileID, "pdf_information") + if err != nil { + r.err = err + return &ValueJSON{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueJSON) } @@ -1950,7 +2399,11 @@ func (r *Fetch) Mediafile_PdfInformation(mediafileID int) *ValueJSON { } func (r *Fetch) Mediafile_ProjectionIDs(mediafileID int) *ValueIntSlice { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "projection_ids"} + key, err := dskey.FromParts("mediafile", mediafileID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -1960,7 +2413,11 @@ func (r *Fetch) Mediafile_ProjectionIDs(mediafileID int) *ValueIntSlice { } func (r *Fetch) Mediafile_Title(mediafileID int) *ValueString { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "title"} + key, err := dskey.FromParts("mediafile", mediafileID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1970,7 +2427,11 @@ func (r *Fetch) Mediafile_Title(mediafileID int) *ValueString { } func (r *Fetch) Mediafile_Token(mediafileID int) *ValueString { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "token"} + key, err := dskey.FromParts("mediafile", mediafileID, "token") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -1980,7 +2441,11 @@ func (r *Fetch) Mediafile_Token(mediafileID int) *ValueString { } func (r *Fetch) Mediafile_UsedAsFontBoldInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_font_bold_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_font_bold_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -1990,7 +2455,11 @@ func (r *Fetch) Mediafile_UsedAsFontBoldInMeetingID(mediafileID int) *ValueMaybe } func (r *Fetch) Mediafile_UsedAsFontBoldItalicInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_font_bold_italic_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_font_bold_italic_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2000,7 +2469,11 @@ func (r *Fetch) Mediafile_UsedAsFontBoldItalicInMeetingID(mediafileID int) *Valu } func (r *Fetch) Mediafile_UsedAsFontChyronSpeakerNameInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_font_chyron_speaker_name_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_font_chyron_speaker_name_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2010,7 +2483,11 @@ func (r *Fetch) Mediafile_UsedAsFontChyronSpeakerNameInMeetingID(mediafileID int } func (r *Fetch) Mediafile_UsedAsFontItalicInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_font_italic_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_font_italic_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2020,7 +2497,11 @@ func (r *Fetch) Mediafile_UsedAsFontItalicInMeetingID(mediafileID int) *ValueMay } func (r *Fetch) Mediafile_UsedAsFontMonospaceInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_font_monospace_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_font_monospace_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2030,7 +2511,11 @@ func (r *Fetch) Mediafile_UsedAsFontMonospaceInMeetingID(mediafileID int) *Value } func (r *Fetch) Mediafile_UsedAsFontProjectorH1InMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_font_projector_h1_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_font_projector_h1_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2040,7 +2525,11 @@ func (r *Fetch) Mediafile_UsedAsFontProjectorH1InMeetingID(mediafileID int) *Val } func (r *Fetch) Mediafile_UsedAsFontProjectorH2InMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_font_projector_h2_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_font_projector_h2_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2050,7 +2539,11 @@ func (r *Fetch) Mediafile_UsedAsFontProjectorH2InMeetingID(mediafileID int) *Val } func (r *Fetch) Mediafile_UsedAsFontRegularInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_font_regular_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_font_regular_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2060,7 +2553,11 @@ func (r *Fetch) Mediafile_UsedAsFontRegularInMeetingID(mediafileID int) *ValueMa } func (r *Fetch) Mediafile_UsedAsLogoPdfBallotPaperInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_logo_pdf_ballot_paper_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_logo_pdf_ballot_paper_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2070,7 +2567,11 @@ func (r *Fetch) Mediafile_UsedAsLogoPdfBallotPaperInMeetingID(mediafileID int) * } func (r *Fetch) Mediafile_UsedAsLogoPdfFooterLInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_logo_pdf_footer_l_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_logo_pdf_footer_l_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2080,7 +2581,11 @@ func (r *Fetch) Mediafile_UsedAsLogoPdfFooterLInMeetingID(mediafileID int) *Valu } func (r *Fetch) Mediafile_UsedAsLogoPdfFooterRInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_logo_pdf_footer_r_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_logo_pdf_footer_r_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2090,7 +2595,11 @@ func (r *Fetch) Mediafile_UsedAsLogoPdfFooterRInMeetingID(mediafileID int) *Valu } func (r *Fetch) Mediafile_UsedAsLogoPdfHeaderLInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_logo_pdf_header_l_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_logo_pdf_header_l_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2100,7 +2609,11 @@ func (r *Fetch) Mediafile_UsedAsLogoPdfHeaderLInMeetingID(mediafileID int) *Valu } func (r *Fetch) Mediafile_UsedAsLogoPdfHeaderRInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_logo_pdf_header_r_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_logo_pdf_header_r_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2110,7 +2623,11 @@ func (r *Fetch) Mediafile_UsedAsLogoPdfHeaderRInMeetingID(mediafileID int) *Valu } func (r *Fetch) Mediafile_UsedAsLogoProjectorHeaderInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_logo_projector_header_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_logo_projector_header_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2120,7 +2637,11 @@ func (r *Fetch) Mediafile_UsedAsLogoProjectorHeaderInMeetingID(mediafileID int) } func (r *Fetch) Mediafile_UsedAsLogoProjectorMainInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_logo_projector_main_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_logo_projector_main_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2130,7 +2651,11 @@ func (r *Fetch) Mediafile_UsedAsLogoProjectorMainInMeetingID(mediafileID int) *V } func (r *Fetch) Mediafile_UsedAsLogoWebHeaderInMeetingID(mediafileID int) *ValueMaybeInt { - key := dskey.Key{Collection: "mediafile", ID: mediafileID, Field: "used_as_logo_web_header_in_meeting_id"} + key, err := dskey.FromParts("mediafile", mediafileID, "used_as_logo_web_header_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2140,7 +2665,11 @@ func (r *Fetch) Mediafile_UsedAsLogoWebHeaderInMeetingID(mediafileID int) *Value } func (r *Fetch) MeetingUser_AboutMe(meetingUserID int) *ValueString { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "about_me"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "about_me") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2150,7 +2679,11 @@ func (r *Fetch) MeetingUser_AboutMe(meetingUserID int) *ValueString { } func (r *Fetch) MeetingUser_AssignmentCandidateIDs(meetingUserID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "assignment_candidate_ids"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "assignment_candidate_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2160,7 +2693,11 @@ func (r *Fetch) MeetingUser_AssignmentCandidateIDs(meetingUserID int) *ValueIntS } func (r *Fetch) MeetingUser_ChatMessageIDs(meetingUserID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "chat_message_ids"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "chat_message_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2170,7 +2707,11 @@ func (r *Fetch) MeetingUser_ChatMessageIDs(meetingUserID int) *ValueIntSlice { } func (r *Fetch) MeetingUser_Comment(meetingUserID int) *ValueString { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "comment"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "comment") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2180,7 +2721,11 @@ func (r *Fetch) MeetingUser_Comment(meetingUserID int) *ValueString { } func (r *Fetch) MeetingUser_GroupIDs(meetingUserID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "group_ids"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2190,7 +2735,11 @@ func (r *Fetch) MeetingUser_GroupIDs(meetingUserID int) *ValueIntSlice { } func (r *Fetch) MeetingUser_ID(meetingUserID int) *ValueInt { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "id"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2200,7 +2749,11 @@ func (r *Fetch) MeetingUser_ID(meetingUserID int) *ValueInt { } func (r *Fetch) MeetingUser_MeetingID(meetingUserID int) *ValueInt { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "meeting_id"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2210,7 +2763,11 @@ func (r *Fetch) MeetingUser_MeetingID(meetingUserID int) *ValueInt { } func (r *Fetch) MeetingUser_MotionSubmitterIDs(meetingUserID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "motion_submitter_ids"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "motion_submitter_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2220,7 +2777,11 @@ func (r *Fetch) MeetingUser_MotionSubmitterIDs(meetingUserID int) *ValueIntSlice } func (r *Fetch) MeetingUser_Number(meetingUserID int) *ValueString { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "number"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "number") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2230,7 +2791,11 @@ func (r *Fetch) MeetingUser_Number(meetingUserID int) *ValueString { } func (r *Fetch) MeetingUser_PersonalNoteIDs(meetingUserID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "personal_note_ids"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "personal_note_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2240,7 +2805,11 @@ func (r *Fetch) MeetingUser_PersonalNoteIDs(meetingUserID int) *ValueIntSlice { } func (r *Fetch) MeetingUser_SpeakerIDs(meetingUserID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "speaker_ids"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "speaker_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2250,7 +2819,11 @@ func (r *Fetch) MeetingUser_SpeakerIDs(meetingUserID int) *ValueIntSlice { } func (r *Fetch) MeetingUser_StructureLevel(meetingUserID int) *ValueString { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "structure_level"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "structure_level") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2260,7 +2833,11 @@ func (r *Fetch) MeetingUser_StructureLevel(meetingUserID int) *ValueString { } func (r *Fetch) MeetingUser_SupportedMotionIDs(meetingUserID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "supported_motion_ids"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "supported_motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2270,7 +2847,11 @@ func (r *Fetch) MeetingUser_SupportedMotionIDs(meetingUserID int) *ValueIntSlice } func (r *Fetch) MeetingUser_UserID(meetingUserID int) *ValueInt { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "user_id"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "user_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2280,7 +2861,11 @@ func (r *Fetch) MeetingUser_UserID(meetingUserID int) *ValueInt { } func (r *Fetch) MeetingUser_VoteDelegatedToID(meetingUserID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "vote_delegated_to_id"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "vote_delegated_to_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2290,7 +2875,11 @@ func (r *Fetch) MeetingUser_VoteDelegatedToID(meetingUserID int) *ValueMaybeInt } func (r *Fetch) MeetingUser_VoteDelegationsFromIDs(meetingUserID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "vote_delegations_from_ids"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "vote_delegations_from_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2300,7 +2889,11 @@ func (r *Fetch) MeetingUser_VoteDelegationsFromIDs(meetingUserID int) *ValueIntS } func (r *Fetch) MeetingUser_VoteWeight(meetingUserID int) *ValueString { - key := dskey.Key{Collection: "meeting_user", ID: meetingUserID, Field: "vote_weight"} + key, err := dskey.FromParts("meeting_user", meetingUserID, "vote_weight") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2310,7 +2903,11 @@ func (r *Fetch) MeetingUser_VoteWeight(meetingUserID int) *ValueString { } func (r *Fetch) Meeting_AdminGroupID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "admin_group_id"} + key, err := dskey.FromParts("meeting", meetingID, "admin_group_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2320,7 +2917,11 @@ func (r *Fetch) Meeting_AdminGroupID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_AgendaEnableNumbering(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "agenda_enable_numbering"} + key, err := dskey.FromParts("meeting", meetingID, "agenda_enable_numbering") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2330,7 +2931,11 @@ func (r *Fetch) Meeting_AgendaEnableNumbering(meetingID int) *ValueBool { } func (r *Fetch) Meeting_AgendaItemCreation(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "agenda_item_creation"} + key, err := dskey.FromParts("meeting", meetingID, "agenda_item_creation") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2340,7 +2945,11 @@ func (r *Fetch) Meeting_AgendaItemCreation(meetingID int) *ValueString { } func (r *Fetch) Meeting_AgendaItemIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "agenda_item_ids"} + key, err := dskey.FromParts("meeting", meetingID, "agenda_item_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2350,7 +2959,11 @@ func (r *Fetch) Meeting_AgendaItemIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_AgendaNewItemsDefaultVisibility(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "agenda_new_items_default_visibility"} + key, err := dskey.FromParts("meeting", meetingID, "agenda_new_items_default_visibility") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2360,7 +2973,11 @@ func (r *Fetch) Meeting_AgendaNewItemsDefaultVisibility(meetingID int) *ValueStr } func (r *Fetch) Meeting_AgendaNumberPrefix(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "agenda_number_prefix"} + key, err := dskey.FromParts("meeting", meetingID, "agenda_number_prefix") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2370,7 +2987,11 @@ func (r *Fetch) Meeting_AgendaNumberPrefix(meetingID int) *ValueString { } func (r *Fetch) Meeting_AgendaNumeralSystem(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "agenda_numeral_system"} + key, err := dskey.FromParts("meeting", meetingID, "agenda_numeral_system") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2380,7 +3001,11 @@ func (r *Fetch) Meeting_AgendaNumeralSystem(meetingID int) *ValueString { } func (r *Fetch) Meeting_AgendaShowInternalItemsOnProjector(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "agenda_show_internal_items_on_projector"} + key, err := dskey.FromParts("meeting", meetingID, "agenda_show_internal_items_on_projector") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2390,7 +3015,11 @@ func (r *Fetch) Meeting_AgendaShowInternalItemsOnProjector(meetingID int) *Value } func (r *Fetch) Meeting_AgendaShowSubtitles(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "agenda_show_subtitles"} + key, err := dskey.FromParts("meeting", meetingID, "agenda_show_subtitles") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2400,7 +3029,11 @@ func (r *Fetch) Meeting_AgendaShowSubtitles(meetingID int) *ValueBool { } func (r *Fetch) Meeting_AllProjectionIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "all_projection_ids"} + key, err := dskey.FromParts("meeting", meetingID, "all_projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2410,7 +3043,11 @@ func (r *Fetch) Meeting_AllProjectionIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ApplauseEnable(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "applause_enable"} + key, err := dskey.FromParts("meeting", meetingID, "applause_enable") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2420,7 +3057,11 @@ func (r *Fetch) Meeting_ApplauseEnable(meetingID int) *ValueBool { } func (r *Fetch) Meeting_ApplauseMaxAmount(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "applause_max_amount"} + key, err := dskey.FromParts("meeting", meetingID, "applause_max_amount") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2430,7 +3071,11 @@ func (r *Fetch) Meeting_ApplauseMaxAmount(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ApplauseMinAmount(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "applause_min_amount"} + key, err := dskey.FromParts("meeting", meetingID, "applause_min_amount") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2440,7 +3085,11 @@ func (r *Fetch) Meeting_ApplauseMinAmount(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ApplauseParticleImageUrl(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "applause_particle_image_url"} + key, err := dskey.FromParts("meeting", meetingID, "applause_particle_image_url") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2450,7 +3099,11 @@ func (r *Fetch) Meeting_ApplauseParticleImageUrl(meetingID int) *ValueString { } func (r *Fetch) Meeting_ApplauseShowLevel(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "applause_show_level"} + key, err := dskey.FromParts("meeting", meetingID, "applause_show_level") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2460,7 +3113,11 @@ func (r *Fetch) Meeting_ApplauseShowLevel(meetingID int) *ValueBool { } func (r *Fetch) Meeting_ApplauseTimeout(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "applause_timeout"} + key, err := dskey.FromParts("meeting", meetingID, "applause_timeout") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2470,7 +3127,11 @@ func (r *Fetch) Meeting_ApplauseTimeout(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ApplauseType(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "applause_type"} + key, err := dskey.FromParts("meeting", meetingID, "applause_type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2480,7 +3141,11 @@ func (r *Fetch) Meeting_ApplauseType(meetingID int) *ValueString { } func (r *Fetch) Meeting_AssignmentCandidateIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_candidate_ids"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_candidate_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2490,7 +3155,11 @@ func (r *Fetch) Meeting_AssignmentCandidateIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_AssignmentIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_ids"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2500,7 +3169,11 @@ func (r *Fetch) Meeting_AssignmentIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_AssignmentPollAddCandidatesToListOfSpeakers(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_add_candidates_to_list_of_speakers"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_add_candidates_to_list_of_speakers") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2510,7 +3183,11 @@ func (r *Fetch) Meeting_AssignmentPollAddCandidatesToListOfSpeakers(meetingID in } func (r *Fetch) Meeting_AssignmentPollBallotPaperNumber(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_ballot_paper_number"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_ballot_paper_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2520,7 +3197,11 @@ func (r *Fetch) Meeting_AssignmentPollBallotPaperNumber(meetingID int) *ValueInt } func (r *Fetch) Meeting_AssignmentPollBallotPaperSelection(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_ballot_paper_selection"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_ballot_paper_selection") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2530,7 +3211,11 @@ func (r *Fetch) Meeting_AssignmentPollBallotPaperSelection(meetingID int) *Value } func (r *Fetch) Meeting_AssignmentPollDefaultBackend(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_default_backend"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_backend") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2540,7 +3225,11 @@ func (r *Fetch) Meeting_AssignmentPollDefaultBackend(meetingID int) *ValueString } func (r *Fetch) Meeting_AssignmentPollDefaultGroupIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_default_group_ids"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2550,7 +3239,11 @@ func (r *Fetch) Meeting_AssignmentPollDefaultGroupIDs(meetingID int) *ValueIntSl } func (r *Fetch) Meeting_AssignmentPollDefaultMethod(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_default_method"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_method") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2560,7 +3253,11 @@ func (r *Fetch) Meeting_AssignmentPollDefaultMethod(meetingID int) *ValueString } func (r *Fetch) Meeting_AssignmentPollDefaultOnehundredPercentBase(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_default_onehundred_percent_base"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_onehundred_percent_base") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2570,7 +3267,11 @@ func (r *Fetch) Meeting_AssignmentPollDefaultOnehundredPercentBase(meetingID int } func (r *Fetch) Meeting_AssignmentPollDefaultType(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_default_type"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2580,7 +3281,11 @@ func (r *Fetch) Meeting_AssignmentPollDefaultType(meetingID int) *ValueString { } func (r *Fetch) Meeting_AssignmentPollEnableMaxVotesPerOption(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_enable_max_votes_per_option"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_enable_max_votes_per_option") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2590,7 +3295,11 @@ func (r *Fetch) Meeting_AssignmentPollEnableMaxVotesPerOption(meetingID int) *Va } func (r *Fetch) Meeting_AssignmentPollSortPollResultByVotes(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignment_poll_sort_poll_result_by_votes"} + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_sort_poll_result_by_votes") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2600,7 +3309,11 @@ func (r *Fetch) Meeting_AssignmentPollSortPollResultByVotes(meetingID int) *Valu } func (r *Fetch) Meeting_AssignmentsExportPreamble(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignments_export_preamble"} + key, err := dskey.FromParts("meeting", meetingID, "assignments_export_preamble") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2610,7 +3323,11 @@ func (r *Fetch) Meeting_AssignmentsExportPreamble(meetingID int) *ValueString { } func (r *Fetch) Meeting_AssignmentsExportTitle(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "assignments_export_title"} + key, err := dskey.FromParts("meeting", meetingID, "assignments_export_title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2620,7 +3337,11 @@ func (r *Fetch) Meeting_AssignmentsExportTitle(meetingID int) *ValueString { } func (r *Fetch) Meeting_ChatGroupIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "chat_group_ids"} + key, err := dskey.FromParts("meeting", meetingID, "chat_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2630,7 +3351,11 @@ func (r *Fetch) Meeting_ChatGroupIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ChatMessageIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "chat_message_ids"} + key, err := dskey.FromParts("meeting", meetingID, "chat_message_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2640,7 +3365,11 @@ func (r *Fetch) Meeting_ChatMessageIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_CommitteeID(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "committee_id"} + key, err := dskey.FromParts("meeting", meetingID, "committee_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2650,7 +3379,11 @@ func (r *Fetch) Meeting_CommitteeID(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ConferenceAutoConnect(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_auto_connect"} + key, err := dskey.FromParts("meeting", meetingID, "conference_auto_connect") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2660,7 +3393,11 @@ func (r *Fetch) Meeting_ConferenceAutoConnect(meetingID int) *ValueBool { } func (r *Fetch) Meeting_ConferenceAutoConnectNextSpeakers(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_auto_connect_next_speakers"} + key, err := dskey.FromParts("meeting", meetingID, "conference_auto_connect_next_speakers") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2670,7 +3407,11 @@ func (r *Fetch) Meeting_ConferenceAutoConnectNextSpeakers(meetingID int) *ValueI } func (r *Fetch) Meeting_ConferenceEnableHelpdesk(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_enable_helpdesk"} + key, err := dskey.FromParts("meeting", meetingID, "conference_enable_helpdesk") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2680,7 +3421,11 @@ func (r *Fetch) Meeting_ConferenceEnableHelpdesk(meetingID int) *ValueBool { } func (r *Fetch) Meeting_ConferenceLosRestriction(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_los_restriction"} + key, err := dskey.FromParts("meeting", meetingID, "conference_los_restriction") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2690,7 +3435,11 @@ func (r *Fetch) Meeting_ConferenceLosRestriction(meetingID int) *ValueBool { } func (r *Fetch) Meeting_ConferenceOpenMicrophone(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_open_microphone"} + key, err := dskey.FromParts("meeting", meetingID, "conference_open_microphone") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2700,7 +3449,11 @@ func (r *Fetch) Meeting_ConferenceOpenMicrophone(meetingID int) *ValueBool { } func (r *Fetch) Meeting_ConferenceOpenVideo(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_open_video"} + key, err := dskey.FromParts("meeting", meetingID, "conference_open_video") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2710,7 +3463,11 @@ func (r *Fetch) Meeting_ConferenceOpenVideo(meetingID int) *ValueBool { } func (r *Fetch) Meeting_ConferenceShow(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_show"} + key, err := dskey.FromParts("meeting", meetingID, "conference_show") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2720,7 +3477,11 @@ func (r *Fetch) Meeting_ConferenceShow(meetingID int) *ValueBool { } func (r *Fetch) Meeting_ConferenceStreamPosterUrl(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_stream_poster_url"} + key, err := dskey.FromParts("meeting", meetingID, "conference_stream_poster_url") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2730,7 +3491,11 @@ func (r *Fetch) Meeting_ConferenceStreamPosterUrl(meetingID int) *ValueString { } func (r *Fetch) Meeting_ConferenceStreamUrl(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "conference_stream_url"} + key, err := dskey.FromParts("meeting", meetingID, "conference_stream_url") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2740,7 +3505,11 @@ func (r *Fetch) Meeting_ConferenceStreamUrl(meetingID int) *ValueString { } func (r *Fetch) Meeting_CustomTranslations(meetingID int) *ValueJSON { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "custom_translations"} + key, err := dskey.FromParts("meeting", meetingID, "custom_translations") + if err != nil { + r.err = err + return &ValueJSON{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueJSON) } @@ -2750,7 +3519,11 @@ func (r *Fetch) Meeting_CustomTranslations(meetingID int) *ValueJSON { } func (r *Fetch) Meeting_DefaultGroupID(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_group_id"} + key, err := dskey.FromParts("meeting", meetingID, "default_group_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2760,7 +3533,11 @@ func (r *Fetch) Meeting_DefaultGroupID(meetingID int) *ValueInt { } func (r *Fetch) Meeting_DefaultMeetingForCommitteeID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_meeting_for_committee_id"} + key, err := dskey.FromParts("meeting", meetingID, "default_meeting_for_committee_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -2770,7 +3547,11 @@ func (r *Fetch) Meeting_DefaultMeetingForCommitteeID(meetingID int) *ValueMaybeI } func (r *Fetch) Meeting_DefaultProjectorAgendaItemListIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_agenda_item_list_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_agenda_item_list_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2780,7 +3561,11 @@ func (r *Fetch) Meeting_DefaultProjectorAgendaItemListIDs(meetingID int) *ValueI } func (r *Fetch) Meeting_DefaultProjectorAmendmentIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_amendment_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_amendment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2790,7 +3575,11 @@ func (r *Fetch) Meeting_DefaultProjectorAmendmentIDs(meetingID int) *ValueIntSli } func (r *Fetch) Meeting_DefaultProjectorAssignmentIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_assignment_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_assignment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2800,7 +3589,11 @@ func (r *Fetch) Meeting_DefaultProjectorAssignmentIDs(meetingID int) *ValueIntSl } func (r *Fetch) Meeting_DefaultProjectorAssignmentPollIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_assignment_poll_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_assignment_poll_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2810,7 +3603,11 @@ func (r *Fetch) Meeting_DefaultProjectorAssignmentPollIDs(meetingID int) *ValueI } func (r *Fetch) Meeting_DefaultProjectorCountdownIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_countdown_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_countdown_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2820,7 +3617,11 @@ func (r *Fetch) Meeting_DefaultProjectorCountdownIDs(meetingID int) *ValueIntSli } func (r *Fetch) Meeting_DefaultProjectorCurrentListOfSpeakersIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_current_list_of_speakers_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_current_list_of_speakers_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2830,7 +3631,11 @@ func (r *Fetch) Meeting_DefaultProjectorCurrentListOfSpeakersIDs(meetingID int) } func (r *Fetch) Meeting_DefaultProjectorListOfSpeakersIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_list_of_speakers_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_list_of_speakers_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2840,7 +3645,11 @@ func (r *Fetch) Meeting_DefaultProjectorListOfSpeakersIDs(meetingID int) *ValueI } func (r *Fetch) Meeting_DefaultProjectorMediafileIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_mediafile_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_mediafile_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2850,7 +3659,11 @@ func (r *Fetch) Meeting_DefaultProjectorMediafileIDs(meetingID int) *ValueIntSli } func (r *Fetch) Meeting_DefaultProjectorMessageIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_message_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_message_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2860,7 +3673,11 @@ func (r *Fetch) Meeting_DefaultProjectorMessageIDs(meetingID int) *ValueIntSlice } func (r *Fetch) Meeting_DefaultProjectorMotionBlockIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_motion_block_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_motion_block_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2870,7 +3687,11 @@ func (r *Fetch) Meeting_DefaultProjectorMotionBlockIDs(meetingID int) *ValueIntS } func (r *Fetch) Meeting_DefaultProjectorMotionIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_motion_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2880,7 +3701,11 @@ func (r *Fetch) Meeting_DefaultProjectorMotionIDs(meetingID int) *ValueIntSlice } func (r *Fetch) Meeting_DefaultProjectorMotionPollIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_motion_poll_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_motion_poll_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2890,7 +3715,11 @@ func (r *Fetch) Meeting_DefaultProjectorMotionPollIDs(meetingID int) *ValueIntSl } func (r *Fetch) Meeting_DefaultProjectorPollIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_poll_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_poll_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2900,7 +3729,11 @@ func (r *Fetch) Meeting_DefaultProjectorPollIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_DefaultProjectorTopicIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "default_projector_topic_ids"} + key, err := dskey.FromParts("meeting", meetingID, "default_projector_topic_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -2910,7 +3743,11 @@ func (r *Fetch) Meeting_DefaultProjectorTopicIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_Description(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "description"} + key, err := dskey.FromParts("meeting", meetingID, "description") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2920,7 +3757,11 @@ func (r *Fetch) Meeting_Description(meetingID int) *ValueString { } func (r *Fetch) Meeting_EnableAnonymous(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "enable_anonymous"} + key, err := dskey.FromParts("meeting", meetingID, "enable_anonymous") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -2930,7 +3771,11 @@ func (r *Fetch) Meeting_EnableAnonymous(meetingID int) *ValueBool { } func (r *Fetch) Meeting_EndTime(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "end_time"} + key, err := dskey.FromParts("meeting", meetingID, "end_time") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2940,7 +3785,11 @@ func (r *Fetch) Meeting_EndTime(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ExportCsvEncoding(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_csv_encoding"} + key, err := dskey.FromParts("meeting", meetingID, "export_csv_encoding") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2950,7 +3799,11 @@ func (r *Fetch) Meeting_ExportCsvEncoding(meetingID int) *ValueString { } func (r *Fetch) Meeting_ExportCsvSeparator(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_csv_separator"} + key, err := dskey.FromParts("meeting", meetingID, "export_csv_separator") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -2960,7 +3813,11 @@ func (r *Fetch) Meeting_ExportCsvSeparator(meetingID int) *ValueString { } func (r *Fetch) Meeting_ExportPdfFontsize(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_pdf_fontsize"} + key, err := dskey.FromParts("meeting", meetingID, "export_pdf_fontsize") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2970,7 +3827,11 @@ func (r *Fetch) Meeting_ExportPdfFontsize(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ExportPdfLineHeight(meetingID int) *ValueFloat { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_pdf_line_height"} + key, err := dskey.FromParts("meeting", meetingID, "export_pdf_line_height") + if err != nil { + r.err = err + return &ValueFloat{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueFloat) } @@ -2980,7 +3841,11 @@ func (r *Fetch) Meeting_ExportPdfLineHeight(meetingID int) *ValueFloat { } func (r *Fetch) Meeting_ExportPdfPageMarginBottom(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_pdf_page_margin_bottom"} + key, err := dskey.FromParts("meeting", meetingID, "export_pdf_page_margin_bottom") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -2990,7 +3855,11 @@ func (r *Fetch) Meeting_ExportPdfPageMarginBottom(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ExportPdfPageMarginLeft(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_pdf_page_margin_left"} + key, err := dskey.FromParts("meeting", meetingID, "export_pdf_page_margin_left") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3000,7 +3869,11 @@ func (r *Fetch) Meeting_ExportPdfPageMarginLeft(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ExportPdfPageMarginRight(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_pdf_page_margin_right"} + key, err := dskey.FromParts("meeting", meetingID, "export_pdf_page_margin_right") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3010,7 +3883,11 @@ func (r *Fetch) Meeting_ExportPdfPageMarginRight(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ExportPdfPageMarginTop(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_pdf_page_margin_top"} + key, err := dskey.FromParts("meeting", meetingID, "export_pdf_page_margin_top") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3020,7 +3897,11 @@ func (r *Fetch) Meeting_ExportPdfPageMarginTop(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ExportPdfPagenumberAlignment(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_pdf_pagenumber_alignment"} + key, err := dskey.FromParts("meeting", meetingID, "export_pdf_pagenumber_alignment") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3030,7 +3911,11 @@ func (r *Fetch) Meeting_ExportPdfPagenumberAlignment(meetingID int) *ValueString } func (r *Fetch) Meeting_ExportPdfPagesize(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "export_pdf_pagesize"} + key, err := dskey.FromParts("meeting", meetingID, "export_pdf_pagesize") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3040,7 +3925,11 @@ func (r *Fetch) Meeting_ExportPdfPagesize(meetingID int) *ValueString { } func (r *Fetch) Meeting_ExternalID(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "external_id"} + key, err := dskey.FromParts("meeting", meetingID, "external_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3050,7 +3939,11 @@ func (r *Fetch) Meeting_ExternalID(meetingID int) *ValueString { } func (r *Fetch) Meeting_FontBoldID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "font_bold_id"} + key, err := dskey.FromParts("meeting", meetingID, "font_bold_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3060,7 +3953,11 @@ func (r *Fetch) Meeting_FontBoldID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_FontBoldItalicID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "font_bold_italic_id"} + key, err := dskey.FromParts("meeting", meetingID, "font_bold_italic_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3070,7 +3967,11 @@ func (r *Fetch) Meeting_FontBoldItalicID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_FontChyronSpeakerNameID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "font_chyron_speaker_name_id"} + key, err := dskey.FromParts("meeting", meetingID, "font_chyron_speaker_name_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3080,7 +3981,11 @@ func (r *Fetch) Meeting_FontChyronSpeakerNameID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_FontItalicID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "font_italic_id"} + key, err := dskey.FromParts("meeting", meetingID, "font_italic_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3090,7 +3995,11 @@ func (r *Fetch) Meeting_FontItalicID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_FontMonospaceID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "font_monospace_id"} + key, err := dskey.FromParts("meeting", meetingID, "font_monospace_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3100,7 +4009,11 @@ func (r *Fetch) Meeting_FontMonospaceID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_FontProjectorH1ID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "font_projector_h1_id"} + key, err := dskey.FromParts("meeting", meetingID, "font_projector_h1_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3110,7 +4023,11 @@ func (r *Fetch) Meeting_FontProjectorH1ID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_FontProjectorH2ID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "font_projector_h2_id"} + key, err := dskey.FromParts("meeting", meetingID, "font_projector_h2_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3120,7 +4037,11 @@ func (r *Fetch) Meeting_FontProjectorH2ID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_FontRegularID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "font_regular_id"} + key, err := dskey.FromParts("meeting", meetingID, "font_regular_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3130,7 +4051,11 @@ func (r *Fetch) Meeting_FontRegularID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_ForwardedMotionIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "forwarded_motion_ids"} + key, err := dskey.FromParts("meeting", meetingID, "forwarded_motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3140,7 +4065,11 @@ func (r *Fetch) Meeting_ForwardedMotionIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_GroupIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "group_ids"} + key, err := dskey.FromParts("meeting", meetingID, "group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3150,7 +4079,11 @@ func (r *Fetch) Meeting_GroupIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ID(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "id"} + key, err := dskey.FromParts("meeting", meetingID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3160,7 +4093,11 @@ func (r *Fetch) Meeting_ID(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ImportedAt(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "imported_at"} + key, err := dskey.FromParts("meeting", meetingID, "imported_at") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3170,7 +4107,11 @@ func (r *Fetch) Meeting_ImportedAt(meetingID int) *ValueInt { } func (r *Fetch) Meeting_IsActiveInOrganizationID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "is_active_in_organization_id"} + key, err := dskey.FromParts("meeting", meetingID, "is_active_in_organization_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3180,7 +4121,11 @@ func (r *Fetch) Meeting_IsActiveInOrganizationID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_IsArchivedInOrganizationID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "is_archived_in_organization_id"} + key, err := dskey.FromParts("meeting", meetingID, "is_archived_in_organization_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3190,7 +4135,11 @@ func (r *Fetch) Meeting_IsArchivedInOrganizationID(meetingID int) *ValueMaybeInt } func (r *Fetch) Meeting_JitsiDomain(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "jitsi_domain"} + key, err := dskey.FromParts("meeting", meetingID, "jitsi_domain") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3200,7 +4149,11 @@ func (r *Fetch) Meeting_JitsiDomain(meetingID int) *ValueString { } func (r *Fetch) Meeting_JitsiRoomName(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "jitsi_room_name"} + key, err := dskey.FromParts("meeting", meetingID, "jitsi_room_name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3210,7 +4163,11 @@ func (r *Fetch) Meeting_JitsiRoomName(meetingID int) *ValueString { } func (r *Fetch) Meeting_JitsiRoomPassword(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "jitsi_room_password"} + key, err := dskey.FromParts("meeting", meetingID, "jitsi_room_password") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3220,7 +4177,11 @@ func (r *Fetch) Meeting_JitsiRoomPassword(meetingID int) *ValueString { } func (r *Fetch) Meeting_Language(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "language"} + key, err := dskey.FromParts("meeting", meetingID, "language") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3230,7 +4191,11 @@ func (r *Fetch) Meeting_Language(meetingID int) *ValueString { } func (r *Fetch) Meeting_ListOfSpeakersAmountLastOnProjector(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_amount_last_on_projector"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_amount_last_on_projector") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3240,7 +4205,11 @@ func (r *Fetch) Meeting_ListOfSpeakersAmountLastOnProjector(meetingID int) *Valu } func (r *Fetch) Meeting_ListOfSpeakersAmountNextOnProjector(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_amount_next_on_projector"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_amount_next_on_projector") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3250,7 +4219,11 @@ func (r *Fetch) Meeting_ListOfSpeakersAmountNextOnProjector(meetingID int) *Valu } func (r *Fetch) Meeting_ListOfSpeakersCanSetContributionSelf(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_can_set_contribution_self"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_can_set_contribution_self") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3260,7 +4233,11 @@ func (r *Fetch) Meeting_ListOfSpeakersCanSetContributionSelf(meetingID int) *Val } func (r *Fetch) Meeting_ListOfSpeakersClosingDisablesPointOfOrder(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_closing_disables_point_of_order"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_closing_disables_point_of_order") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3270,7 +4247,11 @@ func (r *Fetch) Meeting_ListOfSpeakersClosingDisablesPointOfOrder(meetingID int) } func (r *Fetch) Meeting_ListOfSpeakersCountdownID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_countdown_id"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_countdown_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3280,7 +4261,11 @@ func (r *Fetch) Meeting_ListOfSpeakersCountdownID(meetingID int) *ValueMaybeInt } func (r *Fetch) Meeting_ListOfSpeakersCoupleCountdown(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_couple_countdown"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_couple_countdown") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3290,7 +4275,11 @@ func (r *Fetch) Meeting_ListOfSpeakersCoupleCountdown(meetingID int) *ValueBool } func (r *Fetch) Meeting_ListOfSpeakersEnablePointOfOrderCategories(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_enable_point_of_order_categories"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_enable_point_of_order_categories") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3300,7 +4289,11 @@ func (r *Fetch) Meeting_ListOfSpeakersEnablePointOfOrderCategories(meetingID int } func (r *Fetch) Meeting_ListOfSpeakersEnablePointOfOrderSpeakers(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_enable_point_of_order_speakers"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_enable_point_of_order_speakers") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3310,7 +4303,11 @@ func (r *Fetch) Meeting_ListOfSpeakersEnablePointOfOrderSpeakers(meetingID int) } func (r *Fetch) Meeting_ListOfSpeakersEnableProContraSpeech(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_enable_pro_contra_speech"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_enable_pro_contra_speech") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3320,7 +4317,11 @@ func (r *Fetch) Meeting_ListOfSpeakersEnableProContraSpeech(meetingID int) *Valu } func (r *Fetch) Meeting_ListOfSpeakersIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_ids"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3330,7 +4331,11 @@ func (r *Fetch) Meeting_ListOfSpeakersIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ListOfSpeakersInitiallyClosed(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_initially_closed"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_initially_closed") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3340,7 +4345,11 @@ func (r *Fetch) Meeting_ListOfSpeakersInitiallyClosed(meetingID int) *ValueBool } func (r *Fetch) Meeting_ListOfSpeakersPresentUsersOnly(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_present_users_only"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_present_users_only") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3350,7 +4359,11 @@ func (r *Fetch) Meeting_ListOfSpeakersPresentUsersOnly(meetingID int) *ValueBool } func (r *Fetch) Meeting_ListOfSpeakersShowAmountOfSpeakersOnSlide(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_show_amount_of_speakers_on_slide"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_show_amount_of_speakers_on_slide") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3360,7 +4373,11 @@ func (r *Fetch) Meeting_ListOfSpeakersShowAmountOfSpeakersOnSlide(meetingID int) } func (r *Fetch) Meeting_ListOfSpeakersShowFirstContribution(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_show_first_contribution"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_show_first_contribution") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3370,7 +4387,11 @@ func (r *Fetch) Meeting_ListOfSpeakersShowFirstContribution(meetingID int) *Valu } func (r *Fetch) Meeting_ListOfSpeakersSpeakerNoteForEveryone(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "list_of_speakers_speaker_note_for_everyone"} + key, err := dskey.FromParts("meeting", meetingID, "list_of_speakers_speaker_note_for_everyone") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3380,7 +4401,11 @@ func (r *Fetch) Meeting_ListOfSpeakersSpeakerNoteForEveryone(meetingID int) *Val } func (r *Fetch) Meeting_Location(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "location"} + key, err := dskey.FromParts("meeting", meetingID, "location") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3390,7 +4415,11 @@ func (r *Fetch) Meeting_Location(meetingID int) *ValueString { } func (r *Fetch) Meeting_LogoPdfBallotPaperID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "logo_pdf_ballot_paper_id"} + key, err := dskey.FromParts("meeting", meetingID, "logo_pdf_ballot_paper_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3400,7 +4429,11 @@ func (r *Fetch) Meeting_LogoPdfBallotPaperID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_LogoPdfFooterLID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "logo_pdf_footer_l_id"} + key, err := dskey.FromParts("meeting", meetingID, "logo_pdf_footer_l_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3410,7 +4443,11 @@ func (r *Fetch) Meeting_LogoPdfFooterLID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_LogoPdfFooterRID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "logo_pdf_footer_r_id"} + key, err := dskey.FromParts("meeting", meetingID, "logo_pdf_footer_r_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3420,7 +4457,11 @@ func (r *Fetch) Meeting_LogoPdfFooterRID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_LogoPdfHeaderLID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "logo_pdf_header_l_id"} + key, err := dskey.FromParts("meeting", meetingID, "logo_pdf_header_l_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3430,7 +4471,11 @@ func (r *Fetch) Meeting_LogoPdfHeaderLID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_LogoPdfHeaderRID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "logo_pdf_header_r_id"} + key, err := dskey.FromParts("meeting", meetingID, "logo_pdf_header_r_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3440,7 +4485,11 @@ func (r *Fetch) Meeting_LogoPdfHeaderRID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_LogoProjectorHeaderID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "logo_projector_header_id"} + key, err := dskey.FromParts("meeting", meetingID, "logo_projector_header_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3450,7 +4499,11 @@ func (r *Fetch) Meeting_LogoProjectorHeaderID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_LogoProjectorMainID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "logo_projector_main_id"} + key, err := dskey.FromParts("meeting", meetingID, "logo_projector_main_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3460,7 +4513,11 @@ func (r *Fetch) Meeting_LogoProjectorMainID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_LogoWebHeaderID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "logo_web_header_id"} + key, err := dskey.FromParts("meeting", meetingID, "logo_web_header_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -3470,7 +4527,11 @@ func (r *Fetch) Meeting_LogoWebHeaderID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_MediafileIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "mediafile_ids"} + key, err := dskey.FromParts("meeting", meetingID, "mediafile_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3480,7 +4541,11 @@ func (r *Fetch) Meeting_MediafileIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MeetingUserIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "meeting_user_ids"} + key, err := dskey.FromParts("meeting", meetingID, "meeting_user_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3490,7 +4555,11 @@ func (r *Fetch) Meeting_MeetingUserIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionBlockIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_block_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_block_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3500,7 +4569,11 @@ func (r *Fetch) Meeting_MotionBlockIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionCategoryIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_category_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_category_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3510,7 +4583,11 @@ func (r *Fetch) Meeting_MotionCategoryIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionChangeRecommendationIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_change_recommendation_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_change_recommendation_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3520,7 +4597,11 @@ func (r *Fetch) Meeting_MotionChangeRecommendationIDs(meetingID int) *ValueIntSl } func (r *Fetch) Meeting_MotionCommentIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_comment_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_comment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3530,7 +4611,11 @@ func (r *Fetch) Meeting_MotionCommentIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionCommentSectionIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_comment_section_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_comment_section_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3540,7 +4625,11 @@ func (r *Fetch) Meeting_MotionCommentSectionIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3550,7 +4639,11 @@ func (r *Fetch) Meeting_MotionIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionPollBallotPaperNumber(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_poll_ballot_paper_number"} + key, err := dskey.FromParts("meeting", meetingID, "motion_poll_ballot_paper_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3560,7 +4653,11 @@ func (r *Fetch) Meeting_MotionPollBallotPaperNumber(meetingID int) *ValueInt { } func (r *Fetch) Meeting_MotionPollBallotPaperSelection(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_poll_ballot_paper_selection"} + key, err := dskey.FromParts("meeting", meetingID, "motion_poll_ballot_paper_selection") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3570,7 +4667,11 @@ func (r *Fetch) Meeting_MotionPollBallotPaperSelection(meetingID int) *ValueStri } func (r *Fetch) Meeting_MotionPollDefaultBackend(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_poll_default_backend"} + key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_backend") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3580,7 +4681,11 @@ func (r *Fetch) Meeting_MotionPollDefaultBackend(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionPollDefaultGroupIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_poll_default_group_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3590,7 +4695,11 @@ func (r *Fetch) Meeting_MotionPollDefaultGroupIDs(meetingID int) *ValueIntSlice } func (r *Fetch) Meeting_MotionPollDefaultOnehundredPercentBase(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_poll_default_onehundred_percent_base"} + key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_onehundred_percent_base") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3600,7 +4709,11 @@ func (r *Fetch) Meeting_MotionPollDefaultOnehundredPercentBase(meetingID int) *V } func (r *Fetch) Meeting_MotionPollDefaultType(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_poll_default_type"} + key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3610,7 +4723,11 @@ func (r *Fetch) Meeting_MotionPollDefaultType(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionStateIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_state_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_state_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3620,7 +4737,11 @@ func (r *Fetch) Meeting_MotionStateIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionStatuteParagraphIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_statute_paragraph_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_statute_paragraph_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3630,7 +4751,11 @@ func (r *Fetch) Meeting_MotionStatuteParagraphIDs(meetingID int) *ValueIntSlice } func (r *Fetch) Meeting_MotionSubmitterIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_submitter_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_submitter_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3640,7 +4765,11 @@ func (r *Fetch) Meeting_MotionSubmitterIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionWorkflowIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motion_workflow_ids"} + key, err := dskey.FromParts("meeting", meetingID, "motion_workflow_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -3650,7 +4779,11 @@ func (r *Fetch) Meeting_MotionWorkflowIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_MotionsAmendmentsEnabled(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_amendments_enabled"} + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_enabled") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3660,7 +4793,11 @@ func (r *Fetch) Meeting_MotionsAmendmentsEnabled(meetingID int) *ValueBool { } func (r *Fetch) Meeting_MotionsAmendmentsInMainList(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_amendments_in_main_list"} + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_in_main_list") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3670,7 +4807,11 @@ func (r *Fetch) Meeting_MotionsAmendmentsInMainList(meetingID int) *ValueBool { } func (r *Fetch) Meeting_MotionsAmendmentsMultipleParagraphs(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_amendments_multiple_paragraphs"} + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_multiple_paragraphs") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3680,7 +4821,11 @@ func (r *Fetch) Meeting_MotionsAmendmentsMultipleParagraphs(meetingID int) *Valu } func (r *Fetch) Meeting_MotionsAmendmentsOfAmendments(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_amendments_of_amendments"} + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_of_amendments") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3690,7 +4835,11 @@ func (r *Fetch) Meeting_MotionsAmendmentsOfAmendments(meetingID int) *ValueBool } func (r *Fetch) Meeting_MotionsAmendmentsPrefix(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_amendments_prefix"} + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_prefix") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3700,7 +4849,11 @@ func (r *Fetch) Meeting_MotionsAmendmentsPrefix(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionsAmendmentsTextMode(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_amendments_text_mode"} + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_text_mode") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3710,7 +4863,11 @@ func (r *Fetch) Meeting_MotionsAmendmentsTextMode(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionsBlockSlideColumns(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_block_slide_columns"} + key, err := dskey.FromParts("meeting", meetingID, "motions_block_slide_columns") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3720,7 +4877,11 @@ func (r *Fetch) Meeting_MotionsBlockSlideColumns(meetingID int) *ValueInt { } func (r *Fetch) Meeting_MotionsDefaultAmendmentWorkflowID(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_default_amendment_workflow_id"} + key, err := dskey.FromParts("meeting", meetingID, "motions_default_amendment_workflow_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3730,7 +4891,11 @@ func (r *Fetch) Meeting_MotionsDefaultAmendmentWorkflowID(meetingID int) *ValueI } func (r *Fetch) Meeting_MotionsDefaultLineNumbering(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_default_line_numbering"} + key, err := dskey.FromParts("meeting", meetingID, "motions_default_line_numbering") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3740,7 +4905,11 @@ func (r *Fetch) Meeting_MotionsDefaultLineNumbering(meetingID int) *ValueString } func (r *Fetch) Meeting_MotionsDefaultSorting(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_default_sorting"} + key, err := dskey.FromParts("meeting", meetingID, "motions_default_sorting") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3750,7 +4919,11 @@ func (r *Fetch) Meeting_MotionsDefaultSorting(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionsDefaultStatuteAmendmentWorkflowID(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_default_statute_amendment_workflow_id"} + key, err := dskey.FromParts("meeting", meetingID, "motions_default_statute_amendment_workflow_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3760,7 +4933,11 @@ func (r *Fetch) Meeting_MotionsDefaultStatuteAmendmentWorkflowID(meetingID int) } func (r *Fetch) Meeting_MotionsDefaultWorkflowID(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_default_workflow_id"} + key, err := dskey.FromParts("meeting", meetingID, "motions_default_workflow_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3770,7 +4947,11 @@ func (r *Fetch) Meeting_MotionsDefaultWorkflowID(meetingID int) *ValueInt { } func (r *Fetch) Meeting_MotionsEnableReasonOnProjector(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_enable_reason_on_projector"} + key, err := dskey.FromParts("meeting", meetingID, "motions_enable_reason_on_projector") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3780,7 +4961,11 @@ func (r *Fetch) Meeting_MotionsEnableReasonOnProjector(meetingID int) *ValueBool } func (r *Fetch) Meeting_MotionsEnableRecommendationOnProjector(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_enable_recommendation_on_projector"} + key, err := dskey.FromParts("meeting", meetingID, "motions_enable_recommendation_on_projector") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3790,7 +4975,11 @@ func (r *Fetch) Meeting_MotionsEnableRecommendationOnProjector(meetingID int) *V } func (r *Fetch) Meeting_MotionsEnableSideboxOnProjector(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_enable_sidebox_on_projector"} + key, err := dskey.FromParts("meeting", meetingID, "motions_enable_sidebox_on_projector") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3800,7 +4989,11 @@ func (r *Fetch) Meeting_MotionsEnableSideboxOnProjector(meetingID int) *ValueBoo } func (r *Fetch) Meeting_MotionsEnableTextOnProjector(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_enable_text_on_projector"} + key, err := dskey.FromParts("meeting", meetingID, "motions_enable_text_on_projector") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3810,7 +5003,11 @@ func (r *Fetch) Meeting_MotionsEnableTextOnProjector(meetingID int) *ValueBool { } func (r *Fetch) Meeting_MotionsExportFollowRecommendation(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_export_follow_recommendation"} + key, err := dskey.FromParts("meeting", meetingID, "motions_export_follow_recommendation") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3820,7 +5017,11 @@ func (r *Fetch) Meeting_MotionsExportFollowRecommendation(meetingID int) *ValueB } func (r *Fetch) Meeting_MotionsExportPreamble(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_export_preamble"} + key, err := dskey.FromParts("meeting", meetingID, "motions_export_preamble") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3830,7 +5031,11 @@ func (r *Fetch) Meeting_MotionsExportPreamble(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionsExportSubmitterRecommendation(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_export_submitter_recommendation"} + key, err := dskey.FromParts("meeting", meetingID, "motions_export_submitter_recommendation") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3840,7 +5045,11 @@ func (r *Fetch) Meeting_MotionsExportSubmitterRecommendation(meetingID int) *Val } func (r *Fetch) Meeting_MotionsExportTitle(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_export_title"} + key, err := dskey.FromParts("meeting", meetingID, "motions_export_title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3850,7 +5059,11 @@ func (r *Fetch) Meeting_MotionsExportTitle(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionsLineLength(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_line_length"} + key, err := dskey.FromParts("meeting", meetingID, "motions_line_length") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3860,7 +5073,11 @@ func (r *Fetch) Meeting_MotionsLineLength(meetingID int) *ValueInt { } func (r *Fetch) Meeting_MotionsNumberMinDigits(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_number_min_digits"} + key, err := dskey.FromParts("meeting", meetingID, "motions_number_min_digits") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3870,7 +5087,11 @@ func (r *Fetch) Meeting_MotionsNumberMinDigits(meetingID int) *ValueInt { } func (r *Fetch) Meeting_MotionsNumberType(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_number_type"} + key, err := dskey.FromParts("meeting", meetingID, "motions_number_type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3880,7 +5101,11 @@ func (r *Fetch) Meeting_MotionsNumberType(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionsNumberWithBlank(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_number_with_blank"} + key, err := dskey.FromParts("meeting", meetingID, "motions_number_with_blank") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3890,7 +5115,11 @@ func (r *Fetch) Meeting_MotionsNumberWithBlank(meetingID int) *ValueBool { } func (r *Fetch) Meeting_MotionsPreamble(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_preamble"} + key, err := dskey.FromParts("meeting", meetingID, "motions_preamble") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3900,7 +5129,11 @@ func (r *Fetch) Meeting_MotionsPreamble(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionsReasonRequired(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_reason_required"} + key, err := dskey.FromParts("meeting", meetingID, "motions_reason_required") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3910,7 +5143,11 @@ func (r *Fetch) Meeting_MotionsReasonRequired(meetingID int) *ValueBool { } func (r *Fetch) Meeting_MotionsRecommendationTextMode(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_recommendation_text_mode"} + key, err := dskey.FromParts("meeting", meetingID, "motions_recommendation_text_mode") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3920,7 +5157,11 @@ func (r *Fetch) Meeting_MotionsRecommendationTextMode(meetingID int) *ValueStrin } func (r *Fetch) Meeting_MotionsRecommendationsBy(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_recommendations_by"} + key, err := dskey.FromParts("meeting", meetingID, "motions_recommendations_by") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3930,7 +5171,11 @@ func (r *Fetch) Meeting_MotionsRecommendationsBy(meetingID int) *ValueString { } func (r *Fetch) Meeting_MotionsShowReferringMotions(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_show_referring_motions"} + key, err := dskey.FromParts("meeting", meetingID, "motions_show_referring_motions") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3940,7 +5185,11 @@ func (r *Fetch) Meeting_MotionsShowReferringMotions(meetingID int) *ValueBool { } func (r *Fetch) Meeting_MotionsShowSequentialNumber(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_show_sequential_number"} + key, err := dskey.FromParts("meeting", meetingID, "motions_show_sequential_number") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3950,7 +5199,11 @@ func (r *Fetch) Meeting_MotionsShowSequentialNumber(meetingID int) *ValueBool { } func (r *Fetch) Meeting_MotionsStatuteRecommendationsBy(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_statute_recommendations_by"} + key, err := dskey.FromParts("meeting", meetingID, "motions_statute_recommendations_by") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3960,7 +5213,11 @@ func (r *Fetch) Meeting_MotionsStatuteRecommendationsBy(meetingID int) *ValueStr } func (r *Fetch) Meeting_MotionsStatutesEnabled(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_statutes_enabled"} + key, err := dskey.FromParts("meeting", meetingID, "motions_statutes_enabled") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -3970,7 +5227,11 @@ func (r *Fetch) Meeting_MotionsStatutesEnabled(meetingID int) *ValueBool { } func (r *Fetch) Meeting_MotionsSupportersMinAmount(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "motions_supporters_min_amount"} + key, err := dskey.FromParts("meeting", meetingID, "motions_supporters_min_amount") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -3980,7 +5241,11 @@ func (r *Fetch) Meeting_MotionsSupportersMinAmount(meetingID int) *ValueInt { } func (r *Fetch) Meeting_Name(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "name"} + key, err := dskey.FromParts("meeting", meetingID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -3990,7 +5255,11 @@ func (r *Fetch) Meeting_Name(meetingID int) *ValueString { } func (r *Fetch) Meeting_OptionIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "option_ids"} + key, err := dskey.FromParts("meeting", meetingID, "option_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4000,7 +5269,11 @@ func (r *Fetch) Meeting_OptionIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_OrganizationTagIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "organization_tag_ids"} + key, err := dskey.FromParts("meeting", meetingID, "organization_tag_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4010,7 +5283,11 @@ func (r *Fetch) Meeting_OrganizationTagIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_PersonalNoteIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "personal_note_ids"} + key, err := dskey.FromParts("meeting", meetingID, "personal_note_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4020,7 +5297,11 @@ func (r *Fetch) Meeting_PersonalNoteIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_PointOfOrderCategoryIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "point_of_order_category_ids"} + key, err := dskey.FromParts("meeting", meetingID, "point_of_order_category_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4030,7 +5311,11 @@ func (r *Fetch) Meeting_PointOfOrderCategoryIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_PollBallotPaperNumber(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_ballot_paper_number"} + key, err := dskey.FromParts("meeting", meetingID, "poll_ballot_paper_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4040,7 +5325,11 @@ func (r *Fetch) Meeting_PollBallotPaperNumber(meetingID int) *ValueInt { } func (r *Fetch) Meeting_PollBallotPaperSelection(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_ballot_paper_selection"} + key, err := dskey.FromParts("meeting", meetingID, "poll_ballot_paper_selection") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4050,7 +5339,11 @@ func (r *Fetch) Meeting_PollBallotPaperSelection(meetingID int) *ValueString { } func (r *Fetch) Meeting_PollCandidateIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_candidate_ids"} + key, err := dskey.FromParts("meeting", meetingID, "poll_candidate_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4060,7 +5353,11 @@ func (r *Fetch) Meeting_PollCandidateIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_PollCandidateListIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_candidate_list_ids"} + key, err := dskey.FromParts("meeting", meetingID, "poll_candidate_list_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4070,7 +5367,11 @@ func (r *Fetch) Meeting_PollCandidateListIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_PollCountdownID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_countdown_id"} + key, err := dskey.FromParts("meeting", meetingID, "poll_countdown_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -4080,7 +5381,11 @@ func (r *Fetch) Meeting_PollCountdownID(meetingID int) *ValueMaybeInt { } func (r *Fetch) Meeting_PollCoupleCountdown(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_couple_countdown"} + key, err := dskey.FromParts("meeting", meetingID, "poll_couple_countdown") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4090,7 +5395,11 @@ func (r *Fetch) Meeting_PollCoupleCountdown(meetingID int) *ValueBool { } func (r *Fetch) Meeting_PollDefaultBackend(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_default_backend"} + key, err := dskey.FromParts("meeting", meetingID, "poll_default_backend") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4100,7 +5409,11 @@ func (r *Fetch) Meeting_PollDefaultBackend(meetingID int) *ValueString { } func (r *Fetch) Meeting_PollDefaultGroupIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_default_group_ids"} + key, err := dskey.FromParts("meeting", meetingID, "poll_default_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4110,7 +5423,11 @@ func (r *Fetch) Meeting_PollDefaultGroupIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_PollDefaultMethod(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_default_method"} + key, err := dskey.FromParts("meeting", meetingID, "poll_default_method") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4120,7 +5437,11 @@ func (r *Fetch) Meeting_PollDefaultMethod(meetingID int) *ValueString { } func (r *Fetch) Meeting_PollDefaultOnehundredPercentBase(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_default_onehundred_percent_base"} + key, err := dskey.FromParts("meeting", meetingID, "poll_default_onehundred_percent_base") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4130,7 +5451,11 @@ func (r *Fetch) Meeting_PollDefaultOnehundredPercentBase(meetingID int) *ValueSt } func (r *Fetch) Meeting_PollDefaultType(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_default_type"} + key, err := dskey.FromParts("meeting", meetingID, "poll_default_type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4140,7 +5465,11 @@ func (r *Fetch) Meeting_PollDefaultType(meetingID int) *ValueString { } func (r *Fetch) Meeting_PollIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_ids"} + key, err := dskey.FromParts("meeting", meetingID, "poll_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4150,7 +5479,11 @@ func (r *Fetch) Meeting_PollIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_PollSortPollResultByVotes(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "poll_sort_poll_result_by_votes"} + key, err := dskey.FromParts("meeting", meetingID, "poll_sort_poll_result_by_votes") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4160,7 +5493,11 @@ func (r *Fetch) Meeting_PollSortPollResultByVotes(meetingID int) *ValueBool { } func (r *Fetch) Meeting_PresentUserIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "present_user_ids"} + key, err := dskey.FromParts("meeting", meetingID, "present_user_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4170,7 +5507,11 @@ func (r *Fetch) Meeting_PresentUserIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ProjectionIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "projection_ids"} + key, err := dskey.FromParts("meeting", meetingID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4180,7 +5521,11 @@ func (r *Fetch) Meeting_ProjectionIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ProjectorCountdownDefaultTime(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "projector_countdown_default_time"} + key, err := dskey.FromParts("meeting", meetingID, "projector_countdown_default_time") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4190,7 +5535,11 @@ func (r *Fetch) Meeting_ProjectorCountdownDefaultTime(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ProjectorCountdownIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "projector_countdown_ids"} + key, err := dskey.FromParts("meeting", meetingID, "projector_countdown_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4200,7 +5549,11 @@ func (r *Fetch) Meeting_ProjectorCountdownIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ProjectorCountdownWarningTime(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "projector_countdown_warning_time"} + key, err := dskey.FromParts("meeting", meetingID, "projector_countdown_warning_time") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4210,7 +5563,11 @@ func (r *Fetch) Meeting_ProjectorCountdownWarningTime(meetingID int) *ValueInt { } func (r *Fetch) Meeting_ProjectorIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "projector_ids"} + key, err := dskey.FromParts("meeting", meetingID, "projector_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4220,7 +5577,11 @@ func (r *Fetch) Meeting_ProjectorIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ProjectorMessageIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "projector_message_ids"} + key, err := dskey.FromParts("meeting", meetingID, "projector_message_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4230,7 +5591,11 @@ func (r *Fetch) Meeting_ProjectorMessageIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_ReferenceProjectorID(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "reference_projector_id"} + key, err := dskey.FromParts("meeting", meetingID, "reference_projector_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4240,7 +5605,11 @@ func (r *Fetch) Meeting_ReferenceProjectorID(meetingID int) *ValueInt { } func (r *Fetch) Meeting_SpeakerIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "speaker_ids"} + key, err := dskey.FromParts("meeting", meetingID, "speaker_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4250,7 +5619,11 @@ func (r *Fetch) Meeting_SpeakerIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_StartTime(meetingID int) *ValueInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "start_time"} + key, err := dskey.FromParts("meeting", meetingID, "start_time") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4260,7 +5633,11 @@ func (r *Fetch) Meeting_StartTime(meetingID int) *ValueInt { } func (r *Fetch) Meeting_TagIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "tag_ids"} + key, err := dskey.FromParts("meeting", meetingID, "tag_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4270,7 +5647,11 @@ func (r *Fetch) Meeting_TagIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_TemplateForOrganizationID(meetingID int) *ValueMaybeInt { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "template_for_organization_id"} + key, err := dskey.FromParts("meeting", meetingID, "template_for_organization_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -4280,7 +5661,11 @@ func (r *Fetch) Meeting_TemplateForOrganizationID(meetingID int) *ValueMaybeInt } func (r *Fetch) Meeting_TopicIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "topic_ids"} + key, err := dskey.FromParts("meeting", meetingID, "topic_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4290,7 +5675,11 @@ func (r *Fetch) Meeting_TopicIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_TopicPollDefaultGroupIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "topic_poll_default_group_ids"} + key, err := dskey.FromParts("meeting", meetingID, "topic_poll_default_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4300,7 +5689,11 @@ func (r *Fetch) Meeting_TopicPollDefaultGroupIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_UserIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "user_ids"} + key, err := dskey.FromParts("meeting", meetingID, "user_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4310,7 +5703,11 @@ func (r *Fetch) Meeting_UserIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_UsersAllowSelfSetPresent(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_allow_self_set_present"} + key, err := dskey.FromParts("meeting", meetingID, "users_allow_self_set_present") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4320,7 +5717,11 @@ func (r *Fetch) Meeting_UsersAllowSelfSetPresent(meetingID int) *ValueBool { } func (r *Fetch) Meeting_UsersEmailBody(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_email_body"} + key, err := dskey.FromParts("meeting", meetingID, "users_email_body") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4330,7 +5731,11 @@ func (r *Fetch) Meeting_UsersEmailBody(meetingID int) *ValueString { } func (r *Fetch) Meeting_UsersEmailReplyto(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_email_replyto"} + key, err := dskey.FromParts("meeting", meetingID, "users_email_replyto") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4340,7 +5745,11 @@ func (r *Fetch) Meeting_UsersEmailReplyto(meetingID int) *ValueString { } func (r *Fetch) Meeting_UsersEmailSender(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_email_sender"} + key, err := dskey.FromParts("meeting", meetingID, "users_email_sender") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4350,7 +5759,11 @@ func (r *Fetch) Meeting_UsersEmailSender(meetingID int) *ValueString { } func (r *Fetch) Meeting_UsersEmailSubject(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_email_subject"} + key, err := dskey.FromParts("meeting", meetingID, "users_email_subject") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4360,7 +5773,11 @@ func (r *Fetch) Meeting_UsersEmailSubject(meetingID int) *ValueString { } func (r *Fetch) Meeting_UsersEnablePresenceView(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_enable_presence_view"} + key, err := dskey.FromParts("meeting", meetingID, "users_enable_presence_view") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4370,7 +5787,11 @@ func (r *Fetch) Meeting_UsersEnablePresenceView(meetingID int) *ValueBool { } func (r *Fetch) Meeting_UsersEnableVoteDelegations(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_enable_vote_delegations"} + key, err := dskey.FromParts("meeting", meetingID, "users_enable_vote_delegations") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4380,7 +5801,11 @@ func (r *Fetch) Meeting_UsersEnableVoteDelegations(meetingID int) *ValueBool { } func (r *Fetch) Meeting_UsersEnableVoteWeight(meetingID int) *ValueBool { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_enable_vote_weight"} + key, err := dskey.FromParts("meeting", meetingID, "users_enable_vote_weight") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4390,7 +5815,11 @@ func (r *Fetch) Meeting_UsersEnableVoteWeight(meetingID int) *ValueBool { } func (r *Fetch) Meeting_UsersPdfWelcometext(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_pdf_welcometext"} + key, err := dskey.FromParts("meeting", meetingID, "users_pdf_welcometext") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4400,7 +5829,11 @@ func (r *Fetch) Meeting_UsersPdfWelcometext(meetingID int) *ValueString { } func (r *Fetch) Meeting_UsersPdfWelcometitle(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_pdf_welcometitle"} + key, err := dskey.FromParts("meeting", meetingID, "users_pdf_welcometitle") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4410,7 +5843,11 @@ func (r *Fetch) Meeting_UsersPdfWelcometitle(meetingID int) *ValueString { } func (r *Fetch) Meeting_UsersPdfWlanEncryption(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_pdf_wlan_encryption"} + key, err := dskey.FromParts("meeting", meetingID, "users_pdf_wlan_encryption") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4420,7 +5857,11 @@ func (r *Fetch) Meeting_UsersPdfWlanEncryption(meetingID int) *ValueString { } func (r *Fetch) Meeting_UsersPdfWlanPassword(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_pdf_wlan_password"} + key, err := dskey.FromParts("meeting", meetingID, "users_pdf_wlan_password") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4430,7 +5871,11 @@ func (r *Fetch) Meeting_UsersPdfWlanPassword(meetingID int) *ValueString { } func (r *Fetch) Meeting_UsersPdfWlanSsid(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "users_pdf_wlan_ssid"} + key, err := dskey.FromParts("meeting", meetingID, "users_pdf_wlan_ssid") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4440,7 +5885,11 @@ func (r *Fetch) Meeting_UsersPdfWlanSsid(meetingID int) *ValueString { } func (r *Fetch) Meeting_VoteIDs(meetingID int) *ValueIntSlice { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "vote_ids"} + key, err := dskey.FromParts("meeting", meetingID, "vote_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4450,7 +5899,11 @@ func (r *Fetch) Meeting_VoteIDs(meetingID int) *ValueIntSlice { } func (r *Fetch) Meeting_WelcomeText(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "welcome_text"} + key, err := dskey.FromParts("meeting", meetingID, "welcome_text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4460,7 +5913,11 @@ func (r *Fetch) Meeting_WelcomeText(meetingID int) *ValueString { } func (r *Fetch) Meeting_WelcomeTitle(meetingID int) *ValueString { - key := dskey.Key{Collection: "meeting", ID: meetingID, Field: "welcome_title"} + key, err := dskey.FromParts("meeting", meetingID, "welcome_title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4470,7 +5927,11 @@ func (r *Fetch) Meeting_WelcomeTitle(meetingID int) *ValueString { } func (r *Fetch) MotionBlock_AgendaItemID(motionBlockID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "agenda_item_id"} + key, err := dskey.FromParts("motion_block", motionBlockID, "agenda_item_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -4480,7 +5941,11 @@ func (r *Fetch) MotionBlock_AgendaItemID(motionBlockID int) *ValueMaybeInt { } func (r *Fetch) MotionBlock_ID(motionBlockID int) *ValueInt { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "id"} + key, err := dskey.FromParts("motion_block", motionBlockID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4490,7 +5955,11 @@ func (r *Fetch) MotionBlock_ID(motionBlockID int) *ValueInt { } func (r *Fetch) MotionBlock_Internal(motionBlockID int) *ValueBool { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "internal"} + key, err := dskey.FromParts("motion_block", motionBlockID, "internal") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4500,7 +5969,11 @@ func (r *Fetch) MotionBlock_Internal(motionBlockID int) *ValueBool { } func (r *Fetch) MotionBlock_ListOfSpeakersID(motionBlockID int) *ValueInt { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "list_of_speakers_id"} + key, err := dskey.FromParts("motion_block", motionBlockID, "list_of_speakers_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4510,7 +5983,11 @@ func (r *Fetch) MotionBlock_ListOfSpeakersID(motionBlockID int) *ValueInt { } func (r *Fetch) MotionBlock_MeetingID(motionBlockID int) *ValueInt { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_block", motionBlockID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4520,7 +5997,11 @@ func (r *Fetch) MotionBlock_MeetingID(motionBlockID int) *ValueInt { } func (r *Fetch) MotionBlock_MotionIDs(motionBlockID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "motion_ids"} + key, err := dskey.FromParts("motion_block", motionBlockID, "motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4530,7 +6011,11 @@ func (r *Fetch) MotionBlock_MotionIDs(motionBlockID int) *ValueIntSlice { } func (r *Fetch) MotionBlock_ProjectionIDs(motionBlockID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "projection_ids"} + key, err := dskey.FromParts("motion_block", motionBlockID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4540,7 +6025,11 @@ func (r *Fetch) MotionBlock_ProjectionIDs(motionBlockID int) *ValueIntSlice { } func (r *Fetch) MotionBlock_SequentialNumber(motionBlockID int) *ValueInt { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "sequential_number"} + key, err := dskey.FromParts("motion_block", motionBlockID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4550,7 +6039,11 @@ func (r *Fetch) MotionBlock_SequentialNumber(motionBlockID int) *ValueInt { } func (r *Fetch) MotionBlock_Title(motionBlockID int) *ValueString { - key := dskey.Key{Collection: "motion_block", ID: motionBlockID, Field: "title"} + key, err := dskey.FromParts("motion_block", motionBlockID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4560,7 +6053,11 @@ func (r *Fetch) MotionBlock_Title(motionBlockID int) *ValueString { } func (r *Fetch) MotionCategory_ChildIDs(motionCategoryID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "child_ids"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "child_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4570,7 +6067,11 @@ func (r *Fetch) MotionCategory_ChildIDs(motionCategoryID int) *ValueIntSlice { } func (r *Fetch) MotionCategory_ID(motionCategoryID int) *ValueInt { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "id"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4580,7 +6081,11 @@ func (r *Fetch) MotionCategory_ID(motionCategoryID int) *ValueInt { } func (r *Fetch) MotionCategory_Level(motionCategoryID int) *ValueInt { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "level"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "level") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4590,7 +6095,11 @@ func (r *Fetch) MotionCategory_Level(motionCategoryID int) *ValueInt { } func (r *Fetch) MotionCategory_MeetingID(motionCategoryID int) *ValueInt { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4600,7 +6109,11 @@ func (r *Fetch) MotionCategory_MeetingID(motionCategoryID int) *ValueInt { } func (r *Fetch) MotionCategory_MotionIDs(motionCategoryID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "motion_ids"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4610,7 +6123,11 @@ func (r *Fetch) MotionCategory_MotionIDs(motionCategoryID int) *ValueIntSlice { } func (r *Fetch) MotionCategory_Name(motionCategoryID int) *ValueString { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "name"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4620,7 +6137,11 @@ func (r *Fetch) MotionCategory_Name(motionCategoryID int) *ValueString { } func (r *Fetch) MotionCategory_ParentID(motionCategoryID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "parent_id"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "parent_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -4630,7 +6151,11 @@ func (r *Fetch) MotionCategory_ParentID(motionCategoryID int) *ValueMaybeInt { } func (r *Fetch) MotionCategory_Prefix(motionCategoryID int) *ValueString { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "prefix"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "prefix") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4640,7 +6165,11 @@ func (r *Fetch) MotionCategory_Prefix(motionCategoryID int) *ValueString { } func (r *Fetch) MotionCategory_SequentialNumber(motionCategoryID int) *ValueInt { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "sequential_number"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4650,7 +6179,11 @@ func (r *Fetch) MotionCategory_SequentialNumber(motionCategoryID int) *ValueInt } func (r *Fetch) MotionCategory_Weight(motionCategoryID int) *ValueInt { - key := dskey.Key{Collection: "motion_category", ID: motionCategoryID, Field: "weight"} + key, err := dskey.FromParts("motion_category", motionCategoryID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4660,7 +6193,11 @@ func (r *Fetch) MotionCategory_Weight(motionCategoryID int) *ValueInt { } func (r *Fetch) MotionChangeRecommendation_CreationTime(motionChangeRecommendationID int) *ValueInt { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "creation_time"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "creation_time") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4670,7 +6207,11 @@ func (r *Fetch) MotionChangeRecommendation_CreationTime(motionChangeRecommendati } func (r *Fetch) MotionChangeRecommendation_ID(motionChangeRecommendationID int) *ValueInt { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "id"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4680,7 +6221,11 @@ func (r *Fetch) MotionChangeRecommendation_ID(motionChangeRecommendationID int) } func (r *Fetch) MotionChangeRecommendation_Internal(motionChangeRecommendationID int) *ValueBool { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "internal"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "internal") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4690,7 +6235,11 @@ func (r *Fetch) MotionChangeRecommendation_Internal(motionChangeRecommendationID } func (r *Fetch) MotionChangeRecommendation_LineFrom(motionChangeRecommendationID int) *ValueInt { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "line_from"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "line_from") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4700,7 +6249,11 @@ func (r *Fetch) MotionChangeRecommendation_LineFrom(motionChangeRecommendationID } func (r *Fetch) MotionChangeRecommendation_LineTo(motionChangeRecommendationID int) *ValueInt { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "line_to"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "line_to") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4710,7 +6263,11 @@ func (r *Fetch) MotionChangeRecommendation_LineTo(motionChangeRecommendationID i } func (r *Fetch) MotionChangeRecommendation_MeetingID(motionChangeRecommendationID int) *ValueInt { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4720,7 +6277,11 @@ func (r *Fetch) MotionChangeRecommendation_MeetingID(motionChangeRecommendationI } func (r *Fetch) MotionChangeRecommendation_MotionID(motionChangeRecommendationID int) *ValueInt { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "motion_id"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "motion_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4730,7 +6291,11 @@ func (r *Fetch) MotionChangeRecommendation_MotionID(motionChangeRecommendationID } func (r *Fetch) MotionChangeRecommendation_OtherDescription(motionChangeRecommendationID int) *ValueString { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "other_description"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "other_description") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4740,7 +6305,11 @@ func (r *Fetch) MotionChangeRecommendation_OtherDescription(motionChangeRecommen } func (r *Fetch) MotionChangeRecommendation_Rejected(motionChangeRecommendationID int) *ValueBool { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "rejected"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "rejected") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4750,7 +6319,11 @@ func (r *Fetch) MotionChangeRecommendation_Rejected(motionChangeRecommendationID } func (r *Fetch) MotionChangeRecommendation_Text(motionChangeRecommendationID int) *ValueString { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "text"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4760,7 +6333,11 @@ func (r *Fetch) MotionChangeRecommendation_Text(motionChangeRecommendationID int } func (r *Fetch) MotionChangeRecommendation_Type(motionChangeRecommendationID int) *ValueString { - key := dskey.Key{Collection: "motion_change_recommendation", ID: motionChangeRecommendationID, Field: "type"} + key, err := dskey.FromParts("motion_change_recommendation", motionChangeRecommendationID, "type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4770,7 +6347,11 @@ func (r *Fetch) MotionChangeRecommendation_Type(motionChangeRecommendationID int } func (r *Fetch) MotionCommentSection_CommentIDs(motionCommentSectionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "comment_ids"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "comment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4780,7 +6361,11 @@ func (r *Fetch) MotionCommentSection_CommentIDs(motionCommentSectionID int) *Val } func (r *Fetch) MotionCommentSection_ID(motionCommentSectionID int) *ValueInt { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "id"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4790,7 +6375,11 @@ func (r *Fetch) MotionCommentSection_ID(motionCommentSectionID int) *ValueInt { } func (r *Fetch) MotionCommentSection_MeetingID(motionCommentSectionID int) *ValueInt { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4800,7 +6389,11 @@ func (r *Fetch) MotionCommentSection_MeetingID(motionCommentSectionID int) *Valu } func (r *Fetch) MotionCommentSection_Name(motionCommentSectionID int) *ValueString { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "name"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4810,7 +6403,11 @@ func (r *Fetch) MotionCommentSection_Name(motionCommentSectionID int) *ValueStri } func (r *Fetch) MotionCommentSection_ReadGroupIDs(motionCommentSectionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "read_group_ids"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "read_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4820,7 +6417,11 @@ func (r *Fetch) MotionCommentSection_ReadGroupIDs(motionCommentSectionID int) *V } func (r *Fetch) MotionCommentSection_SequentialNumber(motionCommentSectionID int) *ValueInt { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "sequential_number"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4830,7 +6431,11 @@ func (r *Fetch) MotionCommentSection_SequentialNumber(motionCommentSectionID int } func (r *Fetch) MotionCommentSection_SubmitterCanWrite(motionCommentSectionID int) *ValueBool { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "submitter_can_write"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "submitter_can_write") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4840,7 +6445,11 @@ func (r *Fetch) MotionCommentSection_SubmitterCanWrite(motionCommentSectionID in } func (r *Fetch) MotionCommentSection_Weight(motionCommentSectionID int) *ValueInt { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "weight"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4850,7 +6459,11 @@ func (r *Fetch) MotionCommentSection_Weight(motionCommentSectionID int) *ValueIn } func (r *Fetch) MotionCommentSection_WriteGroupIDs(motionCommentSectionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_comment_section", ID: motionCommentSectionID, Field: "write_group_ids"} + key, err := dskey.FromParts("motion_comment_section", motionCommentSectionID, "write_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -4860,7 +6473,11 @@ func (r *Fetch) MotionCommentSection_WriteGroupIDs(motionCommentSectionID int) * } func (r *Fetch) MotionComment_Comment(motionCommentID int) *ValueString { - key := dskey.Key{Collection: "motion_comment", ID: motionCommentID, Field: "comment"} + key, err := dskey.FromParts("motion_comment", motionCommentID, "comment") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4870,7 +6487,11 @@ func (r *Fetch) MotionComment_Comment(motionCommentID int) *ValueString { } func (r *Fetch) MotionComment_ID(motionCommentID int) *ValueInt { - key := dskey.Key{Collection: "motion_comment", ID: motionCommentID, Field: "id"} + key, err := dskey.FromParts("motion_comment", motionCommentID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4880,7 +6501,11 @@ func (r *Fetch) MotionComment_ID(motionCommentID int) *ValueInt { } func (r *Fetch) MotionComment_MeetingID(motionCommentID int) *ValueInt { - key := dskey.Key{Collection: "motion_comment", ID: motionCommentID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_comment", motionCommentID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4890,7 +6515,11 @@ func (r *Fetch) MotionComment_MeetingID(motionCommentID int) *ValueInt { } func (r *Fetch) MotionComment_MotionID(motionCommentID int) *ValueInt { - key := dskey.Key{Collection: "motion_comment", ID: motionCommentID, Field: "motion_id"} + key, err := dskey.FromParts("motion_comment", motionCommentID, "motion_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4900,7 +6529,11 @@ func (r *Fetch) MotionComment_MotionID(motionCommentID int) *ValueInt { } func (r *Fetch) MotionComment_SectionID(motionCommentID int) *ValueInt { - key := dskey.Key{Collection: "motion_comment", ID: motionCommentID, Field: "section_id"} + key, err := dskey.FromParts("motion_comment", motionCommentID, "section_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4910,7 +6543,11 @@ func (r *Fetch) MotionComment_SectionID(motionCommentID int) *ValueInt { } func (r *Fetch) MotionState_AllowCreatePoll(motionStateID int) *ValueBool { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "allow_create_poll"} + key, err := dskey.FromParts("motion_state", motionStateID, "allow_create_poll") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4920,7 +6557,11 @@ func (r *Fetch) MotionState_AllowCreatePoll(motionStateID int) *ValueBool { } func (r *Fetch) MotionState_AllowMotionForwarding(motionStateID int) *ValueBool { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "allow_motion_forwarding"} + key, err := dskey.FromParts("motion_state", motionStateID, "allow_motion_forwarding") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4930,7 +6571,11 @@ func (r *Fetch) MotionState_AllowMotionForwarding(motionStateID int) *ValueBool } func (r *Fetch) MotionState_AllowSubmitterEdit(motionStateID int) *ValueBool { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "allow_submitter_edit"} + key, err := dskey.FromParts("motion_state", motionStateID, "allow_submitter_edit") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4940,7 +6585,11 @@ func (r *Fetch) MotionState_AllowSubmitterEdit(motionStateID int) *ValueBool { } func (r *Fetch) MotionState_AllowSupport(motionStateID int) *ValueBool { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "allow_support"} + key, err := dskey.FromParts("motion_state", motionStateID, "allow_support") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -4950,7 +6599,11 @@ func (r *Fetch) MotionState_AllowSupport(motionStateID int) *ValueBool { } func (r *Fetch) MotionState_CssClass(motionStateID int) *ValueString { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "css_class"} + key, err := dskey.FromParts("motion_state", motionStateID, "css_class") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -4960,7 +6613,11 @@ func (r *Fetch) MotionState_CssClass(motionStateID int) *ValueString { } func (r *Fetch) MotionState_FirstStateOfWorkflowID(motionStateID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "first_state_of_workflow_id"} + key, err := dskey.FromParts("motion_state", motionStateID, "first_state_of_workflow_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -4970,7 +6627,11 @@ func (r *Fetch) MotionState_FirstStateOfWorkflowID(motionStateID int) *ValueMayb } func (r *Fetch) MotionState_ID(motionStateID int) *ValueInt { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "id"} + key, err := dskey.FromParts("motion_state", motionStateID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4980,7 +6641,11 @@ func (r *Fetch) MotionState_ID(motionStateID int) *ValueInt { } func (r *Fetch) MotionState_MeetingID(motionStateID int) *ValueInt { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_state", motionStateID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -4990,7 +6655,11 @@ func (r *Fetch) MotionState_MeetingID(motionStateID int) *ValueInt { } func (r *Fetch) MotionState_MergeAmendmentIntoFinal(motionStateID int) *ValueString { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "merge_amendment_into_final"} + key, err := dskey.FromParts("motion_state", motionStateID, "merge_amendment_into_final") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5000,7 +6669,11 @@ func (r *Fetch) MotionState_MergeAmendmentIntoFinal(motionStateID int) *ValueStr } func (r *Fetch) MotionState_MotionIDs(motionStateID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "motion_ids"} + key, err := dskey.FromParts("motion_state", motionStateID, "motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5010,7 +6683,11 @@ func (r *Fetch) MotionState_MotionIDs(motionStateID int) *ValueIntSlice { } func (r *Fetch) MotionState_MotionRecommendationIDs(motionStateID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "motion_recommendation_ids"} + key, err := dskey.FromParts("motion_state", motionStateID, "motion_recommendation_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5020,7 +6697,11 @@ func (r *Fetch) MotionState_MotionRecommendationIDs(motionStateID int) *ValueInt } func (r *Fetch) MotionState_Name(motionStateID int) *ValueString { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "name"} + key, err := dskey.FromParts("motion_state", motionStateID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5030,7 +6711,11 @@ func (r *Fetch) MotionState_Name(motionStateID int) *ValueString { } func (r *Fetch) MotionState_NextStateIDs(motionStateID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "next_state_ids"} + key, err := dskey.FromParts("motion_state", motionStateID, "next_state_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5040,7 +6725,11 @@ func (r *Fetch) MotionState_NextStateIDs(motionStateID int) *ValueIntSlice { } func (r *Fetch) MotionState_PreviousStateIDs(motionStateID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "previous_state_ids"} + key, err := dskey.FromParts("motion_state", motionStateID, "previous_state_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5050,7 +6739,11 @@ func (r *Fetch) MotionState_PreviousStateIDs(motionStateID int) *ValueIntSlice { } func (r *Fetch) MotionState_RecommendationLabel(motionStateID int) *ValueString { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "recommendation_label"} + key, err := dskey.FromParts("motion_state", motionStateID, "recommendation_label") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5060,7 +6753,11 @@ func (r *Fetch) MotionState_RecommendationLabel(motionStateID int) *ValueString } func (r *Fetch) MotionState_Restrictions(motionStateID int) *ValueStringSlice { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "restrictions"} + key, err := dskey.FromParts("motion_state", motionStateID, "restrictions") + if err != nil { + r.err = err + return &ValueStringSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueStringSlice) } @@ -5070,7 +6767,11 @@ func (r *Fetch) MotionState_Restrictions(motionStateID int) *ValueStringSlice { } func (r *Fetch) MotionState_SetNumber(motionStateID int) *ValueBool { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "set_number"} + key, err := dskey.FromParts("motion_state", motionStateID, "set_number") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -5080,7 +6781,11 @@ func (r *Fetch) MotionState_SetNumber(motionStateID int) *ValueBool { } func (r *Fetch) MotionState_SetWorkflowTimestamp(motionStateID int) *ValueBool { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "set_workflow_timestamp"} + key, err := dskey.FromParts("motion_state", motionStateID, "set_workflow_timestamp") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -5090,7 +6795,11 @@ func (r *Fetch) MotionState_SetWorkflowTimestamp(motionStateID int) *ValueBool { } func (r *Fetch) MotionState_ShowRecommendationExtensionField(motionStateID int) *ValueBool { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "show_recommendation_extension_field"} + key, err := dskey.FromParts("motion_state", motionStateID, "show_recommendation_extension_field") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -5100,7 +6809,11 @@ func (r *Fetch) MotionState_ShowRecommendationExtensionField(motionStateID int) } func (r *Fetch) MotionState_ShowStateExtensionField(motionStateID int) *ValueBool { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "show_state_extension_field"} + key, err := dskey.FromParts("motion_state", motionStateID, "show_state_extension_field") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -5110,7 +6823,11 @@ func (r *Fetch) MotionState_ShowStateExtensionField(motionStateID int) *ValueBoo } func (r *Fetch) MotionState_SubmitterWithdrawBackIDs(motionStateID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "submitter_withdraw_back_ids"} + key, err := dskey.FromParts("motion_state", motionStateID, "submitter_withdraw_back_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5120,7 +6837,11 @@ func (r *Fetch) MotionState_SubmitterWithdrawBackIDs(motionStateID int) *ValueIn } func (r *Fetch) MotionState_SubmitterWithdrawStateID(motionStateID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "submitter_withdraw_state_id"} + key, err := dskey.FromParts("motion_state", motionStateID, "submitter_withdraw_state_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5130,7 +6851,11 @@ func (r *Fetch) MotionState_SubmitterWithdrawStateID(motionStateID int) *ValueMa } func (r *Fetch) MotionState_Weight(motionStateID int) *ValueInt { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "weight"} + key, err := dskey.FromParts("motion_state", motionStateID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5140,7 +6865,11 @@ func (r *Fetch) MotionState_Weight(motionStateID int) *ValueInt { } func (r *Fetch) MotionState_WorkflowID(motionStateID int) *ValueInt { - key := dskey.Key{Collection: "motion_state", ID: motionStateID, Field: "workflow_id"} + key, err := dskey.FromParts("motion_state", motionStateID, "workflow_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5150,7 +6879,11 @@ func (r *Fetch) MotionState_WorkflowID(motionStateID int) *ValueInt { } func (r *Fetch) MotionStatuteParagraph_ID(motionStatuteParagraphID int) *ValueInt { - key := dskey.Key{Collection: "motion_statute_paragraph", ID: motionStatuteParagraphID, Field: "id"} + key, err := dskey.FromParts("motion_statute_paragraph", motionStatuteParagraphID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5160,7 +6893,11 @@ func (r *Fetch) MotionStatuteParagraph_ID(motionStatuteParagraphID int) *ValueIn } func (r *Fetch) MotionStatuteParagraph_MeetingID(motionStatuteParagraphID int) *ValueInt { - key := dskey.Key{Collection: "motion_statute_paragraph", ID: motionStatuteParagraphID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_statute_paragraph", motionStatuteParagraphID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5170,7 +6907,11 @@ func (r *Fetch) MotionStatuteParagraph_MeetingID(motionStatuteParagraphID int) * } func (r *Fetch) MotionStatuteParagraph_MotionIDs(motionStatuteParagraphID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_statute_paragraph", ID: motionStatuteParagraphID, Field: "motion_ids"} + key, err := dskey.FromParts("motion_statute_paragraph", motionStatuteParagraphID, "motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5180,7 +6921,11 @@ func (r *Fetch) MotionStatuteParagraph_MotionIDs(motionStatuteParagraphID int) * } func (r *Fetch) MotionStatuteParagraph_SequentialNumber(motionStatuteParagraphID int) *ValueInt { - key := dskey.Key{Collection: "motion_statute_paragraph", ID: motionStatuteParagraphID, Field: "sequential_number"} + key, err := dskey.FromParts("motion_statute_paragraph", motionStatuteParagraphID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5190,7 +6935,11 @@ func (r *Fetch) MotionStatuteParagraph_SequentialNumber(motionStatuteParagraphID } func (r *Fetch) MotionStatuteParagraph_Text(motionStatuteParagraphID int) *ValueString { - key := dskey.Key{Collection: "motion_statute_paragraph", ID: motionStatuteParagraphID, Field: "text"} + key, err := dskey.FromParts("motion_statute_paragraph", motionStatuteParagraphID, "text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5200,7 +6949,11 @@ func (r *Fetch) MotionStatuteParagraph_Text(motionStatuteParagraphID int) *Value } func (r *Fetch) MotionStatuteParagraph_Title(motionStatuteParagraphID int) *ValueString { - key := dskey.Key{Collection: "motion_statute_paragraph", ID: motionStatuteParagraphID, Field: "title"} + key, err := dskey.FromParts("motion_statute_paragraph", motionStatuteParagraphID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5210,7 +6963,11 @@ func (r *Fetch) MotionStatuteParagraph_Title(motionStatuteParagraphID int) *Valu } func (r *Fetch) MotionStatuteParagraph_Weight(motionStatuteParagraphID int) *ValueInt { - key := dskey.Key{Collection: "motion_statute_paragraph", ID: motionStatuteParagraphID, Field: "weight"} + key, err := dskey.FromParts("motion_statute_paragraph", motionStatuteParagraphID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5220,7 +6977,11 @@ func (r *Fetch) MotionStatuteParagraph_Weight(motionStatuteParagraphID int) *Val } func (r *Fetch) MotionSubmitter_ID(motionSubmitterID int) *ValueInt { - key := dskey.Key{Collection: "motion_submitter", ID: motionSubmitterID, Field: "id"} + key, err := dskey.FromParts("motion_submitter", motionSubmitterID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5230,7 +6991,11 @@ func (r *Fetch) MotionSubmitter_ID(motionSubmitterID int) *ValueInt { } func (r *Fetch) MotionSubmitter_MeetingID(motionSubmitterID int) *ValueInt { - key := dskey.Key{Collection: "motion_submitter", ID: motionSubmitterID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_submitter", motionSubmitterID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5240,7 +7005,11 @@ func (r *Fetch) MotionSubmitter_MeetingID(motionSubmitterID int) *ValueInt { } func (r *Fetch) MotionSubmitter_MeetingUserID(motionSubmitterID int) *ValueInt { - key := dskey.Key{Collection: "motion_submitter", ID: motionSubmitterID, Field: "meeting_user_id"} + key, err := dskey.FromParts("motion_submitter", motionSubmitterID, "meeting_user_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5250,7 +7019,11 @@ func (r *Fetch) MotionSubmitter_MeetingUserID(motionSubmitterID int) *ValueInt { } func (r *Fetch) MotionSubmitter_MotionID(motionSubmitterID int) *ValueInt { - key := dskey.Key{Collection: "motion_submitter", ID: motionSubmitterID, Field: "motion_id"} + key, err := dskey.FromParts("motion_submitter", motionSubmitterID, "motion_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5260,7 +7033,11 @@ func (r *Fetch) MotionSubmitter_MotionID(motionSubmitterID int) *ValueInt { } func (r *Fetch) MotionSubmitter_Weight(motionSubmitterID int) *ValueInt { - key := dskey.Key{Collection: "motion_submitter", ID: motionSubmitterID, Field: "weight"} + key, err := dskey.FromParts("motion_submitter", motionSubmitterID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5270,7 +7047,11 @@ func (r *Fetch) MotionSubmitter_Weight(motionSubmitterID int) *ValueInt { } func (r *Fetch) MotionWorkflow_DefaultAmendmentWorkflowMeetingID(motionWorkflowID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "default_amendment_workflow_meeting_id"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "default_amendment_workflow_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5280,7 +7061,11 @@ func (r *Fetch) MotionWorkflow_DefaultAmendmentWorkflowMeetingID(motionWorkflowI } func (r *Fetch) MotionWorkflow_DefaultStatuteAmendmentWorkflowMeetingID(motionWorkflowID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "default_statute_amendment_workflow_meeting_id"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "default_statute_amendment_workflow_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5290,7 +7075,11 @@ func (r *Fetch) MotionWorkflow_DefaultStatuteAmendmentWorkflowMeetingID(motionWo } func (r *Fetch) MotionWorkflow_DefaultWorkflowMeetingID(motionWorkflowID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "default_workflow_meeting_id"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "default_workflow_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5300,7 +7089,11 @@ func (r *Fetch) MotionWorkflow_DefaultWorkflowMeetingID(motionWorkflowID int) *V } func (r *Fetch) MotionWorkflow_FirstStateID(motionWorkflowID int) *ValueInt { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "first_state_id"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "first_state_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5310,7 +7103,11 @@ func (r *Fetch) MotionWorkflow_FirstStateID(motionWorkflowID int) *ValueInt { } func (r *Fetch) MotionWorkflow_ID(motionWorkflowID int) *ValueInt { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "id"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5320,7 +7117,11 @@ func (r *Fetch) MotionWorkflow_ID(motionWorkflowID int) *ValueInt { } func (r *Fetch) MotionWorkflow_MeetingID(motionWorkflowID int) *ValueInt { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "meeting_id"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5330,7 +7131,11 @@ func (r *Fetch) MotionWorkflow_MeetingID(motionWorkflowID int) *ValueInt { } func (r *Fetch) MotionWorkflow_Name(motionWorkflowID int) *ValueString { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "name"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5340,7 +7145,11 @@ func (r *Fetch) MotionWorkflow_Name(motionWorkflowID int) *ValueString { } func (r *Fetch) MotionWorkflow_SequentialNumber(motionWorkflowID int) *ValueInt { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "sequential_number"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5350,7 +7159,11 @@ func (r *Fetch) MotionWorkflow_SequentialNumber(motionWorkflowID int) *ValueInt } func (r *Fetch) MotionWorkflow_StateIDs(motionWorkflowID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion_workflow", ID: motionWorkflowID, Field: "state_ids"} + key, err := dskey.FromParts("motion_workflow", motionWorkflowID, "state_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5360,7 +7173,11 @@ func (r *Fetch) MotionWorkflow_StateIDs(motionWorkflowID int) *ValueIntSlice { } func (r *Fetch) Motion_AgendaItemID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "agenda_item_id"} + key, err := dskey.FromParts("motion", motionID, "agenda_item_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5370,7 +7187,11 @@ func (r *Fetch) Motion_AgendaItemID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_AllDerivedMotionIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "all_derived_motion_ids"} + key, err := dskey.FromParts("motion", motionID, "all_derived_motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5380,7 +7201,11 @@ func (r *Fetch) Motion_AllDerivedMotionIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_AllOriginIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "all_origin_ids"} + key, err := dskey.FromParts("motion", motionID, "all_origin_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5390,7 +7215,11 @@ func (r *Fetch) Motion_AllOriginIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_AmendmentIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "amendment_ids"} + key, err := dskey.FromParts("motion", motionID, "amendment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5400,7 +7229,11 @@ func (r *Fetch) Motion_AmendmentIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_AmendmentParagraphs(motionID int) *ValueJSON { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "amendment_paragraphs"} + key, err := dskey.FromParts("motion", motionID, "amendment_paragraphs") + if err != nil { + r.err = err + return &ValueJSON{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueJSON) } @@ -5410,7 +7243,11 @@ func (r *Fetch) Motion_AmendmentParagraphs(motionID int) *ValueJSON { } func (r *Fetch) Motion_AttachmentIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "attachment_ids"} + key, err := dskey.FromParts("motion", motionID, "attachment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5420,7 +7257,11 @@ func (r *Fetch) Motion_AttachmentIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_BlockID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "block_id"} + key, err := dskey.FromParts("motion", motionID, "block_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5430,7 +7271,11 @@ func (r *Fetch) Motion_BlockID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_CategoryID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "category_id"} + key, err := dskey.FromParts("motion", motionID, "category_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5440,7 +7285,11 @@ func (r *Fetch) Motion_CategoryID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_CategoryWeight(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "category_weight"} + key, err := dskey.FromParts("motion", motionID, "category_weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5450,7 +7299,11 @@ func (r *Fetch) Motion_CategoryWeight(motionID int) *ValueInt { } func (r *Fetch) Motion_ChangeRecommendationIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "change_recommendation_ids"} + key, err := dskey.FromParts("motion", motionID, "change_recommendation_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5460,7 +7313,11 @@ func (r *Fetch) Motion_ChangeRecommendationIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_CommentIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "comment_ids"} + key, err := dskey.FromParts("motion", motionID, "comment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5470,7 +7327,11 @@ func (r *Fetch) Motion_CommentIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_Created(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "created"} + key, err := dskey.FromParts("motion", motionID, "created") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5480,7 +7341,11 @@ func (r *Fetch) Motion_Created(motionID int) *ValueInt { } func (r *Fetch) Motion_DerivedMotionIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "derived_motion_ids"} + key, err := dskey.FromParts("motion", motionID, "derived_motion_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5490,7 +7355,11 @@ func (r *Fetch) Motion_DerivedMotionIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_Forwarded(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "forwarded"} + key, err := dskey.FromParts("motion", motionID, "forwarded") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5500,7 +7369,11 @@ func (r *Fetch) Motion_Forwarded(motionID int) *ValueInt { } func (r *Fetch) Motion_ID(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "id"} + key, err := dskey.FromParts("motion", motionID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5510,7 +7383,11 @@ func (r *Fetch) Motion_ID(motionID int) *ValueInt { } func (r *Fetch) Motion_LastModified(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "last_modified"} + key, err := dskey.FromParts("motion", motionID, "last_modified") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5520,7 +7397,11 @@ func (r *Fetch) Motion_LastModified(motionID int) *ValueInt { } func (r *Fetch) Motion_LeadMotionID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "lead_motion_id"} + key, err := dskey.FromParts("motion", motionID, "lead_motion_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5530,7 +7411,11 @@ func (r *Fetch) Motion_LeadMotionID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_ListOfSpeakersID(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "list_of_speakers_id"} + key, err := dskey.FromParts("motion", motionID, "list_of_speakers_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5540,7 +7425,11 @@ func (r *Fetch) Motion_ListOfSpeakersID(motionID int) *ValueInt { } func (r *Fetch) Motion_MeetingID(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "meeting_id"} + key, err := dskey.FromParts("motion", motionID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5550,7 +7439,11 @@ func (r *Fetch) Motion_MeetingID(motionID int) *ValueInt { } func (r *Fetch) Motion_ModifiedFinalVersion(motionID int) *ValueString { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "modified_final_version"} + key, err := dskey.FromParts("motion", motionID, "modified_final_version") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5560,7 +7453,11 @@ func (r *Fetch) Motion_ModifiedFinalVersion(motionID int) *ValueString { } func (r *Fetch) Motion_Number(motionID int) *ValueString { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "number"} + key, err := dskey.FromParts("motion", motionID, "number") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5570,7 +7467,11 @@ func (r *Fetch) Motion_Number(motionID int) *ValueString { } func (r *Fetch) Motion_NumberValue(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "number_value"} + key, err := dskey.FromParts("motion", motionID, "number_value") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5580,7 +7481,11 @@ func (r *Fetch) Motion_NumberValue(motionID int) *ValueInt { } func (r *Fetch) Motion_OptionIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "option_ids"} + key, err := dskey.FromParts("motion", motionID, "option_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5590,7 +7495,11 @@ func (r *Fetch) Motion_OptionIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_OriginID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "origin_id"} + key, err := dskey.FromParts("motion", motionID, "origin_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5600,7 +7509,11 @@ func (r *Fetch) Motion_OriginID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_OriginMeetingID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "origin_meeting_id"} + key, err := dskey.FromParts("motion", motionID, "origin_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5610,7 +7523,11 @@ func (r *Fetch) Motion_OriginMeetingID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_PersonalNoteIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "personal_note_ids"} + key, err := dskey.FromParts("motion", motionID, "personal_note_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5620,7 +7537,11 @@ func (r *Fetch) Motion_PersonalNoteIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_PollIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "poll_ids"} + key, err := dskey.FromParts("motion", motionID, "poll_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5630,7 +7551,11 @@ func (r *Fetch) Motion_PollIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_ProjectionIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "projection_ids"} + key, err := dskey.FromParts("motion", motionID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5640,7 +7565,11 @@ func (r *Fetch) Motion_ProjectionIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_Reason(motionID int) *ValueString { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "reason"} + key, err := dskey.FromParts("motion", motionID, "reason") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5650,7 +7579,11 @@ func (r *Fetch) Motion_Reason(motionID int) *ValueString { } func (r *Fetch) Motion_RecommendationExtension(motionID int) *ValueString { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "recommendation_extension"} + key, err := dskey.FromParts("motion", motionID, "recommendation_extension") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5660,7 +7593,11 @@ func (r *Fetch) Motion_RecommendationExtension(motionID int) *ValueString { } func (r *Fetch) Motion_RecommendationExtensionReferenceIDs(motionID int) *ValueStringSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "recommendation_extension_reference_ids"} + key, err := dskey.FromParts("motion", motionID, "recommendation_extension_reference_ids") + if err != nil { + r.err = err + return &ValueStringSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueStringSlice) } @@ -5670,7 +7607,11 @@ func (r *Fetch) Motion_RecommendationExtensionReferenceIDs(motionID int) *ValueS } func (r *Fetch) Motion_RecommendationID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "recommendation_id"} + key, err := dskey.FromParts("motion", motionID, "recommendation_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5680,7 +7621,11 @@ func (r *Fetch) Motion_RecommendationID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_ReferencedInMotionRecommendationExtensionIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "referenced_in_motion_recommendation_extension_ids"} + key, err := dskey.FromParts("motion", motionID, "referenced_in_motion_recommendation_extension_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5690,7 +7635,11 @@ func (r *Fetch) Motion_ReferencedInMotionRecommendationExtensionIDs(motionID int } func (r *Fetch) Motion_ReferencedInMotionStateExtensionIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "referenced_in_motion_state_extension_ids"} + key, err := dskey.FromParts("motion", motionID, "referenced_in_motion_state_extension_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5700,7 +7649,11 @@ func (r *Fetch) Motion_ReferencedInMotionStateExtensionIDs(motionID int) *ValueI } func (r *Fetch) Motion_SequentialNumber(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "sequential_number"} + key, err := dskey.FromParts("motion", motionID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5710,7 +7663,11 @@ func (r *Fetch) Motion_SequentialNumber(motionID int) *ValueInt { } func (r *Fetch) Motion_SortChildIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "sort_child_ids"} + key, err := dskey.FromParts("motion", motionID, "sort_child_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5720,7 +7677,11 @@ func (r *Fetch) Motion_SortChildIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_SortParentID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "sort_parent_id"} + key, err := dskey.FromParts("motion", motionID, "sort_parent_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5730,7 +7691,11 @@ func (r *Fetch) Motion_SortParentID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_SortWeight(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "sort_weight"} + key, err := dskey.FromParts("motion", motionID, "sort_weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5740,7 +7705,11 @@ func (r *Fetch) Motion_SortWeight(motionID int) *ValueInt { } func (r *Fetch) Motion_StartLineNumber(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "start_line_number"} + key, err := dskey.FromParts("motion", motionID, "start_line_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5750,7 +7719,11 @@ func (r *Fetch) Motion_StartLineNumber(motionID int) *ValueInt { } func (r *Fetch) Motion_StateExtension(motionID int) *ValueString { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "state_extension"} + key, err := dskey.FromParts("motion", motionID, "state_extension") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5760,7 +7733,11 @@ func (r *Fetch) Motion_StateExtension(motionID int) *ValueString { } func (r *Fetch) Motion_StateExtensionReferenceIDs(motionID int) *ValueStringSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "state_extension_reference_ids"} + key, err := dskey.FromParts("motion", motionID, "state_extension_reference_ids") + if err != nil { + r.err = err + return &ValueStringSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueStringSlice) } @@ -5770,7 +7747,11 @@ func (r *Fetch) Motion_StateExtensionReferenceIDs(motionID int) *ValueStringSlic } func (r *Fetch) Motion_StateID(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "state_id"} + key, err := dskey.FromParts("motion", motionID, "state_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5780,7 +7761,11 @@ func (r *Fetch) Motion_StateID(motionID int) *ValueInt { } func (r *Fetch) Motion_StatuteParagraphID(motionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "statute_paragraph_id"} + key, err := dskey.FromParts("motion", motionID, "statute_paragraph_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5790,7 +7775,11 @@ func (r *Fetch) Motion_StatuteParagraphID(motionID int) *ValueMaybeInt { } func (r *Fetch) Motion_SubmitterIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "submitter_ids"} + key, err := dskey.FromParts("motion", motionID, "submitter_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5800,7 +7789,11 @@ func (r *Fetch) Motion_SubmitterIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_SupporterMeetingUserIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "supporter_meeting_user_ids"} + key, err := dskey.FromParts("motion", motionID, "supporter_meeting_user_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5810,7 +7803,11 @@ func (r *Fetch) Motion_SupporterMeetingUserIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_TagIDs(motionID int) *ValueIntSlice { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "tag_ids"} + key, err := dskey.FromParts("motion", motionID, "tag_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5820,7 +7817,11 @@ func (r *Fetch) Motion_TagIDs(motionID int) *ValueIntSlice { } func (r *Fetch) Motion_Text(motionID int) *ValueString { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "text"} + key, err := dskey.FromParts("motion", motionID, "text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5830,7 +7831,11 @@ func (r *Fetch) Motion_Text(motionID int) *ValueString { } func (r *Fetch) Motion_Title(motionID int) *ValueString { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "title"} + key, err := dskey.FromParts("motion", motionID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5840,7 +7845,11 @@ func (r *Fetch) Motion_Title(motionID int) *ValueString { } func (r *Fetch) Motion_WorkflowTimestamp(motionID int) *ValueInt { - key := dskey.Key{Collection: "motion", ID: motionID, Field: "workflow_timestamp"} + key, err := dskey.FromParts("motion", motionID, "workflow_timestamp") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5850,7 +7859,11 @@ func (r *Fetch) Motion_WorkflowTimestamp(motionID int) *ValueInt { } func (r *Fetch) Option_Abstain(optionID int) *ValueString { - key := dskey.Key{Collection: "option", ID: optionID, Field: "abstain"} + key, err := dskey.FromParts("option", optionID, "abstain") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5860,7 +7873,11 @@ func (r *Fetch) Option_Abstain(optionID int) *ValueString { } func (r *Fetch) Option_ContentObjectID(optionID int) *ValueMaybeString { - key := dskey.Key{Collection: "option", ID: optionID, Field: "content_object_id"} + key, err := dskey.FromParts("option", optionID, "content_object_id") + if err != nil { + r.err = err + return &ValueMaybeString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeString) } @@ -5870,7 +7887,11 @@ func (r *Fetch) Option_ContentObjectID(optionID int) *ValueMaybeString { } func (r *Fetch) Option_ID(optionID int) *ValueInt { - key := dskey.Key{Collection: "option", ID: optionID, Field: "id"} + key, err := dskey.FromParts("option", optionID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5880,7 +7901,11 @@ func (r *Fetch) Option_ID(optionID int) *ValueInt { } func (r *Fetch) Option_MeetingID(optionID int) *ValueInt { - key := dskey.Key{Collection: "option", ID: optionID, Field: "meeting_id"} + key, err := dskey.FromParts("option", optionID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5890,7 +7915,11 @@ func (r *Fetch) Option_MeetingID(optionID int) *ValueInt { } func (r *Fetch) Option_No(optionID int) *ValueString { - key := dskey.Key{Collection: "option", ID: optionID, Field: "no"} + key, err := dskey.FromParts("option", optionID, "no") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5900,7 +7929,11 @@ func (r *Fetch) Option_No(optionID int) *ValueString { } func (r *Fetch) Option_PollID(optionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "option", ID: optionID, Field: "poll_id"} + key, err := dskey.FromParts("option", optionID, "poll_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5910,7 +7943,11 @@ func (r *Fetch) Option_PollID(optionID int) *ValueMaybeInt { } func (r *Fetch) Option_Text(optionID int) *ValueString { - key := dskey.Key{Collection: "option", ID: optionID, Field: "text"} + key, err := dskey.FromParts("option", optionID, "text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5920,7 +7957,11 @@ func (r *Fetch) Option_Text(optionID int) *ValueString { } func (r *Fetch) Option_UsedAsGlobalOptionInPollID(optionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "option", ID: optionID, Field: "used_as_global_option_in_poll_id"} + key, err := dskey.FromParts("option", optionID, "used_as_global_option_in_poll_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -5930,7 +7971,11 @@ func (r *Fetch) Option_UsedAsGlobalOptionInPollID(optionID int) *ValueMaybeInt { } func (r *Fetch) Option_VoteIDs(optionID int) *ValueIntSlice { - key := dskey.Key{Collection: "option", ID: optionID, Field: "vote_ids"} + key, err := dskey.FromParts("option", optionID, "vote_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -5940,7 +7985,11 @@ func (r *Fetch) Option_VoteIDs(optionID int) *ValueIntSlice { } func (r *Fetch) Option_Weight(optionID int) *ValueInt { - key := dskey.Key{Collection: "option", ID: optionID, Field: "weight"} + key, err := dskey.FromParts("option", optionID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5950,7 +7999,11 @@ func (r *Fetch) Option_Weight(optionID int) *ValueInt { } func (r *Fetch) Option_Yes(optionID int) *ValueString { - key := dskey.Key{Collection: "option", ID: optionID, Field: "yes"} + key, err := dskey.FromParts("option", optionID, "yes") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5960,7 +8013,11 @@ func (r *Fetch) Option_Yes(optionID int) *ValueString { } func (r *Fetch) OrganizationTag_Color(organizationTagID int) *ValueString { - key := dskey.Key{Collection: "organization_tag", ID: organizationTagID, Field: "color"} + key, err := dskey.FromParts("organization_tag", organizationTagID, "color") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5970,7 +8027,11 @@ func (r *Fetch) OrganizationTag_Color(organizationTagID int) *ValueString { } func (r *Fetch) OrganizationTag_ID(organizationTagID int) *ValueInt { - key := dskey.Key{Collection: "organization_tag", ID: organizationTagID, Field: "id"} + key, err := dskey.FromParts("organization_tag", organizationTagID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -5980,7 +8041,11 @@ func (r *Fetch) OrganizationTag_ID(organizationTagID int) *ValueInt { } func (r *Fetch) OrganizationTag_Name(organizationTagID int) *ValueString { - key := dskey.Key{Collection: "organization_tag", ID: organizationTagID, Field: "name"} + key, err := dskey.FromParts("organization_tag", organizationTagID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -5990,7 +8055,11 @@ func (r *Fetch) OrganizationTag_Name(organizationTagID int) *ValueString { } func (r *Fetch) OrganizationTag_OrganizationID(organizationTagID int) *ValueInt { - key := dskey.Key{Collection: "organization_tag", ID: organizationTagID, Field: "organization_id"} + key, err := dskey.FromParts("organization_tag", organizationTagID, "organization_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6000,7 +8069,11 @@ func (r *Fetch) OrganizationTag_OrganizationID(organizationTagID int) *ValueInt } func (r *Fetch) OrganizationTag_TaggedIDs(organizationTagID int) *ValueStringSlice { - key := dskey.Key{Collection: "organization_tag", ID: organizationTagID, Field: "tagged_ids"} + key, err := dskey.FromParts("organization_tag", organizationTagID, "tagged_ids") + if err != nil { + r.err = err + return &ValueStringSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueStringSlice) } @@ -6010,7 +8083,11 @@ func (r *Fetch) OrganizationTag_TaggedIDs(organizationTagID int) *ValueStringSli } func (r *Fetch) Organization_ActiveMeetingIDs(organizationID int) *ValueIntSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "active_meeting_ids"} + key, err := dskey.FromParts("organization", organizationID, "active_meeting_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6020,7 +8097,11 @@ func (r *Fetch) Organization_ActiveMeetingIDs(organizationID int) *ValueIntSlice } func (r *Fetch) Organization_ArchivedMeetingIDs(organizationID int) *ValueIntSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "archived_meeting_ids"} + key, err := dskey.FromParts("organization", organizationID, "archived_meeting_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6030,7 +8111,11 @@ func (r *Fetch) Organization_ArchivedMeetingIDs(organizationID int) *ValueIntSli } func (r *Fetch) Organization_CommitteeIDs(organizationID int) *ValueIntSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "committee_ids"} + key, err := dskey.FromParts("organization", organizationID, "committee_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6040,7 +8125,11 @@ func (r *Fetch) Organization_CommitteeIDs(organizationID int) *ValueIntSlice { } func (r *Fetch) Organization_DefaultLanguage(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "default_language"} + key, err := dskey.FromParts("organization", organizationID, "default_language") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6050,7 +8139,11 @@ func (r *Fetch) Organization_DefaultLanguage(organizationID int) *ValueString { } func (r *Fetch) Organization_Description(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "description"} + key, err := dskey.FromParts("organization", organizationID, "description") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6060,7 +8153,11 @@ func (r *Fetch) Organization_Description(organizationID int) *ValueString { } func (r *Fetch) Organization_EnableChat(organizationID int) *ValueBool { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "enable_chat"} + key, err := dskey.FromParts("organization", organizationID, "enable_chat") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6070,7 +8167,11 @@ func (r *Fetch) Organization_EnableChat(organizationID int) *ValueBool { } func (r *Fetch) Organization_EnableElectronicVoting(organizationID int) *ValueBool { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "enable_electronic_voting"} + key, err := dskey.FromParts("organization", organizationID, "enable_electronic_voting") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6080,7 +8181,11 @@ func (r *Fetch) Organization_EnableElectronicVoting(organizationID int) *ValueBo } func (r *Fetch) Organization_Genders(organizationID int) *ValueStringSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "genders"} + key, err := dskey.FromParts("organization", organizationID, "genders") + if err != nil { + r.err = err + return &ValueStringSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueStringSlice) } @@ -6090,7 +8195,11 @@ func (r *Fetch) Organization_Genders(organizationID int) *ValueStringSlice { } func (r *Fetch) Organization_ID(organizationID int) *ValueInt { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "id"} + key, err := dskey.FromParts("organization", organizationID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6100,7 +8209,11 @@ func (r *Fetch) Organization_ID(organizationID int) *ValueInt { } func (r *Fetch) Organization_LegalNotice(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "legal_notice"} + key, err := dskey.FromParts("organization", organizationID, "legal_notice") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6110,7 +8223,11 @@ func (r *Fetch) Organization_LegalNotice(organizationID int) *ValueString { } func (r *Fetch) Organization_LimitOfMeetings(organizationID int) *ValueInt { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "limit_of_meetings"} + key, err := dskey.FromParts("organization", organizationID, "limit_of_meetings") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6120,7 +8237,11 @@ func (r *Fetch) Organization_LimitOfMeetings(organizationID int) *ValueInt { } func (r *Fetch) Organization_LimitOfUsers(organizationID int) *ValueInt { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "limit_of_users"} + key, err := dskey.FromParts("organization", organizationID, "limit_of_users") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6130,7 +8251,11 @@ func (r *Fetch) Organization_LimitOfUsers(organizationID int) *ValueInt { } func (r *Fetch) Organization_LoginText(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "login_text"} + key, err := dskey.FromParts("organization", organizationID, "login_text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6140,7 +8265,11 @@ func (r *Fetch) Organization_LoginText(organizationID int) *ValueString { } func (r *Fetch) Organization_MediafileIDs(organizationID int) *ValueIntSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "mediafile_ids"} + key, err := dskey.FromParts("organization", organizationID, "mediafile_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6150,7 +8279,11 @@ func (r *Fetch) Organization_MediafileIDs(organizationID int) *ValueIntSlice { } func (r *Fetch) Organization_Name(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "name"} + key, err := dskey.FromParts("organization", organizationID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6160,7 +8293,11 @@ func (r *Fetch) Organization_Name(organizationID int) *ValueString { } func (r *Fetch) Organization_OrganizationTagIDs(organizationID int) *ValueIntSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "organization_tag_ids"} + key, err := dskey.FromParts("organization", organizationID, "organization_tag_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6170,7 +8307,11 @@ func (r *Fetch) Organization_OrganizationTagIDs(organizationID int) *ValueIntSli } func (r *Fetch) Organization_PrivacyPolicy(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "privacy_policy"} + key, err := dskey.FromParts("organization", organizationID, "privacy_policy") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6180,7 +8321,11 @@ func (r *Fetch) Organization_PrivacyPolicy(organizationID int) *ValueString { } func (r *Fetch) Organization_ResetPasswordVerboseErrors(organizationID int) *ValueBool { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "reset_password_verbose_errors"} + key, err := dskey.FromParts("organization", organizationID, "reset_password_verbose_errors") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6190,7 +8335,11 @@ func (r *Fetch) Organization_ResetPasswordVerboseErrors(organizationID int) *Val } func (r *Fetch) Organization_SamlAttrMapping(organizationID int) *ValueJSON { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "saml_attr_mapping"} + key, err := dskey.FromParts("organization", organizationID, "saml_attr_mapping") + if err != nil { + r.err = err + return &ValueJSON{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueJSON) } @@ -6200,7 +8349,11 @@ func (r *Fetch) Organization_SamlAttrMapping(organizationID int) *ValueJSON { } func (r *Fetch) Organization_SamlEnabled(organizationID int) *ValueBool { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "saml_enabled"} + key, err := dskey.FromParts("organization", organizationID, "saml_enabled") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6210,7 +8363,11 @@ func (r *Fetch) Organization_SamlEnabled(organizationID int) *ValueBool { } func (r *Fetch) Organization_SamlLoginButtonText(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "saml_login_button_text"} + key, err := dskey.FromParts("organization", organizationID, "saml_login_button_text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6220,7 +8377,11 @@ func (r *Fetch) Organization_SamlLoginButtonText(organizationID int) *ValueStrin } func (r *Fetch) Organization_SamlMetadataIDp(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "saml_metadata_idp"} + key, err := dskey.FromParts("organization", organizationID, "saml_metadata_idp") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6230,7 +8391,11 @@ func (r *Fetch) Organization_SamlMetadataIDp(organizationID int) *ValueString { } func (r *Fetch) Organization_SamlMetadataSp(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "saml_metadata_sp"} + key, err := dskey.FromParts("organization", organizationID, "saml_metadata_sp") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6240,7 +8405,11 @@ func (r *Fetch) Organization_SamlMetadataSp(organizationID int) *ValueString { } func (r *Fetch) Organization_SamlPrivateKey(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "saml_private_key"} + key, err := dskey.FromParts("organization", organizationID, "saml_private_key") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6250,7 +8419,11 @@ func (r *Fetch) Organization_SamlPrivateKey(organizationID int) *ValueString { } func (r *Fetch) Organization_TemplateMeetingIDs(organizationID int) *ValueIntSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "template_meeting_ids"} + key, err := dskey.FromParts("organization", organizationID, "template_meeting_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6260,7 +8433,11 @@ func (r *Fetch) Organization_TemplateMeetingIDs(organizationID int) *ValueIntSli } func (r *Fetch) Organization_ThemeID(organizationID int) *ValueInt { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "theme_id"} + key, err := dskey.FromParts("organization", organizationID, "theme_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6270,7 +8447,11 @@ func (r *Fetch) Organization_ThemeID(organizationID int) *ValueInt { } func (r *Fetch) Organization_ThemeIDs(organizationID int) *ValueIntSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "theme_ids"} + key, err := dskey.FromParts("organization", organizationID, "theme_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6280,7 +8461,11 @@ func (r *Fetch) Organization_ThemeIDs(organizationID int) *ValueIntSlice { } func (r *Fetch) Organization_Url(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "url"} + key, err := dskey.FromParts("organization", organizationID, "url") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6290,7 +8475,11 @@ func (r *Fetch) Organization_Url(organizationID int) *ValueString { } func (r *Fetch) Organization_UserIDs(organizationID int) *ValueIntSlice { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "user_ids"} + key, err := dskey.FromParts("organization", organizationID, "user_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6300,7 +8489,11 @@ func (r *Fetch) Organization_UserIDs(organizationID int) *ValueIntSlice { } func (r *Fetch) Organization_UsersEmailBody(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "users_email_body"} + key, err := dskey.FromParts("organization", organizationID, "users_email_body") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6310,7 +8503,11 @@ func (r *Fetch) Organization_UsersEmailBody(organizationID int) *ValueString { } func (r *Fetch) Organization_UsersEmailReplyto(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "users_email_replyto"} + key, err := dskey.FromParts("organization", organizationID, "users_email_replyto") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6320,7 +8517,11 @@ func (r *Fetch) Organization_UsersEmailReplyto(organizationID int) *ValueString } func (r *Fetch) Organization_UsersEmailSender(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "users_email_sender"} + key, err := dskey.FromParts("organization", organizationID, "users_email_sender") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6330,7 +8531,11 @@ func (r *Fetch) Organization_UsersEmailSender(organizationID int) *ValueString { } func (r *Fetch) Organization_UsersEmailSubject(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "users_email_subject"} + key, err := dskey.FromParts("organization", organizationID, "users_email_subject") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6340,7 +8545,11 @@ func (r *Fetch) Organization_UsersEmailSubject(organizationID int) *ValueString } func (r *Fetch) Organization_VoteDecryptPublicMainKey(organizationID int) *ValueString { - key := dskey.Key{Collection: "organization", ID: organizationID, Field: "vote_decrypt_public_main_key"} + key, err := dskey.FromParts("organization", organizationID, "vote_decrypt_public_main_key") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6350,7 +8559,11 @@ func (r *Fetch) Organization_VoteDecryptPublicMainKey(organizationID int) *Value } func (r *Fetch) PersonalNote_ContentObjectID(personalNoteID int) *ValueMaybeString { - key := dskey.Key{Collection: "personal_note", ID: personalNoteID, Field: "content_object_id"} + key, err := dskey.FromParts("personal_note", personalNoteID, "content_object_id") + if err != nil { + r.err = err + return &ValueMaybeString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeString) } @@ -6360,7 +8573,11 @@ func (r *Fetch) PersonalNote_ContentObjectID(personalNoteID int) *ValueMaybeStri } func (r *Fetch) PersonalNote_ID(personalNoteID int) *ValueInt { - key := dskey.Key{Collection: "personal_note", ID: personalNoteID, Field: "id"} + key, err := dskey.FromParts("personal_note", personalNoteID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6370,7 +8587,11 @@ func (r *Fetch) PersonalNote_ID(personalNoteID int) *ValueInt { } func (r *Fetch) PersonalNote_MeetingID(personalNoteID int) *ValueInt { - key := dskey.Key{Collection: "personal_note", ID: personalNoteID, Field: "meeting_id"} + key, err := dskey.FromParts("personal_note", personalNoteID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6380,7 +8601,11 @@ func (r *Fetch) PersonalNote_MeetingID(personalNoteID int) *ValueInt { } func (r *Fetch) PersonalNote_MeetingUserID(personalNoteID int) *ValueInt { - key := dskey.Key{Collection: "personal_note", ID: personalNoteID, Field: "meeting_user_id"} + key, err := dskey.FromParts("personal_note", personalNoteID, "meeting_user_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6390,7 +8615,11 @@ func (r *Fetch) PersonalNote_MeetingUserID(personalNoteID int) *ValueInt { } func (r *Fetch) PersonalNote_Note(personalNoteID int) *ValueString { - key := dskey.Key{Collection: "personal_note", ID: personalNoteID, Field: "note"} + key, err := dskey.FromParts("personal_note", personalNoteID, "note") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6400,7 +8629,11 @@ func (r *Fetch) PersonalNote_Note(personalNoteID int) *ValueString { } func (r *Fetch) PersonalNote_Star(personalNoteID int) *ValueBool { - key := dskey.Key{Collection: "personal_note", ID: personalNoteID, Field: "star"} + key, err := dskey.FromParts("personal_note", personalNoteID, "star") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6410,7 +8643,11 @@ func (r *Fetch) PersonalNote_Star(personalNoteID int) *ValueBool { } func (r *Fetch) PointOfOrderCategory_ID(pointOfOrderCategoryID int) *ValueInt { - key := dskey.Key{Collection: "point_of_order_category", ID: pointOfOrderCategoryID, Field: "id"} + key, err := dskey.FromParts("point_of_order_category", pointOfOrderCategoryID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6420,7 +8657,11 @@ func (r *Fetch) PointOfOrderCategory_ID(pointOfOrderCategoryID int) *ValueInt { } func (r *Fetch) PointOfOrderCategory_MeetingID(pointOfOrderCategoryID int) *ValueInt { - key := dskey.Key{Collection: "point_of_order_category", ID: pointOfOrderCategoryID, Field: "meeting_id"} + key, err := dskey.FromParts("point_of_order_category", pointOfOrderCategoryID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6430,7 +8671,11 @@ func (r *Fetch) PointOfOrderCategory_MeetingID(pointOfOrderCategoryID int) *Valu } func (r *Fetch) PointOfOrderCategory_Rank(pointOfOrderCategoryID int) *ValueInt { - key := dskey.Key{Collection: "point_of_order_category", ID: pointOfOrderCategoryID, Field: "rank"} + key, err := dskey.FromParts("point_of_order_category", pointOfOrderCategoryID, "rank") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6440,7 +8685,11 @@ func (r *Fetch) PointOfOrderCategory_Rank(pointOfOrderCategoryID int) *ValueInt } func (r *Fetch) PointOfOrderCategory_SpeakerIDs(pointOfOrderCategoryID int) *ValueIntSlice { - key := dskey.Key{Collection: "point_of_order_category", ID: pointOfOrderCategoryID, Field: "speaker_ids"} + key, err := dskey.FromParts("point_of_order_category", pointOfOrderCategoryID, "speaker_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6450,7 +8699,11 @@ func (r *Fetch) PointOfOrderCategory_SpeakerIDs(pointOfOrderCategoryID int) *Val } func (r *Fetch) PointOfOrderCategory_Text(pointOfOrderCategoryID int) *ValueString { - key := dskey.Key{Collection: "point_of_order_category", ID: pointOfOrderCategoryID, Field: "text"} + key, err := dskey.FromParts("point_of_order_category", pointOfOrderCategoryID, "text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6460,7 +8713,11 @@ func (r *Fetch) PointOfOrderCategory_Text(pointOfOrderCategoryID int) *ValueStri } func (r *Fetch) PollCandidateList_ID(pollCandidateListID int) *ValueInt { - key := dskey.Key{Collection: "poll_candidate_list", ID: pollCandidateListID, Field: "id"} + key, err := dskey.FromParts("poll_candidate_list", pollCandidateListID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6470,7 +8727,11 @@ func (r *Fetch) PollCandidateList_ID(pollCandidateListID int) *ValueInt { } func (r *Fetch) PollCandidateList_MeetingID(pollCandidateListID int) *ValueInt { - key := dskey.Key{Collection: "poll_candidate_list", ID: pollCandidateListID, Field: "meeting_id"} + key, err := dskey.FromParts("poll_candidate_list", pollCandidateListID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6480,7 +8741,11 @@ func (r *Fetch) PollCandidateList_MeetingID(pollCandidateListID int) *ValueInt { } func (r *Fetch) PollCandidateList_OptionID(pollCandidateListID int) *ValueInt { - key := dskey.Key{Collection: "poll_candidate_list", ID: pollCandidateListID, Field: "option_id"} + key, err := dskey.FromParts("poll_candidate_list", pollCandidateListID, "option_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6490,7 +8755,11 @@ func (r *Fetch) PollCandidateList_OptionID(pollCandidateListID int) *ValueInt { } func (r *Fetch) PollCandidateList_PollCandidateIDs(pollCandidateListID int) *ValueIntSlice { - key := dskey.Key{Collection: "poll_candidate_list", ID: pollCandidateListID, Field: "poll_candidate_ids"} + key, err := dskey.FromParts("poll_candidate_list", pollCandidateListID, "poll_candidate_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6500,7 +8769,11 @@ func (r *Fetch) PollCandidateList_PollCandidateIDs(pollCandidateListID int) *Val } func (r *Fetch) PollCandidate_ID(pollCandidateID int) *ValueInt { - key := dskey.Key{Collection: "poll_candidate", ID: pollCandidateID, Field: "id"} + key, err := dskey.FromParts("poll_candidate", pollCandidateID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6510,7 +8783,11 @@ func (r *Fetch) PollCandidate_ID(pollCandidateID int) *ValueInt { } func (r *Fetch) PollCandidate_MeetingID(pollCandidateID int) *ValueInt { - key := dskey.Key{Collection: "poll_candidate", ID: pollCandidateID, Field: "meeting_id"} + key, err := dskey.FromParts("poll_candidate", pollCandidateID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6520,7 +8797,11 @@ func (r *Fetch) PollCandidate_MeetingID(pollCandidateID int) *ValueInt { } func (r *Fetch) PollCandidate_PollCandidateListID(pollCandidateID int) *ValueInt { - key := dskey.Key{Collection: "poll_candidate", ID: pollCandidateID, Field: "poll_candidate_list_id"} + key, err := dskey.FromParts("poll_candidate", pollCandidateID, "poll_candidate_list_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6530,7 +8811,11 @@ func (r *Fetch) PollCandidate_PollCandidateListID(pollCandidateID int) *ValueInt } func (r *Fetch) PollCandidate_UserID(pollCandidateID int) *ValueInt { - key := dskey.Key{Collection: "poll_candidate", ID: pollCandidateID, Field: "user_id"} + key, err := dskey.FromParts("poll_candidate", pollCandidateID, "user_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6540,7 +8825,11 @@ func (r *Fetch) PollCandidate_UserID(pollCandidateID int) *ValueInt { } func (r *Fetch) PollCandidate_Weight(pollCandidateID int) *ValueInt { - key := dskey.Key{Collection: "poll_candidate", ID: pollCandidateID, Field: "weight"} + key, err := dskey.FromParts("poll_candidate", pollCandidateID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6550,7 +8839,11 @@ func (r *Fetch) PollCandidate_Weight(pollCandidateID int) *ValueInt { } func (r *Fetch) Poll_Backend(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "backend"} + key, err := dskey.FromParts("poll", pollID, "backend") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6560,7 +8853,11 @@ func (r *Fetch) Poll_Backend(pollID int) *ValueString { } func (r *Fetch) Poll_ContentObjectID(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "content_object_id"} + key, err := dskey.FromParts("poll", pollID, "content_object_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6570,7 +8867,11 @@ func (r *Fetch) Poll_ContentObjectID(pollID int) *ValueString { } func (r *Fetch) Poll_CryptKey(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "crypt_key"} + key, err := dskey.FromParts("poll", pollID, "crypt_key") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6580,7 +8881,11 @@ func (r *Fetch) Poll_CryptKey(pollID int) *ValueString { } func (r *Fetch) Poll_CryptSignature(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "crypt_signature"} + key, err := dskey.FromParts("poll", pollID, "crypt_signature") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6590,7 +8895,11 @@ func (r *Fetch) Poll_CryptSignature(pollID int) *ValueString { } func (r *Fetch) Poll_Description(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "description"} + key, err := dskey.FromParts("poll", pollID, "description") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6600,7 +8909,11 @@ func (r *Fetch) Poll_Description(pollID int) *ValueString { } func (r *Fetch) Poll_EntitledGroupIDs(pollID int) *ValueIntSlice { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "entitled_group_ids"} + key, err := dskey.FromParts("poll", pollID, "entitled_group_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6610,7 +8923,11 @@ func (r *Fetch) Poll_EntitledGroupIDs(pollID int) *ValueIntSlice { } func (r *Fetch) Poll_EntitledUsersAtStop(pollID int) *ValueJSON { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "entitled_users_at_stop"} + key, err := dskey.FromParts("poll", pollID, "entitled_users_at_stop") + if err != nil { + r.err = err + return &ValueJSON{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueJSON) } @@ -6620,7 +8937,11 @@ func (r *Fetch) Poll_EntitledUsersAtStop(pollID int) *ValueJSON { } func (r *Fetch) Poll_GlobalAbstain(pollID int) *ValueBool { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "global_abstain"} + key, err := dskey.FromParts("poll", pollID, "global_abstain") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6630,7 +8951,11 @@ func (r *Fetch) Poll_GlobalAbstain(pollID int) *ValueBool { } func (r *Fetch) Poll_GlobalNo(pollID int) *ValueBool { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "global_no"} + key, err := dskey.FromParts("poll", pollID, "global_no") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6640,7 +8965,11 @@ func (r *Fetch) Poll_GlobalNo(pollID int) *ValueBool { } func (r *Fetch) Poll_GlobalOptionID(pollID int) *ValueMaybeInt { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "global_option_id"} + key, err := dskey.FromParts("poll", pollID, "global_option_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -6650,7 +8979,11 @@ func (r *Fetch) Poll_GlobalOptionID(pollID int) *ValueMaybeInt { } func (r *Fetch) Poll_GlobalYes(pollID int) *ValueBool { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "global_yes"} + key, err := dskey.FromParts("poll", pollID, "global_yes") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6660,7 +8993,11 @@ func (r *Fetch) Poll_GlobalYes(pollID int) *ValueBool { } func (r *Fetch) Poll_ID(pollID int) *ValueInt { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "id"} + key, err := dskey.FromParts("poll", pollID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6670,7 +9007,11 @@ func (r *Fetch) Poll_ID(pollID int) *ValueInt { } func (r *Fetch) Poll_IsPseudoanonymized(pollID int) *ValueBool { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "is_pseudoanonymized"} + key, err := dskey.FromParts("poll", pollID, "is_pseudoanonymized") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6680,7 +9021,11 @@ func (r *Fetch) Poll_IsPseudoanonymized(pollID int) *ValueBool { } func (r *Fetch) Poll_MaxVotesAmount(pollID int) *ValueInt { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "max_votes_amount"} + key, err := dskey.FromParts("poll", pollID, "max_votes_amount") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6690,7 +9035,11 @@ func (r *Fetch) Poll_MaxVotesAmount(pollID int) *ValueInt { } func (r *Fetch) Poll_MaxVotesPerOption(pollID int) *ValueInt { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "max_votes_per_option"} + key, err := dskey.FromParts("poll", pollID, "max_votes_per_option") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6700,7 +9049,11 @@ func (r *Fetch) Poll_MaxVotesPerOption(pollID int) *ValueInt { } func (r *Fetch) Poll_MeetingID(pollID int) *ValueInt { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "meeting_id"} + key, err := dskey.FromParts("poll", pollID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6710,7 +9063,11 @@ func (r *Fetch) Poll_MeetingID(pollID int) *ValueInt { } func (r *Fetch) Poll_MinVotesAmount(pollID int) *ValueInt { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "min_votes_amount"} + key, err := dskey.FromParts("poll", pollID, "min_votes_amount") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6720,7 +9077,11 @@ func (r *Fetch) Poll_MinVotesAmount(pollID int) *ValueInt { } func (r *Fetch) Poll_OnehundredPercentBase(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "onehundred_percent_base"} + key, err := dskey.FromParts("poll", pollID, "onehundred_percent_base") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6730,7 +9091,11 @@ func (r *Fetch) Poll_OnehundredPercentBase(pollID int) *ValueString { } func (r *Fetch) Poll_OptionIDs(pollID int) *ValueIntSlice { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "option_ids"} + key, err := dskey.FromParts("poll", pollID, "option_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6740,7 +9105,11 @@ func (r *Fetch) Poll_OptionIDs(pollID int) *ValueIntSlice { } func (r *Fetch) Poll_Pollmethod(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "pollmethod"} + key, err := dskey.FromParts("poll", pollID, "pollmethod") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6750,7 +9119,11 @@ func (r *Fetch) Poll_Pollmethod(pollID int) *ValueString { } func (r *Fetch) Poll_ProjectionIDs(pollID int) *ValueIntSlice { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "projection_ids"} + key, err := dskey.FromParts("poll", pollID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6760,7 +9133,11 @@ func (r *Fetch) Poll_ProjectionIDs(pollID int) *ValueIntSlice { } func (r *Fetch) Poll_SequentialNumber(pollID int) *ValueInt { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "sequential_number"} + key, err := dskey.FromParts("poll", pollID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6770,7 +9147,11 @@ func (r *Fetch) Poll_SequentialNumber(pollID int) *ValueInt { } func (r *Fetch) Poll_State(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "state"} + key, err := dskey.FromParts("poll", pollID, "state") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6780,7 +9161,11 @@ func (r *Fetch) Poll_State(pollID int) *ValueString { } func (r *Fetch) Poll_Title(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "title"} + key, err := dskey.FromParts("poll", pollID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6790,7 +9175,11 @@ func (r *Fetch) Poll_Title(pollID int) *ValueString { } func (r *Fetch) Poll_Type(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "type"} + key, err := dskey.FromParts("poll", pollID, "type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6800,7 +9189,11 @@ func (r *Fetch) Poll_Type(pollID int) *ValueString { } func (r *Fetch) Poll_VoteCount(pollID int) *ValueInt { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "vote_count"} + key, err := dskey.FromParts("poll", pollID, "vote_count") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6810,7 +9203,11 @@ func (r *Fetch) Poll_VoteCount(pollID int) *ValueInt { } func (r *Fetch) Poll_VotedIDs(pollID int) *ValueIntSlice { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "voted_ids"} + key, err := dskey.FromParts("poll", pollID, "voted_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -6820,7 +9217,11 @@ func (r *Fetch) Poll_VotedIDs(pollID int) *ValueIntSlice { } func (r *Fetch) Poll_VotesRaw(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "votes_raw"} + key, err := dskey.FromParts("poll", pollID, "votes_raw") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6830,7 +9231,11 @@ func (r *Fetch) Poll_VotesRaw(pollID int) *ValueString { } func (r *Fetch) Poll_VotesSignature(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "votes_signature"} + key, err := dskey.FromParts("poll", pollID, "votes_signature") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6840,7 +9245,11 @@ func (r *Fetch) Poll_VotesSignature(pollID int) *ValueString { } func (r *Fetch) Poll_Votescast(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "votescast"} + key, err := dskey.FromParts("poll", pollID, "votescast") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6850,7 +9259,11 @@ func (r *Fetch) Poll_Votescast(pollID int) *ValueString { } func (r *Fetch) Poll_Votesinvalid(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "votesinvalid"} + key, err := dskey.FromParts("poll", pollID, "votesinvalid") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6860,7 +9273,11 @@ func (r *Fetch) Poll_Votesinvalid(pollID int) *ValueString { } func (r *Fetch) Poll_Votesvalid(pollID int) *ValueString { - key := dskey.Key{Collection: "poll", ID: pollID, Field: "votesvalid"} + key, err := dskey.FromParts("poll", pollID, "votesvalid") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6870,7 +9287,11 @@ func (r *Fetch) Poll_Votesvalid(pollID int) *ValueString { } func (r *Fetch) Projection_Content(projectionID int) *ValueJSON { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "content"} + key, err := dskey.FromParts("projection", projectionID, "content") + if err != nil { + r.err = err + return &ValueJSON{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueJSON) } @@ -6880,7 +9301,11 @@ func (r *Fetch) Projection_Content(projectionID int) *ValueJSON { } func (r *Fetch) Projection_ContentObjectID(projectionID int) *ValueString { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "content_object_id"} + key, err := dskey.FromParts("projection", projectionID, "content_object_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6890,7 +9315,11 @@ func (r *Fetch) Projection_ContentObjectID(projectionID int) *ValueString { } func (r *Fetch) Projection_CurrentProjectorID(projectionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "current_projector_id"} + key, err := dskey.FromParts("projection", projectionID, "current_projector_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -6900,7 +9329,11 @@ func (r *Fetch) Projection_CurrentProjectorID(projectionID int) *ValueMaybeInt { } func (r *Fetch) Projection_HistoryProjectorID(projectionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "history_projector_id"} + key, err := dskey.FromParts("projection", projectionID, "history_projector_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -6910,7 +9343,11 @@ func (r *Fetch) Projection_HistoryProjectorID(projectionID int) *ValueMaybeInt { } func (r *Fetch) Projection_ID(projectionID int) *ValueInt { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "id"} + key, err := dskey.FromParts("projection", projectionID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6920,7 +9357,11 @@ func (r *Fetch) Projection_ID(projectionID int) *ValueInt { } func (r *Fetch) Projection_MeetingID(projectionID int) *ValueInt { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "meeting_id"} + key, err := dskey.FromParts("projection", projectionID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6930,7 +9371,11 @@ func (r *Fetch) Projection_MeetingID(projectionID int) *ValueInt { } func (r *Fetch) Projection_Options(projectionID int) *ValueJSON { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "options"} + key, err := dskey.FromParts("projection", projectionID, "options") + if err != nil { + r.err = err + return &ValueJSON{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueJSON) } @@ -6940,7 +9385,11 @@ func (r *Fetch) Projection_Options(projectionID int) *ValueJSON { } func (r *Fetch) Projection_PreviewProjectorID(projectionID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "preview_projector_id"} + key, err := dskey.FromParts("projection", projectionID, "preview_projector_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -6950,7 +9399,11 @@ func (r *Fetch) Projection_PreviewProjectorID(projectionID int) *ValueMaybeInt { } func (r *Fetch) Projection_Stable(projectionID int) *ValueBool { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "stable"} + key, err := dskey.FromParts("projection", projectionID, "stable") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -6960,7 +9413,11 @@ func (r *Fetch) Projection_Stable(projectionID int) *ValueBool { } func (r *Fetch) Projection_Type(projectionID int) *ValueString { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "type"} + key, err := dskey.FromParts("projection", projectionID, "type") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -6970,7 +9427,11 @@ func (r *Fetch) Projection_Type(projectionID int) *ValueString { } func (r *Fetch) Projection_Weight(projectionID int) *ValueInt { - key := dskey.Key{Collection: "projection", ID: projectionID, Field: "weight"} + key, err := dskey.FromParts("projection", projectionID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -6980,7 +9441,11 @@ func (r *Fetch) Projection_Weight(projectionID int) *ValueInt { } func (r *Fetch) ProjectorCountdown_CountdownTime(projectorCountdownID int) *ValueFloat { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "countdown_time"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "countdown_time") + if err != nil { + r.err = err + return &ValueFloat{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueFloat) } @@ -6990,7 +9455,11 @@ func (r *Fetch) ProjectorCountdown_CountdownTime(projectorCountdownID int) *Valu } func (r *Fetch) ProjectorCountdown_DefaultTime(projectorCountdownID int) *ValueInt { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "default_time"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "default_time") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7000,7 +9469,11 @@ func (r *Fetch) ProjectorCountdown_DefaultTime(projectorCountdownID int) *ValueI } func (r *Fetch) ProjectorCountdown_Description(projectorCountdownID int) *ValueString { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "description"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "description") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7010,7 +9483,11 @@ func (r *Fetch) ProjectorCountdown_Description(projectorCountdownID int) *ValueS } func (r *Fetch) ProjectorCountdown_ID(projectorCountdownID int) *ValueInt { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "id"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7020,7 +9497,11 @@ func (r *Fetch) ProjectorCountdown_ID(projectorCountdownID int) *ValueInt { } func (r *Fetch) ProjectorCountdown_MeetingID(projectorCountdownID int) *ValueInt { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "meeting_id"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7030,7 +9511,11 @@ func (r *Fetch) ProjectorCountdown_MeetingID(projectorCountdownID int) *ValueInt } func (r *Fetch) ProjectorCountdown_ProjectionIDs(projectorCountdownID int) *ValueIntSlice { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "projection_ids"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -7040,7 +9525,11 @@ func (r *Fetch) ProjectorCountdown_ProjectionIDs(projectorCountdownID int) *Valu } func (r *Fetch) ProjectorCountdown_Running(projectorCountdownID int) *ValueBool { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "running"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "running") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -7050,7 +9539,11 @@ func (r *Fetch) ProjectorCountdown_Running(projectorCountdownID int) *ValueBool } func (r *Fetch) ProjectorCountdown_Title(projectorCountdownID int) *ValueString { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "title"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7060,7 +9553,11 @@ func (r *Fetch) ProjectorCountdown_Title(projectorCountdownID int) *ValueString } func (r *Fetch) ProjectorCountdown_UsedAsListOfSpeakersCountdownMeetingID(projectorCountdownID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "used_as_list_of_speakers_countdown_meeting_id"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "used_as_list_of_speakers_countdown_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7070,7 +9567,11 @@ func (r *Fetch) ProjectorCountdown_UsedAsListOfSpeakersCountdownMeetingID(projec } func (r *Fetch) ProjectorCountdown_UsedAsPollCountdownMeetingID(projectorCountdownID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector_countdown", ID: projectorCountdownID, Field: "used_as_poll_countdown_meeting_id"} + key, err := dskey.FromParts("projector_countdown", projectorCountdownID, "used_as_poll_countdown_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7080,7 +9581,11 @@ func (r *Fetch) ProjectorCountdown_UsedAsPollCountdownMeetingID(projectorCountdo } func (r *Fetch) ProjectorMessage_ID(projectorMessageID int) *ValueInt { - key := dskey.Key{Collection: "projector_message", ID: projectorMessageID, Field: "id"} + key, err := dskey.FromParts("projector_message", projectorMessageID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7090,7 +9595,11 @@ func (r *Fetch) ProjectorMessage_ID(projectorMessageID int) *ValueInt { } func (r *Fetch) ProjectorMessage_MeetingID(projectorMessageID int) *ValueInt { - key := dskey.Key{Collection: "projector_message", ID: projectorMessageID, Field: "meeting_id"} + key, err := dskey.FromParts("projector_message", projectorMessageID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7100,7 +9609,11 @@ func (r *Fetch) ProjectorMessage_MeetingID(projectorMessageID int) *ValueInt { } func (r *Fetch) ProjectorMessage_Message(projectorMessageID int) *ValueString { - key := dskey.Key{Collection: "projector_message", ID: projectorMessageID, Field: "message"} + key, err := dskey.FromParts("projector_message", projectorMessageID, "message") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7110,7 +9623,11 @@ func (r *Fetch) ProjectorMessage_Message(projectorMessageID int) *ValueString { } func (r *Fetch) ProjectorMessage_ProjectionIDs(projectorMessageID int) *ValueIntSlice { - key := dskey.Key{Collection: "projector_message", ID: projectorMessageID, Field: "projection_ids"} + key, err := dskey.FromParts("projector_message", projectorMessageID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -7120,7 +9637,11 @@ func (r *Fetch) ProjectorMessage_ProjectionIDs(projectorMessageID int) *ValueInt } func (r *Fetch) Projector_AspectRatioDenominator(projectorID int) *ValueInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "aspect_ratio_denominator"} + key, err := dskey.FromParts("projector", projectorID, "aspect_ratio_denominator") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7130,7 +9651,11 @@ func (r *Fetch) Projector_AspectRatioDenominator(projectorID int) *ValueInt { } func (r *Fetch) Projector_AspectRatioNumerator(projectorID int) *ValueInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "aspect_ratio_numerator"} + key, err := dskey.FromParts("projector", projectorID, "aspect_ratio_numerator") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7140,7 +9665,11 @@ func (r *Fetch) Projector_AspectRatioNumerator(projectorID int) *ValueInt { } func (r *Fetch) Projector_BackgroundColor(projectorID int) *ValueString { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "background_color"} + key, err := dskey.FromParts("projector", projectorID, "background_color") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7150,7 +9679,11 @@ func (r *Fetch) Projector_BackgroundColor(projectorID int) *ValueString { } func (r *Fetch) Projector_ChyronBackgroundColor(projectorID int) *ValueString { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "chyron_background_color"} + key, err := dskey.FromParts("projector", projectorID, "chyron_background_color") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7160,7 +9693,11 @@ func (r *Fetch) Projector_ChyronBackgroundColor(projectorID int) *ValueString { } func (r *Fetch) Projector_ChyronFontColor(projectorID int) *ValueString { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "chyron_font_color"} + key, err := dskey.FromParts("projector", projectorID, "chyron_font_color") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7170,7 +9707,11 @@ func (r *Fetch) Projector_ChyronFontColor(projectorID int) *ValueString { } func (r *Fetch) Projector_Color(projectorID int) *ValueString { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "color"} + key, err := dskey.FromParts("projector", projectorID, "color") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7180,7 +9721,11 @@ func (r *Fetch) Projector_Color(projectorID int) *ValueString { } func (r *Fetch) Projector_CurrentProjectionIDs(projectorID int) *ValueIntSlice { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "current_projection_ids"} + key, err := dskey.FromParts("projector", projectorID, "current_projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -7190,7 +9735,11 @@ func (r *Fetch) Projector_CurrentProjectionIDs(projectorID int) *ValueIntSlice { } func (r *Fetch) Projector_HeaderBackgroundColor(projectorID int) *ValueString { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "header_background_color"} + key, err := dskey.FromParts("projector", projectorID, "header_background_color") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7200,7 +9749,11 @@ func (r *Fetch) Projector_HeaderBackgroundColor(projectorID int) *ValueString { } func (r *Fetch) Projector_HeaderFontColor(projectorID int) *ValueString { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "header_font_color"} + key, err := dskey.FromParts("projector", projectorID, "header_font_color") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7210,7 +9763,11 @@ func (r *Fetch) Projector_HeaderFontColor(projectorID int) *ValueString { } func (r *Fetch) Projector_HeaderH1Color(projectorID int) *ValueString { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "header_h1_color"} + key, err := dskey.FromParts("projector", projectorID, "header_h1_color") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7220,7 +9777,11 @@ func (r *Fetch) Projector_HeaderH1Color(projectorID int) *ValueString { } func (r *Fetch) Projector_HistoryProjectionIDs(projectorID int) *ValueIntSlice { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "history_projection_ids"} + key, err := dskey.FromParts("projector", projectorID, "history_projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -7230,7 +9791,11 @@ func (r *Fetch) Projector_HistoryProjectionIDs(projectorID int) *ValueIntSlice { } func (r *Fetch) Projector_ID(projectorID int) *ValueInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "id"} + key, err := dskey.FromParts("projector", projectorID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7240,7 +9805,11 @@ func (r *Fetch) Projector_ID(projectorID int) *ValueInt { } func (r *Fetch) Projector_IsInternal(projectorID int) *ValueBool { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "is_internal"} + key, err := dskey.FromParts("projector", projectorID, "is_internal") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -7250,7 +9819,11 @@ func (r *Fetch) Projector_IsInternal(projectorID int) *ValueBool { } func (r *Fetch) Projector_MeetingID(projectorID int) *ValueInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7260,7 +9833,11 @@ func (r *Fetch) Projector_MeetingID(projectorID int) *ValueInt { } func (r *Fetch) Projector_Name(projectorID int) *ValueString { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "name"} + key, err := dskey.FromParts("projector", projectorID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7270,7 +9847,11 @@ func (r *Fetch) Projector_Name(projectorID int) *ValueString { } func (r *Fetch) Projector_PreviewProjectionIDs(projectorID int) *ValueIntSlice { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "preview_projection_ids"} + key, err := dskey.FromParts("projector", projectorID, "preview_projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -7280,7 +9861,11 @@ func (r *Fetch) Projector_PreviewProjectionIDs(projectorID int) *ValueIntSlice { } func (r *Fetch) Projector_Scale(projectorID int) *ValueInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "scale"} + key, err := dskey.FromParts("projector", projectorID, "scale") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7290,7 +9875,11 @@ func (r *Fetch) Projector_Scale(projectorID int) *ValueInt { } func (r *Fetch) Projector_Scroll(projectorID int) *ValueInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "scroll"} + key, err := dskey.FromParts("projector", projectorID, "scroll") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7300,7 +9889,11 @@ func (r *Fetch) Projector_Scroll(projectorID int) *ValueInt { } func (r *Fetch) Projector_SequentialNumber(projectorID int) *ValueInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "sequential_number"} + key, err := dskey.FromParts("projector", projectorID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7310,7 +9903,11 @@ func (r *Fetch) Projector_SequentialNumber(projectorID int) *ValueInt { } func (r *Fetch) Projector_ShowClock(projectorID int) *ValueBool { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "show_clock"} + key, err := dskey.FromParts("projector", projectorID, "show_clock") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -7320,7 +9917,11 @@ func (r *Fetch) Projector_ShowClock(projectorID int) *ValueBool { } func (r *Fetch) Projector_ShowHeaderFooter(projectorID int) *ValueBool { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "show_header_footer"} + key, err := dskey.FromParts("projector", projectorID, "show_header_footer") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -7330,7 +9931,11 @@ func (r *Fetch) Projector_ShowHeaderFooter(projectorID int) *ValueBool { } func (r *Fetch) Projector_ShowLogo(projectorID int) *ValueBool { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "show_logo"} + key, err := dskey.FromParts("projector", projectorID, "show_logo") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -7340,7 +9945,11 @@ func (r *Fetch) Projector_ShowLogo(projectorID int) *ValueBool { } func (r *Fetch) Projector_ShowTitle(projectorID int) *ValueBool { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "show_title"} + key, err := dskey.FromParts("projector", projectorID, "show_title") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -7350,7 +9959,11 @@ func (r *Fetch) Projector_ShowTitle(projectorID int) *ValueBool { } func (r *Fetch) Projector_UsedAsDefaultProjectorForAgendaItemListInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_agenda_item_list_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_agenda_item_list_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7360,7 +9973,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForAgendaItemListInMeetingID(pro } func (r *Fetch) Projector_UsedAsDefaultProjectorForAmendmentInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_amendment_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_amendment_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7370,7 +9987,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForAmendmentInMeetingID(projecto } func (r *Fetch) Projector_UsedAsDefaultProjectorForAssignmentInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_assignment_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_assignment_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7380,7 +10001,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForAssignmentInMeetingID(project } func (r *Fetch) Projector_UsedAsDefaultProjectorForAssignmentPollInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_assignment_poll_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_assignment_poll_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7390,7 +10015,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForAssignmentPollInMeetingID(pro } func (r *Fetch) Projector_UsedAsDefaultProjectorForCountdownInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_countdown_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_countdown_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7400,7 +10029,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForCountdownInMeetingID(projecto } func (r *Fetch) Projector_UsedAsDefaultProjectorForCurrentListOfSpeakersInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_current_list_of_speakers_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_current_list_of_speakers_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7410,7 +10043,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForCurrentListOfSpeakersInMeetin } func (r *Fetch) Projector_UsedAsDefaultProjectorForListOfSpeakersInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_list_of_speakers_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_list_of_speakers_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7420,7 +10057,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForListOfSpeakersInMeetingID(pro } func (r *Fetch) Projector_UsedAsDefaultProjectorForMediafileInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_mediafile_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_mediafile_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7430,7 +10071,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForMediafileInMeetingID(projecto } func (r *Fetch) Projector_UsedAsDefaultProjectorForMessageInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_message_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_message_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7440,7 +10085,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForMessageInMeetingID(projectorI } func (r *Fetch) Projector_UsedAsDefaultProjectorForMotionBlockInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_motion_block_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_motion_block_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7450,7 +10099,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForMotionBlockInMeetingID(projec } func (r *Fetch) Projector_UsedAsDefaultProjectorForMotionInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_motion_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_motion_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7460,7 +10113,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForMotionInMeetingID(projectorID } func (r *Fetch) Projector_UsedAsDefaultProjectorForMotionPollInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_motion_poll_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_motion_poll_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7470,7 +10127,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForMotionPollInMeetingID(project } func (r *Fetch) Projector_UsedAsDefaultProjectorForPollInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_poll_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_poll_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7480,7 +10141,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForPollInMeetingID(projectorID i } func (r *Fetch) Projector_UsedAsDefaultProjectorForTopicInMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_default_projector_for_topic_in_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_topic_in_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7490,7 +10155,11 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForTopicInMeetingID(projectorID } func (r *Fetch) Projector_UsedAsReferenceProjectorMeetingID(projectorID int) *ValueMaybeInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "used_as_reference_projector_meeting_id"} + key, err := dskey.FromParts("projector", projectorID, "used_as_reference_projector_meeting_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7500,7 +10169,11 @@ func (r *Fetch) Projector_UsedAsReferenceProjectorMeetingID(projectorID int) *Va } func (r *Fetch) Projector_Width(projectorID int) *ValueInt { - key := dskey.Key{Collection: "projector", ID: projectorID, Field: "width"} + key, err := dskey.FromParts("projector", projectorID, "width") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7510,7 +10183,11 @@ func (r *Fetch) Projector_Width(projectorID int) *ValueInt { } func (r *Fetch) Speaker_BeginTime(speakerID int) *ValueInt { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "begin_time"} + key, err := dskey.FromParts("speaker", speakerID, "begin_time") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7520,7 +10197,11 @@ func (r *Fetch) Speaker_BeginTime(speakerID int) *ValueInt { } func (r *Fetch) Speaker_EndTime(speakerID int) *ValueInt { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "end_time"} + key, err := dskey.FromParts("speaker", speakerID, "end_time") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7530,7 +10211,11 @@ func (r *Fetch) Speaker_EndTime(speakerID int) *ValueInt { } func (r *Fetch) Speaker_ID(speakerID int) *ValueInt { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "id"} + key, err := dskey.FromParts("speaker", speakerID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7540,7 +10225,11 @@ func (r *Fetch) Speaker_ID(speakerID int) *ValueInt { } func (r *Fetch) Speaker_ListOfSpeakersID(speakerID int) *ValueInt { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "list_of_speakers_id"} + key, err := dskey.FromParts("speaker", speakerID, "list_of_speakers_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7550,7 +10239,11 @@ func (r *Fetch) Speaker_ListOfSpeakersID(speakerID int) *ValueInt { } func (r *Fetch) Speaker_MeetingID(speakerID int) *ValueInt { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "meeting_id"} + key, err := dskey.FromParts("speaker", speakerID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7560,7 +10253,11 @@ func (r *Fetch) Speaker_MeetingID(speakerID int) *ValueInt { } func (r *Fetch) Speaker_MeetingUserID(speakerID int) *ValueInt { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "meeting_user_id"} + key, err := dskey.FromParts("speaker", speakerID, "meeting_user_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7570,7 +10267,11 @@ func (r *Fetch) Speaker_MeetingUserID(speakerID int) *ValueInt { } func (r *Fetch) Speaker_Note(speakerID int) *ValueString { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "note"} + key, err := dskey.FromParts("speaker", speakerID, "note") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7580,7 +10281,11 @@ func (r *Fetch) Speaker_Note(speakerID int) *ValueString { } func (r *Fetch) Speaker_PointOfOrder(speakerID int) *ValueBool { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "point_of_order"} + key, err := dskey.FromParts("speaker", speakerID, "point_of_order") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -7590,7 +10295,11 @@ func (r *Fetch) Speaker_PointOfOrder(speakerID int) *ValueBool { } func (r *Fetch) Speaker_PointOfOrderCategoryID(speakerID int) *ValueMaybeInt { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "point_of_order_category_id"} + key, err := dskey.FromParts("speaker", speakerID, "point_of_order_category_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -7600,7 +10309,11 @@ func (r *Fetch) Speaker_PointOfOrderCategoryID(speakerID int) *ValueMaybeInt { } func (r *Fetch) Speaker_SpeechState(speakerID int) *ValueString { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "speech_state"} + key, err := dskey.FromParts("speaker", speakerID, "speech_state") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7610,7 +10323,11 @@ func (r *Fetch) Speaker_SpeechState(speakerID int) *ValueString { } func (r *Fetch) Speaker_Weight(speakerID int) *ValueInt { - key := dskey.Key{Collection: "speaker", ID: speakerID, Field: "weight"} + key, err := dskey.FromParts("speaker", speakerID, "weight") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7620,7 +10337,11 @@ func (r *Fetch) Speaker_Weight(speakerID int) *ValueInt { } func (r *Fetch) Tag_ID(tagID int) *ValueInt { - key := dskey.Key{Collection: "tag", ID: tagID, Field: "id"} + key, err := dskey.FromParts("tag", tagID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7630,7 +10351,11 @@ func (r *Fetch) Tag_ID(tagID int) *ValueInt { } func (r *Fetch) Tag_MeetingID(tagID int) *ValueInt { - key := dskey.Key{Collection: "tag", ID: tagID, Field: "meeting_id"} + key, err := dskey.FromParts("tag", tagID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7640,7 +10365,11 @@ func (r *Fetch) Tag_MeetingID(tagID int) *ValueInt { } func (r *Fetch) Tag_Name(tagID int) *ValueString { - key := dskey.Key{Collection: "tag", ID: tagID, Field: "name"} + key, err := dskey.FromParts("tag", tagID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7650,7 +10379,11 @@ func (r *Fetch) Tag_Name(tagID int) *ValueString { } func (r *Fetch) Tag_TaggedIDs(tagID int) *ValueStringSlice { - key := dskey.Key{Collection: "tag", ID: tagID, Field: "tagged_ids"} + key, err := dskey.FromParts("tag", tagID, "tagged_ids") + if err != nil { + r.err = err + return &ValueStringSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueStringSlice) } @@ -7660,7 +10393,11 @@ func (r *Fetch) Tag_TaggedIDs(tagID int) *ValueStringSlice { } func (r *Fetch) Theme_Abstain(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "abstain"} + key, err := dskey.FromParts("theme", themeID, "abstain") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7670,7 +10407,11 @@ func (r *Fetch) Theme_Abstain(themeID int) *ValueString { } func (r *Fetch) Theme_Accent100(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_100"} + key, err := dskey.FromParts("theme", themeID, "accent_100") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7680,7 +10421,11 @@ func (r *Fetch) Theme_Accent100(themeID int) *ValueString { } func (r *Fetch) Theme_Accent200(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_200"} + key, err := dskey.FromParts("theme", themeID, "accent_200") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7690,7 +10435,11 @@ func (r *Fetch) Theme_Accent200(themeID int) *ValueString { } func (r *Fetch) Theme_Accent300(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_300"} + key, err := dskey.FromParts("theme", themeID, "accent_300") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7700,7 +10449,11 @@ func (r *Fetch) Theme_Accent300(themeID int) *ValueString { } func (r *Fetch) Theme_Accent400(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_400"} + key, err := dskey.FromParts("theme", themeID, "accent_400") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7710,7 +10463,11 @@ func (r *Fetch) Theme_Accent400(themeID int) *ValueString { } func (r *Fetch) Theme_Accent50(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_50"} + key, err := dskey.FromParts("theme", themeID, "accent_50") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7720,7 +10477,11 @@ func (r *Fetch) Theme_Accent50(themeID int) *ValueString { } func (r *Fetch) Theme_Accent500(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_500"} + key, err := dskey.FromParts("theme", themeID, "accent_500") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7730,7 +10491,11 @@ func (r *Fetch) Theme_Accent500(themeID int) *ValueString { } func (r *Fetch) Theme_Accent600(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_600"} + key, err := dskey.FromParts("theme", themeID, "accent_600") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7740,7 +10505,11 @@ func (r *Fetch) Theme_Accent600(themeID int) *ValueString { } func (r *Fetch) Theme_Accent700(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_700"} + key, err := dskey.FromParts("theme", themeID, "accent_700") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7750,7 +10519,11 @@ func (r *Fetch) Theme_Accent700(themeID int) *ValueString { } func (r *Fetch) Theme_Accent800(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_800"} + key, err := dskey.FromParts("theme", themeID, "accent_800") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7760,7 +10533,11 @@ func (r *Fetch) Theme_Accent800(themeID int) *ValueString { } func (r *Fetch) Theme_Accent900(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_900"} + key, err := dskey.FromParts("theme", themeID, "accent_900") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7770,7 +10547,11 @@ func (r *Fetch) Theme_Accent900(themeID int) *ValueString { } func (r *Fetch) Theme_AccentA100(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_a100"} + key, err := dskey.FromParts("theme", themeID, "accent_a100") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7780,7 +10561,11 @@ func (r *Fetch) Theme_AccentA100(themeID int) *ValueString { } func (r *Fetch) Theme_AccentA200(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_a200"} + key, err := dskey.FromParts("theme", themeID, "accent_a200") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7790,7 +10575,11 @@ func (r *Fetch) Theme_AccentA200(themeID int) *ValueString { } func (r *Fetch) Theme_AccentA400(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_a400"} + key, err := dskey.FromParts("theme", themeID, "accent_a400") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7800,7 +10589,11 @@ func (r *Fetch) Theme_AccentA400(themeID int) *ValueString { } func (r *Fetch) Theme_AccentA700(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "accent_a700"} + key, err := dskey.FromParts("theme", themeID, "accent_a700") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7810,7 +10603,11 @@ func (r *Fetch) Theme_AccentA700(themeID int) *ValueString { } func (r *Fetch) Theme_Headbar(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "headbar"} + key, err := dskey.FromParts("theme", themeID, "headbar") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7820,7 +10617,11 @@ func (r *Fetch) Theme_Headbar(themeID int) *ValueString { } func (r *Fetch) Theme_ID(themeID int) *ValueInt { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "id"} + key, err := dskey.FromParts("theme", themeID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7830,7 +10631,11 @@ func (r *Fetch) Theme_ID(themeID int) *ValueInt { } func (r *Fetch) Theme_Name(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "name"} + key, err := dskey.FromParts("theme", themeID, "name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7840,7 +10645,11 @@ func (r *Fetch) Theme_Name(themeID int) *ValueString { } func (r *Fetch) Theme_No(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "no"} + key, err := dskey.FromParts("theme", themeID, "no") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7850,7 +10659,11 @@ func (r *Fetch) Theme_No(themeID int) *ValueString { } func (r *Fetch) Theme_OrganizationID(themeID int) *ValueInt { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "organization_id"} + key, err := dskey.FromParts("theme", themeID, "organization_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -7860,7 +10673,11 @@ func (r *Fetch) Theme_OrganizationID(themeID int) *ValueInt { } func (r *Fetch) Theme_Primary100(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_100"} + key, err := dskey.FromParts("theme", themeID, "primary_100") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7870,7 +10687,11 @@ func (r *Fetch) Theme_Primary100(themeID int) *ValueString { } func (r *Fetch) Theme_Primary200(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_200"} + key, err := dskey.FromParts("theme", themeID, "primary_200") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7880,7 +10701,11 @@ func (r *Fetch) Theme_Primary200(themeID int) *ValueString { } func (r *Fetch) Theme_Primary300(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_300"} + key, err := dskey.FromParts("theme", themeID, "primary_300") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7890,7 +10715,11 @@ func (r *Fetch) Theme_Primary300(themeID int) *ValueString { } func (r *Fetch) Theme_Primary400(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_400"} + key, err := dskey.FromParts("theme", themeID, "primary_400") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7900,7 +10729,11 @@ func (r *Fetch) Theme_Primary400(themeID int) *ValueString { } func (r *Fetch) Theme_Primary50(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_50"} + key, err := dskey.FromParts("theme", themeID, "primary_50") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7910,7 +10743,11 @@ func (r *Fetch) Theme_Primary50(themeID int) *ValueString { } func (r *Fetch) Theme_Primary500(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_500"} + key, err := dskey.FromParts("theme", themeID, "primary_500") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7920,7 +10757,11 @@ func (r *Fetch) Theme_Primary500(themeID int) *ValueString { } func (r *Fetch) Theme_Primary600(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_600"} + key, err := dskey.FromParts("theme", themeID, "primary_600") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7930,7 +10771,11 @@ func (r *Fetch) Theme_Primary600(themeID int) *ValueString { } func (r *Fetch) Theme_Primary700(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_700"} + key, err := dskey.FromParts("theme", themeID, "primary_700") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7940,7 +10785,11 @@ func (r *Fetch) Theme_Primary700(themeID int) *ValueString { } func (r *Fetch) Theme_Primary800(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_800"} + key, err := dskey.FromParts("theme", themeID, "primary_800") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7950,7 +10799,11 @@ func (r *Fetch) Theme_Primary800(themeID int) *ValueString { } func (r *Fetch) Theme_Primary900(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_900"} + key, err := dskey.FromParts("theme", themeID, "primary_900") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7960,7 +10813,11 @@ func (r *Fetch) Theme_Primary900(themeID int) *ValueString { } func (r *Fetch) Theme_PrimaryA100(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_a100"} + key, err := dskey.FromParts("theme", themeID, "primary_a100") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7970,7 +10827,11 @@ func (r *Fetch) Theme_PrimaryA100(themeID int) *ValueString { } func (r *Fetch) Theme_PrimaryA200(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_a200"} + key, err := dskey.FromParts("theme", themeID, "primary_a200") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7980,7 +10841,11 @@ func (r *Fetch) Theme_PrimaryA200(themeID int) *ValueString { } func (r *Fetch) Theme_PrimaryA400(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_a400"} + key, err := dskey.FromParts("theme", themeID, "primary_a400") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -7990,7 +10855,11 @@ func (r *Fetch) Theme_PrimaryA400(themeID int) *ValueString { } func (r *Fetch) Theme_PrimaryA700(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "primary_a700"} + key, err := dskey.FromParts("theme", themeID, "primary_a700") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8000,7 +10869,11 @@ func (r *Fetch) Theme_PrimaryA700(themeID int) *ValueString { } func (r *Fetch) Theme_ThemeForOrganizationID(themeID int) *ValueMaybeInt { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "theme_for_organization_id"} + key, err := dskey.FromParts("theme", themeID, "theme_for_organization_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -8010,7 +10883,11 @@ func (r *Fetch) Theme_ThemeForOrganizationID(themeID int) *ValueMaybeInt { } func (r *Fetch) Theme_Warn100(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_100"} + key, err := dskey.FromParts("theme", themeID, "warn_100") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8020,7 +10897,11 @@ func (r *Fetch) Theme_Warn100(themeID int) *ValueString { } func (r *Fetch) Theme_Warn200(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_200"} + key, err := dskey.FromParts("theme", themeID, "warn_200") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8030,7 +10911,11 @@ func (r *Fetch) Theme_Warn200(themeID int) *ValueString { } func (r *Fetch) Theme_Warn300(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_300"} + key, err := dskey.FromParts("theme", themeID, "warn_300") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8040,7 +10925,11 @@ func (r *Fetch) Theme_Warn300(themeID int) *ValueString { } func (r *Fetch) Theme_Warn400(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_400"} + key, err := dskey.FromParts("theme", themeID, "warn_400") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8050,7 +10939,11 @@ func (r *Fetch) Theme_Warn400(themeID int) *ValueString { } func (r *Fetch) Theme_Warn50(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_50"} + key, err := dskey.FromParts("theme", themeID, "warn_50") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8060,7 +10953,11 @@ func (r *Fetch) Theme_Warn50(themeID int) *ValueString { } func (r *Fetch) Theme_Warn500(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_500"} + key, err := dskey.FromParts("theme", themeID, "warn_500") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8070,7 +10967,11 @@ func (r *Fetch) Theme_Warn500(themeID int) *ValueString { } func (r *Fetch) Theme_Warn600(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_600"} + key, err := dskey.FromParts("theme", themeID, "warn_600") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8080,7 +10981,11 @@ func (r *Fetch) Theme_Warn600(themeID int) *ValueString { } func (r *Fetch) Theme_Warn700(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_700"} + key, err := dskey.FromParts("theme", themeID, "warn_700") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8090,7 +10995,11 @@ func (r *Fetch) Theme_Warn700(themeID int) *ValueString { } func (r *Fetch) Theme_Warn800(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_800"} + key, err := dskey.FromParts("theme", themeID, "warn_800") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8100,7 +11009,11 @@ func (r *Fetch) Theme_Warn800(themeID int) *ValueString { } func (r *Fetch) Theme_Warn900(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_900"} + key, err := dskey.FromParts("theme", themeID, "warn_900") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8110,7 +11023,11 @@ func (r *Fetch) Theme_Warn900(themeID int) *ValueString { } func (r *Fetch) Theme_WarnA100(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_a100"} + key, err := dskey.FromParts("theme", themeID, "warn_a100") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8120,7 +11037,11 @@ func (r *Fetch) Theme_WarnA100(themeID int) *ValueString { } func (r *Fetch) Theme_WarnA200(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_a200"} + key, err := dskey.FromParts("theme", themeID, "warn_a200") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8130,7 +11051,11 @@ func (r *Fetch) Theme_WarnA200(themeID int) *ValueString { } func (r *Fetch) Theme_WarnA400(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_a400"} + key, err := dskey.FromParts("theme", themeID, "warn_a400") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8140,7 +11065,11 @@ func (r *Fetch) Theme_WarnA400(themeID int) *ValueString { } func (r *Fetch) Theme_WarnA700(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "warn_a700"} + key, err := dskey.FromParts("theme", themeID, "warn_a700") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8150,7 +11079,11 @@ func (r *Fetch) Theme_WarnA700(themeID int) *ValueString { } func (r *Fetch) Theme_Yes(themeID int) *ValueString { - key := dskey.Key{Collection: "theme", ID: themeID, Field: "yes"} + key, err := dskey.FromParts("theme", themeID, "yes") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8160,7 +11093,11 @@ func (r *Fetch) Theme_Yes(themeID int) *ValueString { } func (r *Fetch) Topic_AgendaItemID(topicID int) *ValueInt { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "agenda_item_id"} + key, err := dskey.FromParts("topic", topicID, "agenda_item_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8170,7 +11107,11 @@ func (r *Fetch) Topic_AgendaItemID(topicID int) *ValueInt { } func (r *Fetch) Topic_AttachmentIDs(topicID int) *ValueIntSlice { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "attachment_ids"} + key, err := dskey.FromParts("topic", topicID, "attachment_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8180,7 +11121,11 @@ func (r *Fetch) Topic_AttachmentIDs(topicID int) *ValueIntSlice { } func (r *Fetch) Topic_ID(topicID int) *ValueInt { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "id"} + key, err := dskey.FromParts("topic", topicID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8190,7 +11135,11 @@ func (r *Fetch) Topic_ID(topicID int) *ValueInt { } func (r *Fetch) Topic_ListOfSpeakersID(topicID int) *ValueInt { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "list_of_speakers_id"} + key, err := dskey.FromParts("topic", topicID, "list_of_speakers_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8200,7 +11149,11 @@ func (r *Fetch) Topic_ListOfSpeakersID(topicID int) *ValueInt { } func (r *Fetch) Topic_MeetingID(topicID int) *ValueInt { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "meeting_id"} + key, err := dskey.FromParts("topic", topicID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8210,7 +11163,11 @@ func (r *Fetch) Topic_MeetingID(topicID int) *ValueInt { } func (r *Fetch) Topic_PollIDs(topicID int) *ValueIntSlice { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "poll_ids"} + key, err := dskey.FromParts("topic", topicID, "poll_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8220,7 +11177,11 @@ func (r *Fetch) Topic_PollIDs(topicID int) *ValueIntSlice { } func (r *Fetch) Topic_ProjectionIDs(topicID int) *ValueIntSlice { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "projection_ids"} + key, err := dskey.FromParts("topic", topicID, "projection_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8230,7 +11191,11 @@ func (r *Fetch) Topic_ProjectionIDs(topicID int) *ValueIntSlice { } func (r *Fetch) Topic_SequentialNumber(topicID int) *ValueInt { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "sequential_number"} + key, err := dskey.FromParts("topic", topicID, "sequential_number") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8240,7 +11205,11 @@ func (r *Fetch) Topic_SequentialNumber(topicID int) *ValueInt { } func (r *Fetch) Topic_Text(topicID int) *ValueString { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "text"} + key, err := dskey.FromParts("topic", topicID, "text") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8250,7 +11219,11 @@ func (r *Fetch) Topic_Text(topicID int) *ValueString { } func (r *Fetch) Topic_Title(topicID int) *ValueString { - key := dskey.Key{Collection: "topic", ID: topicID, Field: "title"} + key, err := dskey.FromParts("topic", topicID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8260,7 +11233,11 @@ func (r *Fetch) Topic_Title(topicID int) *ValueString { } func (r *Fetch) User_CanChangeOwnPassword(userID int) *ValueBool { - key := dskey.Key{Collection: "user", ID: userID, Field: "can_change_own_password"} + key, err := dskey.FromParts("user", userID, "can_change_own_password") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -8270,7 +11247,11 @@ func (r *Fetch) User_CanChangeOwnPassword(userID int) *ValueBool { } func (r *Fetch) User_CommitteeIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "committee_ids"} + key, err := dskey.FromParts("user", userID, "committee_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8280,7 +11261,11 @@ func (r *Fetch) User_CommitteeIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_CommitteeManagementIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "committee_management_ids"} + key, err := dskey.FromParts("user", userID, "committee_management_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8290,7 +11275,11 @@ func (r *Fetch) User_CommitteeManagementIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_DefaultNumber(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "default_number"} + key, err := dskey.FromParts("user", userID, "default_number") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8300,7 +11289,11 @@ func (r *Fetch) User_DefaultNumber(userID int) *ValueString { } func (r *Fetch) User_DefaultPassword(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "default_password"} + key, err := dskey.FromParts("user", userID, "default_password") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8310,7 +11303,11 @@ func (r *Fetch) User_DefaultPassword(userID int) *ValueString { } func (r *Fetch) User_DefaultStructureLevel(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "default_structure_level"} + key, err := dskey.FromParts("user", userID, "default_structure_level") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8320,7 +11317,11 @@ func (r *Fetch) User_DefaultStructureLevel(userID int) *ValueString { } func (r *Fetch) User_DefaultVoteWeight(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "default_vote_weight"} + key, err := dskey.FromParts("user", userID, "default_vote_weight") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8330,7 +11331,11 @@ func (r *Fetch) User_DefaultVoteWeight(userID int) *ValueString { } func (r *Fetch) User_DelegatedVoteIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "delegated_vote_ids"} + key, err := dskey.FromParts("user", userID, "delegated_vote_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8340,7 +11345,11 @@ func (r *Fetch) User_DelegatedVoteIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_Email(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "email"} + key, err := dskey.FromParts("user", userID, "email") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8350,7 +11359,11 @@ func (r *Fetch) User_Email(userID int) *ValueString { } func (r *Fetch) User_FirstName(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "first_name"} + key, err := dskey.FromParts("user", userID, "first_name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8360,7 +11373,11 @@ func (r *Fetch) User_FirstName(userID int) *ValueString { } func (r *Fetch) User_ForwardingCommitteeIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "forwarding_committee_ids"} + key, err := dskey.FromParts("user", userID, "forwarding_committee_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8370,7 +11387,11 @@ func (r *Fetch) User_ForwardingCommitteeIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_Gender(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "gender"} + key, err := dskey.FromParts("user", userID, "gender") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8380,7 +11401,11 @@ func (r *Fetch) User_Gender(userID int) *ValueString { } func (r *Fetch) User_ID(userID int) *ValueInt { - key := dskey.Key{Collection: "user", ID: userID, Field: "id"} + key, err := dskey.FromParts("user", userID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8390,7 +11415,11 @@ func (r *Fetch) User_ID(userID int) *ValueInt { } func (r *Fetch) User_IsActive(userID int) *ValueBool { - key := dskey.Key{Collection: "user", ID: userID, Field: "is_active"} + key, err := dskey.FromParts("user", userID, "is_active") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -8400,7 +11429,11 @@ func (r *Fetch) User_IsActive(userID int) *ValueBool { } func (r *Fetch) User_IsDemoUser(userID int) *ValueBool { - key := dskey.Key{Collection: "user", ID: userID, Field: "is_demo_user"} + key, err := dskey.FromParts("user", userID, "is_demo_user") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -8410,7 +11443,11 @@ func (r *Fetch) User_IsDemoUser(userID int) *ValueBool { } func (r *Fetch) User_IsPhysicalPerson(userID int) *ValueBool { - key := dskey.Key{Collection: "user", ID: userID, Field: "is_physical_person"} + key, err := dskey.FromParts("user", userID, "is_physical_person") + if err != nil { + r.err = err + return &ValueBool{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueBool) } @@ -8420,7 +11457,11 @@ func (r *Fetch) User_IsPhysicalPerson(userID int) *ValueBool { } func (r *Fetch) User_IsPresentInMeetingIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "is_present_in_meeting_ids"} + key, err := dskey.FromParts("user", userID, "is_present_in_meeting_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8430,7 +11471,11 @@ func (r *Fetch) User_IsPresentInMeetingIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_LastEmailSent(userID int) *ValueInt { - key := dskey.Key{Collection: "user", ID: userID, Field: "last_email_sent"} + key, err := dskey.FromParts("user", userID, "last_email_sent") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8440,7 +11485,11 @@ func (r *Fetch) User_LastEmailSent(userID int) *ValueInt { } func (r *Fetch) User_LastLogin(userID int) *ValueInt { - key := dskey.Key{Collection: "user", ID: userID, Field: "last_login"} + key, err := dskey.FromParts("user", userID, "last_login") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8450,7 +11499,11 @@ func (r *Fetch) User_LastLogin(userID int) *ValueInt { } func (r *Fetch) User_LastName(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "last_name"} + key, err := dskey.FromParts("user", userID, "last_name") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8460,7 +11513,11 @@ func (r *Fetch) User_LastName(userID int) *ValueString { } func (r *Fetch) User_MeetingIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "meeting_ids"} + key, err := dskey.FromParts("user", userID, "meeting_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8470,7 +11527,11 @@ func (r *Fetch) User_MeetingIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_MeetingUserIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "meeting_user_ids"} + key, err := dskey.FromParts("user", userID, "meeting_user_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8480,7 +11541,11 @@ func (r *Fetch) User_MeetingUserIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_OptionIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "option_ids"} + key, err := dskey.FromParts("user", userID, "option_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8490,7 +11555,11 @@ func (r *Fetch) User_OptionIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_OrganizationID(userID int) *ValueInt { - key := dskey.Key{Collection: "user", ID: userID, Field: "organization_id"} + key, err := dskey.FromParts("user", userID, "organization_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8500,7 +11569,11 @@ func (r *Fetch) User_OrganizationID(userID int) *ValueInt { } func (r *Fetch) User_OrganizationManagementLevel(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "organization_management_level"} + key, err := dskey.FromParts("user", userID, "organization_management_level") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8510,7 +11583,11 @@ func (r *Fetch) User_OrganizationManagementLevel(userID int) *ValueString { } func (r *Fetch) User_Password(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "password"} + key, err := dskey.FromParts("user", userID, "password") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8520,7 +11597,11 @@ func (r *Fetch) User_Password(userID int) *ValueString { } func (r *Fetch) User_PollCandidateIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "poll_candidate_ids"} + key, err := dskey.FromParts("user", userID, "poll_candidate_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8530,7 +11611,11 @@ func (r *Fetch) User_PollCandidateIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_PollVotedIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "poll_voted_ids"} + key, err := dskey.FromParts("user", userID, "poll_voted_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8540,7 +11625,11 @@ func (r *Fetch) User_PollVotedIDs(userID int) *ValueIntSlice { } func (r *Fetch) User_Pronoun(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "pronoun"} + key, err := dskey.FromParts("user", userID, "pronoun") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8550,7 +11639,11 @@ func (r *Fetch) User_Pronoun(userID int) *ValueString { } func (r *Fetch) User_SamlID(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "saml_id"} + key, err := dskey.FromParts("user", userID, "saml_id") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8560,7 +11653,11 @@ func (r *Fetch) User_SamlID(userID int) *ValueString { } func (r *Fetch) User_Title(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "title"} + key, err := dskey.FromParts("user", userID, "title") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8570,7 +11667,11 @@ func (r *Fetch) User_Title(userID int) *ValueString { } func (r *Fetch) User_Username(userID int) *ValueString { - key := dskey.Key{Collection: "user", ID: userID, Field: "username"} + key, err := dskey.FromParts("user", userID, "username") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8580,7 +11681,11 @@ func (r *Fetch) User_Username(userID int) *ValueString { } func (r *Fetch) User_VoteIDs(userID int) *ValueIntSlice { - key := dskey.Key{Collection: "user", ID: userID, Field: "vote_ids"} + key, err := dskey.FromParts("user", userID, "vote_ids") + if err != nil { + r.err = err + return &ValueIntSlice{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueIntSlice) } @@ -8590,7 +11695,11 @@ func (r *Fetch) User_VoteIDs(userID int) *ValueIntSlice { } func (r *Fetch) Vote_DelegatedUserID(voteID int) *ValueMaybeInt { - key := dskey.Key{Collection: "vote", ID: voteID, Field: "delegated_user_id"} + key, err := dskey.FromParts("vote", voteID, "delegated_user_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -8600,7 +11709,11 @@ func (r *Fetch) Vote_DelegatedUserID(voteID int) *ValueMaybeInt { } func (r *Fetch) Vote_ID(voteID int) *ValueInt { - key := dskey.Key{Collection: "vote", ID: voteID, Field: "id"} + key, err := dskey.FromParts("vote", voteID, "id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8610,7 +11723,11 @@ func (r *Fetch) Vote_ID(voteID int) *ValueInt { } func (r *Fetch) Vote_MeetingID(voteID int) *ValueInt { - key := dskey.Key{Collection: "vote", ID: voteID, Field: "meeting_id"} + key, err := dskey.FromParts("vote", voteID, "meeting_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8620,7 +11737,11 @@ func (r *Fetch) Vote_MeetingID(voteID int) *ValueInt { } func (r *Fetch) Vote_OptionID(voteID int) *ValueInt { - key := dskey.Key{Collection: "vote", ID: voteID, Field: "option_id"} + key, err := dskey.FromParts("vote", voteID, "option_id") + if err != nil { + r.err = err + return &ValueInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueInt) } @@ -8630,7 +11751,11 @@ func (r *Fetch) Vote_OptionID(voteID int) *ValueInt { } func (r *Fetch) Vote_UserID(voteID int) *ValueMaybeInt { - key := dskey.Key{Collection: "vote", ID: voteID, Field: "user_id"} + key, err := dskey.FromParts("vote", voteID, "user_id") + if err != nil { + r.err = err + return &ValueMaybeInt{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueMaybeInt) } @@ -8640,7 +11765,11 @@ func (r *Fetch) Vote_UserID(voteID int) *ValueMaybeInt { } func (r *Fetch) Vote_UserToken(voteID int) *ValueString { - key := dskey.Key{Collection: "vote", ID: voteID, Field: "user_token"} + key, err := dskey.FromParts("vote", voteID, "user_token") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8650,7 +11779,11 @@ func (r *Fetch) Vote_UserToken(voteID int) *ValueString { } func (r *Fetch) Vote_Value(voteID int) *ValueString { - key := dskey.Key{Collection: "vote", ID: voteID, Field: "value"} + key, err := dskey.FromParts("vote", voteID, "value") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } @@ -8660,7 +11793,11 @@ func (r *Fetch) Vote_Value(voteID int) *ValueString { } func (r *Fetch) Vote_Weight(voteID int) *ValueString { - key := dskey.Key{Collection: "vote", ID: voteID, Field: "weight"} + key, err := dskey.FromParts("vote", voteID, "weight") + if err != nil { + r.err = err + return &ValueString{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*ValueString) } diff --git a/pkg/datastore/dsfetch/gen_fields/field.go.tmpl b/pkg/datastore/dsfetch/gen_fields/field.go.tmpl index 19f0c07d..e41c5187 100644 --- a/pkg/datastore/dsfetch/gen_fields/field.go.tmpl +++ b/pkg/datastore/dsfetch/gen_fields/field.go.tmpl @@ -1,6 +1,10 @@ func (r *Fetch) {{.GoName}}({{.Collection}}ID int) *{{.ValueType}} { - key := dskey.Key{Collection: "{{.CollectionName}}", ID: {{.Collection}}ID, Field: "{{.FieldName}}" } + key, err := dskey.FromParts("{{.CollectionName}}", {{.Collection}}ID, "{{.FieldName}}" ) + if err != nil { + r.err = err + return &{{.ValueType}}{fetch: r} + } if v, ok := r.requested[key]; ok { return v.(*{{.ValueType}}) } diff --git a/pkg/datastore/dsfetch/gen_fields/header.go.tmpl b/pkg/datastore/dsfetch/gen_fields/header.go.tmpl index bad0afba..66b4a983 100644 --- a/pkg/datastore/dsfetch/gen_fields/header.go.tmpl +++ b/pkg/datastore/dsfetch/gen_fields/header.go.tmpl @@ -8,4 +8,5 @@ import ( "strconv" "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dskey" + "github.com/OpenSlides/openslides-autoupdate-service/pkg/fastjson" ) diff --git a/pkg/datastore/dsfetch/gen_fields/value.go.tmpl b/pkg/datastore/dsfetch/gen_fields/value.go.tmpl index 484a1841..5aa90940 100644 --- a/pkg/datastore/dsfetch/gen_fields/value.go.tmpl +++ b/pkg/datastore/dsfetch/gen_fields/value.go.tmpl @@ -131,9 +131,23 @@ func (v *{{.TypeName}}) execute(p []byte) error { } v.isNull = true } else { - if err := json.Unmarshal(p, &v.value); err != nil { - return fmt.Errorf("decoding value %q: %w", p, err) - } + {{- if eq .TypeName "ValueIntSlice"}} + r, err := fastjson.DecodeIntList(p) + if err != nil { + return fmt.Errorf("decoding value %q: %w", p, err) + } + v.value = r + {{- else if eq .TypeName "ValueInt" }} + r, err := fastjson.DecodeInt(p) + if err != nil { + return fmt.Errorf("decoding value %q: %w", p, err) + } + v.value = r + {{- else }} + if err := json.Unmarshal(p, &v.value); err != nil { + return fmt.Errorf("decoding value %q: %w", p, err) + } + {{- end }} } {{- end}} diff --git a/pkg/datastore/dskey/collection_field.go b/pkg/datastore/dskey/collection_field.go new file mode 100644 index 00000000..ffa60d9f --- /dev/null +++ b/pkg/datastore/dskey/collection_field.go @@ -0,0 +1,24 @@ +package dskey + +import "fmt" + +type collectionField struct { + collection string + field string +} + +//go:generate sh -c "go run gen_collection_fields/main.go > gen_collection_fields.go" + +func splitUInt64(i uint64) (int, int) { + return int(i & 0xffffffff), int(i >> 32) +} + +func joinInt(i1, i2 int) uint64 { + return (uint64(i2) << 32) | uint64(i1) +} + +// ValidateCollectionField returns, if the combination of collection and field +// exists. +func ValidateCollectionField(collection, field string) bool { + return collectionFieldToID(fmt.Sprintf("%s/%s", collection, field)) != -1 +} diff --git a/pkg/datastore/dskey/gen_collection_fields.go b/pkg/datastore/dskey/gen_collection_fields.go new file mode 100644 index 00000000..f95e1be5 --- /dev/null +++ b/pkg/datastore/dskey/gen_collection_fields.go @@ -0,0 +1,2545 @@ +// Code generated with models.yml DO NOT EDIT. +package dskey + +var collectionFields = [...]collectionField{ + {"invalid", "key"}, + {"action_worker", "A"}, + {"action_worker", "created"}, + {"action_worker", "id"}, + {"action_worker", "name"}, + {"action_worker", "result"}, + {"action_worker", "state"}, + {"action_worker", "timestamp"}, + {"agenda_item", "A"}, + {"agenda_item", "B"}, + {"agenda_item", "C"}, + {"agenda_item", "child_ids"}, + {"agenda_item", "closed"}, + {"agenda_item", "comment"}, + {"agenda_item", "content_object_id"}, + {"agenda_item", "duration"}, + {"agenda_item", "id"}, + {"agenda_item", "is_hidden"}, + {"agenda_item", "is_internal"}, + {"agenda_item", "item_number"}, + {"agenda_item", "level"}, + {"agenda_item", "meeting_id"}, + {"agenda_item", "parent_id"}, + {"agenda_item", "projection_ids"}, + {"agenda_item", "tag_ids"}, + {"agenda_item", "type"}, + {"agenda_item", "weight"}, + {"assignment", "A"}, + {"assignment", "agenda_item_id"}, + {"assignment", "attachment_ids"}, + {"assignment", "candidate_ids"}, + {"assignment", "default_poll_description"}, + {"assignment", "description"}, + {"assignment", "id"}, + {"assignment", "list_of_speakers_id"}, + {"assignment", "meeting_id"}, + {"assignment", "number_poll_candidates"}, + {"assignment", "open_posts"}, + {"assignment", "phase"}, + {"assignment", "poll_ids"}, + {"assignment", "projection_ids"}, + {"assignment", "sequential_number"}, + {"assignment", "tag_ids"}, + {"assignment", "title"}, + {"assignment_candidate", "A"}, + {"assignment_candidate", "assignment_id"}, + {"assignment_candidate", "id"}, + {"assignment_candidate", "meeting_id"}, + {"assignment_candidate", "meeting_user_id"}, + {"assignment_candidate", "weight"}, + {"chat_group", "A"}, + {"chat_group", "chat_message_ids"}, + {"chat_group", "id"}, + {"chat_group", "meeting_id"}, + {"chat_group", "name"}, + {"chat_group", "read_group_ids"}, + {"chat_group", "weight"}, + {"chat_group", "write_group_ids"}, + {"chat_message", "A"}, + {"chat_message", "chat_group_id"}, + {"chat_message", "content"}, + {"chat_message", "created"}, + {"chat_message", "id"}, + {"chat_message", "meeting_id"}, + {"chat_message", "meeting_user_id"}, + {"committee", "A"}, + {"committee", "B"}, + {"committee", "default_meeting_id"}, + {"committee", "description"}, + {"committee", "external_id"}, + {"committee", "forward_to_committee_ids"}, + {"committee", "forwarding_user_id"}, + {"committee", "id"}, + {"committee", "manager_ids"}, + {"committee", "meeting_ids"}, + {"committee", "name"}, + {"committee", "organization_id"}, + {"committee", "organization_tag_ids"}, + {"committee", "receive_forwardings_from_committee_ids"}, + {"committee", "user_ids"}, + {"group", "A"}, + {"group", "admin_group_for_meeting_id"}, + {"group", "default_group_for_meeting_id"}, + {"group", "external_id"}, + {"group", "id"}, + {"group", "mediafile_access_group_ids"}, + {"group", "mediafile_inherited_access_group_ids"}, + {"group", "meeting_id"}, + {"group", "meeting_user_ids"}, + {"group", "name"}, + {"group", "permissions"}, + {"group", "poll_ids"}, + {"group", "read_chat_group_ids"}, + {"group", "read_comment_section_ids"}, + {"group", "used_as_assignment_poll_default_id"}, + {"group", "used_as_motion_poll_default_id"}, + {"group", "used_as_poll_default_id"}, + {"group", "used_as_topic_poll_default_id"}, + {"group", "weight"}, + {"group", "write_chat_group_ids"}, + {"group", "write_comment_section_ids"}, + {"list_of_speakers", "A"}, + {"list_of_speakers", "closed"}, + {"list_of_speakers", "content_object_id"}, + {"list_of_speakers", "id"}, + {"list_of_speakers", "meeting_id"}, + {"list_of_speakers", "projection_ids"}, + {"list_of_speakers", "sequential_number"}, + {"list_of_speakers", "speaker_ids"}, + {"mediafile", "A"}, + {"mediafile", "access_group_ids"}, + {"mediafile", "attachment_ids"}, + {"mediafile", "child_ids"}, + {"mediafile", "create_timestamp"}, + {"mediafile", "filename"}, + {"mediafile", "filesize"}, + {"mediafile", "id"}, + {"mediafile", "inherited_access_group_ids"}, + {"mediafile", "is_directory"}, + {"mediafile", "is_public"}, + {"mediafile", "list_of_speakers_id"}, + {"mediafile", "mimetype"}, + {"mediafile", "owner_id"}, + {"mediafile", "parent_id"}, + {"mediafile", "pdf_information"}, + {"mediafile", "projection_ids"}, + {"mediafile", "title"}, + {"mediafile", "token"}, + {"mediafile", "used_as_font_bold_in_meeting_id"}, + {"mediafile", "used_as_font_bold_italic_in_meeting_id"}, + {"mediafile", "used_as_font_chyron_speaker_name_in_meeting_id"}, + {"mediafile", "used_as_font_italic_in_meeting_id"}, + {"mediafile", "used_as_font_monospace_in_meeting_id"}, + {"mediafile", "used_as_font_projector_h1_in_meeting_id"}, + {"mediafile", "used_as_font_projector_h2_in_meeting_id"}, + {"mediafile", "used_as_font_regular_in_meeting_id"}, + {"mediafile", "used_as_logo_pdf_ballot_paper_in_meeting_id"}, + {"mediafile", "used_as_logo_pdf_footer_l_in_meeting_id"}, + {"mediafile", "used_as_logo_pdf_footer_r_in_meeting_id"}, + {"mediafile", "used_as_logo_pdf_header_l_in_meeting_id"}, + {"mediafile", "used_as_logo_pdf_header_r_in_meeting_id"}, + {"mediafile", "used_as_logo_projector_header_in_meeting_id"}, + {"mediafile", "used_as_logo_projector_main_in_meeting_id"}, + {"mediafile", "used_as_logo_web_header_in_meeting_id"}, + {"meeting", "A"}, + {"meeting", "B"}, + {"meeting", "C"}, + {"meeting", "admin_group_id"}, + {"meeting", "agenda_enable_numbering"}, + {"meeting", "agenda_item_creation"}, + {"meeting", "agenda_item_ids"}, + {"meeting", "agenda_new_items_default_visibility"}, + {"meeting", "agenda_number_prefix"}, + {"meeting", "agenda_numeral_system"}, + {"meeting", "agenda_show_internal_items_on_projector"}, + {"meeting", "agenda_show_subtitles"}, + {"meeting", "all_projection_ids"}, + {"meeting", "applause_enable"}, + {"meeting", "applause_max_amount"}, + {"meeting", "applause_min_amount"}, + {"meeting", "applause_particle_image_url"}, + {"meeting", "applause_show_level"}, + {"meeting", "applause_timeout"}, + {"meeting", "applause_type"}, + {"meeting", "assignment_candidate_ids"}, + {"meeting", "assignment_ids"}, + {"meeting", "assignment_poll_add_candidates_to_list_of_speakers"}, + {"meeting", "assignment_poll_ballot_paper_number"}, + {"meeting", "assignment_poll_ballot_paper_selection"}, + {"meeting", "assignment_poll_default_backend"}, + {"meeting", "assignment_poll_default_group_ids"}, + {"meeting", "assignment_poll_default_method"}, + {"meeting", "assignment_poll_default_onehundred_percent_base"}, + {"meeting", "assignment_poll_default_type"}, + {"meeting", "assignment_poll_enable_max_votes_per_option"}, + {"meeting", "assignment_poll_sort_poll_result_by_votes"}, + {"meeting", "assignments_export_preamble"}, + {"meeting", "assignments_export_title"}, + {"meeting", "chat_group_ids"}, + {"meeting", "chat_message_ids"}, + {"meeting", "committee_id"}, + {"meeting", "conference_auto_connect"}, + {"meeting", "conference_auto_connect_next_speakers"}, + {"meeting", "conference_enable_helpdesk"}, + {"meeting", "conference_los_restriction"}, + {"meeting", "conference_open_microphone"}, + {"meeting", "conference_open_video"}, + {"meeting", "conference_show"}, + {"meeting", "conference_stream_poster_url"}, + {"meeting", "conference_stream_url"}, + {"meeting", "custom_translations"}, + {"meeting", "default_group_id"}, + {"meeting", "default_meeting_for_committee_id"}, + {"meeting", "default_projector_agenda_item_list_ids"}, + {"meeting", "default_projector_amendment_ids"}, + {"meeting", "default_projector_assignment_ids"}, + {"meeting", "default_projector_assignment_poll_ids"}, + {"meeting", "default_projector_countdown_ids"}, + {"meeting", "default_projector_current_list_of_speakers_ids"}, + {"meeting", "default_projector_list_of_speakers_ids"}, + {"meeting", "default_projector_mediafile_ids"}, + {"meeting", "default_projector_message_ids"}, + {"meeting", "default_projector_motion_block_ids"}, + {"meeting", "default_projector_motion_ids"}, + {"meeting", "default_projector_motion_poll_ids"}, + {"meeting", "default_projector_poll_ids"}, + {"meeting", "default_projector_topic_ids"}, + {"meeting", "description"}, + {"meeting", "enable_anonymous"}, + {"meeting", "end_time"}, + {"meeting", "export_csv_encoding"}, + {"meeting", "export_csv_separator"}, + {"meeting", "export_pdf_fontsize"}, + {"meeting", "export_pdf_line_height"}, + {"meeting", "export_pdf_page_margin_bottom"}, + {"meeting", "export_pdf_page_margin_left"}, + {"meeting", "export_pdf_page_margin_right"}, + {"meeting", "export_pdf_page_margin_top"}, + {"meeting", "export_pdf_pagenumber_alignment"}, + {"meeting", "export_pdf_pagesize"}, + {"meeting", "external_id"}, + {"meeting", "font_bold_id"}, + {"meeting", "font_bold_italic_id"}, + {"meeting", "font_chyron_speaker_name_id"}, + {"meeting", "font_italic_id"}, + {"meeting", "font_monospace_id"}, + {"meeting", "font_projector_h1_id"}, + {"meeting", "font_projector_h2_id"}, + {"meeting", "font_regular_id"}, + {"meeting", "forwarded_motion_ids"}, + {"meeting", "group_ids"}, + {"meeting", "id"}, + {"meeting", "imported_at"}, + {"meeting", "is_active_in_organization_id"}, + {"meeting", "is_archived_in_organization_id"}, + {"meeting", "jitsi_domain"}, + {"meeting", "jitsi_room_name"}, + {"meeting", "jitsi_room_password"}, + {"meeting", "language"}, + {"meeting", "list_of_speakers_amount_last_on_projector"}, + {"meeting", "list_of_speakers_amount_next_on_projector"}, + {"meeting", "list_of_speakers_can_set_contribution_self"}, + {"meeting", "list_of_speakers_closing_disables_point_of_order"}, + {"meeting", "list_of_speakers_countdown_id"}, + {"meeting", "list_of_speakers_couple_countdown"}, + {"meeting", "list_of_speakers_enable_point_of_order_categories"}, + {"meeting", "list_of_speakers_enable_point_of_order_speakers"}, + {"meeting", "list_of_speakers_enable_pro_contra_speech"}, + {"meeting", "list_of_speakers_ids"}, + {"meeting", "list_of_speakers_initially_closed"}, + {"meeting", "list_of_speakers_present_users_only"}, + {"meeting", "list_of_speakers_show_amount_of_speakers_on_slide"}, + {"meeting", "list_of_speakers_show_first_contribution"}, + {"meeting", "list_of_speakers_speaker_note_for_everyone"}, + {"meeting", "location"}, + {"meeting", "logo_pdf_ballot_paper_id"}, + {"meeting", "logo_pdf_footer_l_id"}, + {"meeting", "logo_pdf_footer_r_id"}, + {"meeting", "logo_pdf_header_l_id"}, + {"meeting", "logo_pdf_header_r_id"}, + {"meeting", "logo_projector_header_id"}, + {"meeting", "logo_projector_main_id"}, + {"meeting", "logo_web_header_id"}, + {"meeting", "mediafile_ids"}, + {"meeting", "meeting_user_ids"}, + {"meeting", "motion_block_ids"}, + {"meeting", "motion_category_ids"}, + {"meeting", "motion_change_recommendation_ids"}, + {"meeting", "motion_comment_ids"}, + {"meeting", "motion_comment_section_ids"}, + {"meeting", "motion_ids"}, + {"meeting", "motion_poll_ballot_paper_number"}, + {"meeting", "motion_poll_ballot_paper_selection"}, + {"meeting", "motion_poll_default_backend"}, + {"meeting", "motion_poll_default_group_ids"}, + {"meeting", "motion_poll_default_onehundred_percent_base"}, + {"meeting", "motion_poll_default_type"}, + {"meeting", "motion_state_ids"}, + {"meeting", "motion_statute_paragraph_ids"}, + {"meeting", "motion_submitter_ids"}, + {"meeting", "motion_workflow_ids"}, + {"meeting", "motions_amendments_enabled"}, + {"meeting", "motions_amendments_in_main_list"}, + {"meeting", "motions_amendments_multiple_paragraphs"}, + {"meeting", "motions_amendments_of_amendments"}, + {"meeting", "motions_amendments_prefix"}, + {"meeting", "motions_amendments_text_mode"}, + {"meeting", "motions_block_slide_columns"}, + {"meeting", "motions_default_amendment_workflow_id"}, + {"meeting", "motions_default_line_numbering"}, + {"meeting", "motions_default_sorting"}, + {"meeting", "motions_default_statute_amendment_workflow_id"}, + {"meeting", "motions_default_workflow_id"}, + {"meeting", "motions_enable_reason_on_projector"}, + {"meeting", "motions_enable_recommendation_on_projector"}, + {"meeting", "motions_enable_sidebox_on_projector"}, + {"meeting", "motions_enable_text_on_projector"}, + {"meeting", "motions_export_follow_recommendation"}, + {"meeting", "motions_export_preamble"}, + {"meeting", "motions_export_submitter_recommendation"}, + {"meeting", "motions_export_title"}, + {"meeting", "motions_line_length"}, + {"meeting", "motions_number_min_digits"}, + {"meeting", "motions_number_type"}, + {"meeting", "motions_number_with_blank"}, + {"meeting", "motions_preamble"}, + {"meeting", "motions_reason_required"}, + {"meeting", "motions_recommendation_text_mode"}, + {"meeting", "motions_recommendations_by"}, + {"meeting", "motions_show_referring_motions"}, + {"meeting", "motions_show_sequential_number"}, + {"meeting", "motions_statute_recommendations_by"}, + {"meeting", "motions_statutes_enabled"}, + {"meeting", "motions_supporters_min_amount"}, + {"meeting", "name"}, + {"meeting", "option_ids"}, + {"meeting", "organization_tag_ids"}, + {"meeting", "personal_note_ids"}, + {"meeting", "point_of_order_category_ids"}, + {"meeting", "poll_ballot_paper_number"}, + {"meeting", "poll_ballot_paper_selection"}, + {"meeting", "poll_candidate_ids"}, + {"meeting", "poll_candidate_list_ids"}, + {"meeting", "poll_countdown_id"}, + {"meeting", "poll_couple_countdown"}, + {"meeting", "poll_default_backend"}, + {"meeting", "poll_default_group_ids"}, + {"meeting", "poll_default_method"}, + {"meeting", "poll_default_onehundred_percent_base"}, + {"meeting", "poll_default_type"}, + {"meeting", "poll_ids"}, + {"meeting", "poll_sort_poll_result_by_votes"}, + {"meeting", "present_user_ids"}, + {"meeting", "projection_ids"}, + {"meeting", "projector_countdown_default_time"}, + {"meeting", "projector_countdown_ids"}, + {"meeting", "projector_countdown_warning_time"}, + {"meeting", "projector_ids"}, + {"meeting", "projector_message_ids"}, + {"meeting", "reference_projector_id"}, + {"meeting", "speaker_ids"}, + {"meeting", "start_time"}, + {"meeting", "tag_ids"}, + {"meeting", "template_for_organization_id"}, + {"meeting", "topic_ids"}, + {"meeting", "topic_poll_default_group_ids"}, + {"meeting", "user_ids"}, + {"meeting", "users_allow_self_set_present"}, + {"meeting", "users_email_body"}, + {"meeting", "users_email_replyto"}, + {"meeting", "users_email_sender"}, + {"meeting", "users_email_subject"}, + {"meeting", "users_enable_presence_view"}, + {"meeting", "users_enable_vote_delegations"}, + {"meeting", "users_enable_vote_weight"}, + {"meeting", "users_pdf_welcometext"}, + {"meeting", "users_pdf_welcometitle"}, + {"meeting", "users_pdf_wlan_encryption"}, + {"meeting", "users_pdf_wlan_password"}, + {"meeting", "users_pdf_wlan_ssid"}, + {"meeting", "vote_ids"}, + {"meeting", "welcome_text"}, + {"meeting", "welcome_title"}, + {"meeting_user", "A"}, + {"meeting_user", "B"}, + {"meeting_user", "D"}, + {"meeting_user", "about_me"}, + {"meeting_user", "assignment_candidate_ids"}, + {"meeting_user", "chat_message_ids"}, + {"meeting_user", "comment"}, + {"meeting_user", "group_ids"}, + {"meeting_user", "id"}, + {"meeting_user", "meeting_id"}, + {"meeting_user", "motion_submitter_ids"}, + {"meeting_user", "number"}, + {"meeting_user", "personal_note_ids"}, + {"meeting_user", "speaker_ids"}, + {"meeting_user", "structure_level"}, + {"meeting_user", "supported_motion_ids"}, + {"meeting_user", "user_id"}, + {"meeting_user", "vote_delegated_to_id"}, + {"meeting_user", "vote_delegations_from_ids"}, + {"meeting_user", "vote_weight"}, + {"motion", "A"}, + {"motion", "C"}, + {"motion", "D"}, + {"motion", "agenda_item_id"}, + {"motion", "all_derived_motion_ids"}, + {"motion", "all_origin_ids"}, + {"motion", "amendment_ids"}, + {"motion", "amendment_paragraphs"}, + {"motion", "attachment_ids"}, + {"motion", "block_id"}, + {"motion", "category_id"}, + {"motion", "category_weight"}, + {"motion", "change_recommendation_ids"}, + {"motion", "comment_ids"}, + {"motion", "created"}, + {"motion", "derived_motion_ids"}, + {"motion", "forwarded"}, + {"motion", "id"}, + {"motion", "last_modified"}, + {"motion", "lead_motion_id"}, + {"motion", "list_of_speakers_id"}, + {"motion", "meeting_id"}, + {"motion", "modified_final_version"}, + {"motion", "number"}, + {"motion", "number_value"}, + {"motion", "option_ids"}, + {"motion", "origin_id"}, + {"motion", "origin_meeting_id"}, + {"motion", "personal_note_ids"}, + {"motion", "poll_ids"}, + {"motion", "projection_ids"}, + {"motion", "reason"}, + {"motion", "recommendation_extension"}, + {"motion", "recommendation_extension_reference_ids"}, + {"motion", "recommendation_id"}, + {"motion", "referenced_in_motion_recommendation_extension_ids"}, + {"motion", "referenced_in_motion_state_extension_ids"}, + {"motion", "sequential_number"}, + {"motion", "sort_child_ids"}, + {"motion", "sort_parent_id"}, + {"motion", "sort_weight"}, + {"motion", "start_line_number"}, + {"motion", "state_extension"}, + {"motion", "state_extension_reference_ids"}, + {"motion", "state_id"}, + {"motion", "statute_paragraph_id"}, + {"motion", "submitter_ids"}, + {"motion", "supporter_meeting_user_ids"}, + {"motion", "tag_ids"}, + {"motion", "text"}, + {"motion", "title"}, + {"motion", "workflow_timestamp"}, + {"motion_block", "A"}, + {"motion_block", "agenda_item_id"}, + {"motion_block", "id"}, + {"motion_block", "internal"}, + {"motion_block", "list_of_speakers_id"}, + {"motion_block", "meeting_id"}, + {"motion_block", "motion_ids"}, + {"motion_block", "projection_ids"}, + {"motion_block", "sequential_number"}, + {"motion_block", "title"}, + {"motion_category", "A"}, + {"motion_category", "child_ids"}, + {"motion_category", "id"}, + {"motion_category", "level"}, + {"motion_category", "meeting_id"}, + {"motion_category", "motion_ids"}, + {"motion_category", "name"}, + {"motion_category", "parent_id"}, + {"motion_category", "prefix"}, + {"motion_category", "sequential_number"}, + {"motion_category", "weight"}, + {"motion_change_recommendation", "A"}, + {"motion_change_recommendation", "creation_time"}, + {"motion_change_recommendation", "id"}, + {"motion_change_recommendation", "internal"}, + {"motion_change_recommendation", "line_from"}, + {"motion_change_recommendation", "line_to"}, + {"motion_change_recommendation", "meeting_id"}, + {"motion_change_recommendation", "motion_id"}, + {"motion_change_recommendation", "other_description"}, + {"motion_change_recommendation", "rejected"}, + {"motion_change_recommendation", "text"}, + {"motion_change_recommendation", "type"}, + {"motion_comment", "A"}, + {"motion_comment", "comment"}, + {"motion_comment", "id"}, + {"motion_comment", "meeting_id"}, + {"motion_comment", "motion_id"}, + {"motion_comment", "section_id"}, + {"motion_comment_section", "A"}, + {"motion_comment_section", "comment_ids"}, + {"motion_comment_section", "id"}, + {"motion_comment_section", "meeting_id"}, + {"motion_comment_section", "name"}, + {"motion_comment_section", "read_group_ids"}, + {"motion_comment_section", "sequential_number"}, + {"motion_comment_section", "submitter_can_write"}, + {"motion_comment_section", "weight"}, + {"motion_comment_section", "write_group_ids"}, + {"motion_state", "A"}, + {"motion_state", "allow_create_poll"}, + {"motion_state", "allow_motion_forwarding"}, + {"motion_state", "allow_submitter_edit"}, + {"motion_state", "allow_support"}, + {"motion_state", "css_class"}, + {"motion_state", "first_state_of_workflow_id"}, + {"motion_state", "id"}, + {"motion_state", "meeting_id"}, + {"motion_state", "merge_amendment_into_final"}, + {"motion_state", "motion_ids"}, + {"motion_state", "motion_recommendation_ids"}, + {"motion_state", "name"}, + {"motion_state", "next_state_ids"}, + {"motion_state", "previous_state_ids"}, + {"motion_state", "recommendation_label"}, + {"motion_state", "restrictions"}, + {"motion_state", "set_number"}, + {"motion_state", "set_workflow_timestamp"}, + {"motion_state", "show_recommendation_extension_field"}, + {"motion_state", "show_state_extension_field"}, + {"motion_state", "submitter_withdraw_back_ids"}, + {"motion_state", "submitter_withdraw_state_id"}, + {"motion_state", "weight"}, + {"motion_state", "workflow_id"}, + {"motion_statute_paragraph", "A"}, + {"motion_statute_paragraph", "id"}, + {"motion_statute_paragraph", "meeting_id"}, + {"motion_statute_paragraph", "motion_ids"}, + {"motion_statute_paragraph", "sequential_number"}, + {"motion_statute_paragraph", "text"}, + {"motion_statute_paragraph", "title"}, + {"motion_statute_paragraph", "weight"}, + {"motion_submitter", "A"}, + {"motion_submitter", "id"}, + {"motion_submitter", "meeting_id"}, + {"motion_submitter", "meeting_user_id"}, + {"motion_submitter", "motion_id"}, + {"motion_submitter", "weight"}, + {"motion_workflow", "A"}, + {"motion_workflow", "default_amendment_workflow_meeting_id"}, + {"motion_workflow", "default_statute_amendment_workflow_meeting_id"}, + {"motion_workflow", "default_workflow_meeting_id"}, + {"motion_workflow", "first_state_id"}, + {"motion_workflow", "id"}, + {"motion_workflow", "meeting_id"}, + {"motion_workflow", "name"}, + {"motion_workflow", "sequential_number"}, + {"motion_workflow", "state_ids"}, + {"option", "A"}, + {"option", "B"}, + {"option", "abstain"}, + {"option", "content_object_id"}, + {"option", "id"}, + {"option", "meeting_id"}, + {"option", "no"}, + {"option", "poll_id"}, + {"option", "text"}, + {"option", "used_as_global_option_in_poll_id"}, + {"option", "vote_ids"}, + {"option", "weight"}, + {"option", "yes"}, + {"organization", "A"}, + {"organization", "B"}, + {"organization", "C"}, + {"organization", "active_meeting_ids"}, + {"organization", "archived_meeting_ids"}, + {"organization", "committee_ids"}, + {"organization", "default_language"}, + {"organization", "description"}, + {"organization", "enable_chat"}, + {"organization", "enable_electronic_voting"}, + {"organization", "genders"}, + {"organization", "id"}, + {"organization", "legal_notice"}, + {"organization", "limit_of_meetings"}, + {"organization", "limit_of_users"}, + {"organization", "login_text"}, + {"organization", "mediafile_ids"}, + {"organization", "name"}, + {"organization", "organization_tag_ids"}, + {"organization", "privacy_policy"}, + {"organization", "reset_password_verbose_errors"}, + {"organization", "saml_attr_mapping"}, + {"organization", "saml_enabled"}, + {"organization", "saml_login_button_text"}, + {"organization", "saml_metadata_idp"}, + {"organization", "saml_metadata_sp"}, + {"organization", "saml_private_key"}, + {"organization", "template_meeting_ids"}, + {"organization", "theme_id"}, + {"organization", "theme_ids"}, + {"organization", "url"}, + {"organization", "user_ids"}, + {"organization", "users_email_body"}, + {"organization", "users_email_replyto"}, + {"organization", "users_email_sender"}, + {"organization", "users_email_subject"}, + {"organization", "vote_decrypt_public_main_key"}, + {"organization_tag", "A"}, + {"organization_tag", "color"}, + {"organization_tag", "id"}, + {"organization_tag", "name"}, + {"organization_tag", "organization_id"}, + {"organization_tag", "tagged_ids"}, + {"personal_note", "A"}, + {"personal_note", "content_object_id"}, + {"personal_note", "id"}, + {"personal_note", "meeting_id"}, + {"personal_note", "meeting_user_id"}, + {"personal_note", "note"}, + {"personal_note", "star"}, + {"point_of_order_category", "A"}, + {"point_of_order_category", "id"}, + {"point_of_order_category", "meeting_id"}, + {"point_of_order_category", "rank"}, + {"point_of_order_category", "speaker_ids"}, + {"point_of_order_category", "text"}, + {"poll", "A"}, + {"poll", "B"}, + {"poll", "C"}, + {"poll", "D"}, + {"poll", "backend"}, + {"poll", "content_object_id"}, + {"poll", "crypt_key"}, + {"poll", "crypt_signature"}, + {"poll", "description"}, + {"poll", "entitled_group_ids"}, + {"poll", "entitled_users_at_stop"}, + {"poll", "global_abstain"}, + {"poll", "global_no"}, + {"poll", "global_option_id"}, + {"poll", "global_yes"}, + {"poll", "id"}, + {"poll", "is_pseudoanonymized"}, + {"poll", "max_votes_amount"}, + {"poll", "max_votes_per_option"}, + {"poll", "meeting_id"}, + {"poll", "min_votes_amount"}, + {"poll", "onehundred_percent_base"}, + {"poll", "option_ids"}, + {"poll", "pollmethod"}, + {"poll", "projection_ids"}, + {"poll", "sequential_number"}, + {"poll", "state"}, + {"poll", "title"}, + {"poll", "type"}, + {"poll", "vote_count"}, + {"poll", "voted_ids"}, + {"poll", "votes_raw"}, + {"poll", "votes_signature"}, + {"poll", "votescast"}, + {"poll", "votesinvalid"}, + {"poll", "votesvalid"}, + {"poll_candidate", "A"}, + {"poll_candidate", "id"}, + {"poll_candidate", "meeting_id"}, + {"poll_candidate", "poll_candidate_list_id"}, + {"poll_candidate", "user_id"}, + {"poll_candidate", "weight"}, + {"poll_candidate_list", "A"}, + {"poll_candidate_list", "id"}, + {"poll_candidate_list", "meeting_id"}, + {"poll_candidate_list", "option_id"}, + {"poll_candidate_list", "poll_candidate_ids"}, + {"projection", "A"}, + {"projection", "content"}, + {"projection", "content_object_id"}, + {"projection", "current_projector_id"}, + {"projection", "history_projector_id"}, + {"projection", "id"}, + {"projection", "meeting_id"}, + {"projection", "options"}, + {"projection", "preview_projector_id"}, + {"projection", "stable"}, + {"projection", "type"}, + {"projection", "weight"}, + {"projector", "A"}, + {"projector", "aspect_ratio_denominator"}, + {"projector", "aspect_ratio_numerator"}, + {"projector", "background_color"}, + {"projector", "chyron_background_color"}, + {"projector", "chyron_font_color"}, + {"projector", "color"}, + {"projector", "current_projection_ids"}, + {"projector", "header_background_color"}, + {"projector", "header_font_color"}, + {"projector", "header_h1_color"}, + {"projector", "history_projection_ids"}, + {"projector", "id"}, + {"projector", "is_internal"}, + {"projector", "meeting_id"}, + {"projector", "name"}, + {"projector", "preview_projection_ids"}, + {"projector", "scale"}, + {"projector", "scroll"}, + {"projector", "sequential_number"}, + {"projector", "show_clock"}, + {"projector", "show_header_footer"}, + {"projector", "show_logo"}, + {"projector", "show_title"}, + {"projector", "used_as_default_projector_for_agenda_item_list_in_meeting_id"}, + {"projector", "used_as_default_projector_for_amendment_in_meeting_id"}, + {"projector", "used_as_default_projector_for_assignment_in_meeting_id"}, + {"projector", "used_as_default_projector_for_assignment_poll_in_meeting_id"}, + {"projector", "used_as_default_projector_for_countdown_in_meeting_id"}, + {"projector", "used_as_default_projector_for_current_list_of_speakers_in_meeting_id"}, + {"projector", "used_as_default_projector_for_list_of_speakers_in_meeting_id"}, + {"projector", "used_as_default_projector_for_mediafile_in_meeting_id"}, + {"projector", "used_as_default_projector_for_message_in_meeting_id"}, + {"projector", "used_as_default_projector_for_motion_block_in_meeting_id"}, + {"projector", "used_as_default_projector_for_motion_in_meeting_id"}, + {"projector", "used_as_default_projector_for_motion_poll_in_meeting_id"}, + {"projector", "used_as_default_projector_for_poll_in_meeting_id"}, + {"projector", "used_as_default_projector_for_topic_in_meeting_id"}, + {"projector", "used_as_reference_projector_meeting_id"}, + {"projector", "width"}, + {"projector_countdown", "A"}, + {"projector_countdown", "countdown_time"}, + {"projector_countdown", "default_time"}, + {"projector_countdown", "description"}, + {"projector_countdown", "id"}, + {"projector_countdown", "meeting_id"}, + {"projector_countdown", "projection_ids"}, + {"projector_countdown", "running"}, + {"projector_countdown", "title"}, + {"projector_countdown", "used_as_list_of_speakers_countdown_meeting_id"}, + {"projector_countdown", "used_as_poll_countdown_meeting_id"}, + {"projector_message", "A"}, + {"projector_message", "id"}, + {"projector_message", "meeting_id"}, + {"projector_message", "message"}, + {"projector_message", "projection_ids"}, + {"speaker", "A"}, + {"speaker", "begin_time"}, + {"speaker", "end_time"}, + {"speaker", "id"}, + {"speaker", "list_of_speakers_id"}, + {"speaker", "meeting_id"}, + {"speaker", "meeting_user_id"}, + {"speaker", "note"}, + {"speaker", "point_of_order"}, + {"speaker", "point_of_order_category_id"}, + {"speaker", "speech_state"}, + {"speaker", "weight"}, + {"tag", "A"}, + {"tag", "id"}, + {"tag", "meeting_id"}, + {"tag", "name"}, + {"tag", "tagged_ids"}, + {"theme", "A"}, + {"theme", "abstain"}, + {"theme", "accent_100"}, + {"theme", "accent_200"}, + {"theme", "accent_300"}, + {"theme", "accent_400"}, + {"theme", "accent_50"}, + {"theme", "accent_500"}, + {"theme", "accent_600"}, + {"theme", "accent_700"}, + {"theme", "accent_800"}, + {"theme", "accent_900"}, + {"theme", "accent_a100"}, + {"theme", "accent_a200"}, + {"theme", "accent_a400"}, + {"theme", "accent_a700"}, + {"theme", "headbar"}, + {"theme", "id"}, + {"theme", "name"}, + {"theme", "no"}, + {"theme", "organization_id"}, + {"theme", "primary_100"}, + {"theme", "primary_200"}, + {"theme", "primary_300"}, + {"theme", "primary_400"}, + {"theme", "primary_50"}, + {"theme", "primary_500"}, + {"theme", "primary_600"}, + {"theme", "primary_700"}, + {"theme", "primary_800"}, + {"theme", "primary_900"}, + {"theme", "primary_a100"}, + {"theme", "primary_a200"}, + {"theme", "primary_a400"}, + {"theme", "primary_a700"}, + {"theme", "theme_for_organization_id"}, + {"theme", "warn_100"}, + {"theme", "warn_200"}, + {"theme", "warn_300"}, + {"theme", "warn_400"}, + {"theme", "warn_50"}, + {"theme", "warn_500"}, + {"theme", "warn_600"}, + {"theme", "warn_700"}, + {"theme", "warn_800"}, + {"theme", "warn_900"}, + {"theme", "warn_a100"}, + {"theme", "warn_a200"}, + {"theme", "warn_a400"}, + {"theme", "warn_a700"}, + {"theme", "yes"}, + {"topic", "A"}, + {"topic", "agenda_item_id"}, + {"topic", "attachment_ids"}, + {"topic", "id"}, + {"topic", "list_of_speakers_id"}, + {"topic", "meeting_id"}, + {"topic", "poll_ids"}, + {"topic", "projection_ids"}, + {"topic", "sequential_number"}, + {"topic", "text"}, + {"topic", "title"}, + {"user", "A"}, + {"user", "D"}, + {"user", "E"}, + {"user", "F"}, + {"user", "G"}, + {"user", "H"}, + {"user", "can_change_own_password"}, + {"user", "committee_ids"}, + {"user", "committee_management_ids"}, + {"user", "default_number"}, + {"user", "default_password"}, + {"user", "default_structure_level"}, + {"user", "default_vote_weight"}, + {"user", "delegated_vote_ids"}, + {"user", "email"}, + {"user", "first_name"}, + {"user", "forwarding_committee_ids"}, + {"user", "gender"}, + {"user", "id"}, + {"user", "is_active"}, + {"user", "is_demo_user"}, + {"user", "is_physical_person"}, + {"user", "is_present_in_meeting_ids"}, + {"user", "last_email_sent"}, + {"user", "last_login"}, + {"user", "last_name"}, + {"user", "meeting_ids"}, + {"user", "meeting_user_ids"}, + {"user", "option_ids"}, + {"user", "organization_id"}, + {"user", "organization_management_level"}, + {"user", "password"}, + {"user", "poll_candidate_ids"}, + {"user", "poll_voted_ids"}, + {"user", "pronoun"}, + {"user", "saml_id"}, + {"user", "title"}, + {"user", "username"}, + {"user", "vote_ids"}, + {"vote", "A"}, + {"vote", "B"}, + {"vote", "delegated_user_id"}, + {"vote", "id"}, + {"vote", "meeting_id"}, + {"vote", "option_id"}, + {"vote", "user_id"}, + {"vote", "user_token"}, + {"vote", "value"}, + {"vote", "weight"}, +} + +func collectionFieldToID(cf string) int { + switch cf { + case "action_worker/A": + return 1 + case "action_worker/created": + return 2 + case "action_worker/id": + return 3 + case "action_worker/name": + return 4 + case "action_worker/result": + return 5 + case "action_worker/state": + return 6 + case "action_worker/timestamp": + return 7 + case "agenda_item/A": + return 8 + case "agenda_item/B": + return 9 + case "agenda_item/C": + return 10 + case "agenda_item/child_ids": + return 11 + case "agenda_item/closed": + return 12 + case "agenda_item/comment": + return 13 + case "agenda_item/content_object_id": + return 14 + case "agenda_item/duration": + return 15 + case "agenda_item/id": + return 16 + case "agenda_item/is_hidden": + return 17 + case "agenda_item/is_internal": + return 18 + case "agenda_item/item_number": + return 19 + case "agenda_item/level": + return 20 + case "agenda_item/meeting_id": + return 21 + case "agenda_item/parent_id": + return 22 + case "agenda_item/projection_ids": + return 23 + case "agenda_item/tag_ids": + return 24 + case "agenda_item/type": + return 25 + case "agenda_item/weight": + return 26 + case "assignment/A": + return 27 + case "assignment/agenda_item_id": + return 28 + case "assignment/attachment_ids": + return 29 + case "assignment/candidate_ids": + return 30 + case "assignment/default_poll_description": + return 31 + case "assignment/description": + return 32 + case "assignment/id": + return 33 + case "assignment/list_of_speakers_id": + return 34 + case "assignment/meeting_id": + return 35 + case "assignment/number_poll_candidates": + return 36 + case "assignment/open_posts": + return 37 + case "assignment/phase": + return 38 + case "assignment/poll_ids": + return 39 + case "assignment/projection_ids": + return 40 + case "assignment/sequential_number": + return 41 + case "assignment/tag_ids": + return 42 + case "assignment/title": + return 43 + case "assignment_candidate/A": + return 44 + case "assignment_candidate/assignment_id": + return 45 + case "assignment_candidate/id": + return 46 + case "assignment_candidate/meeting_id": + return 47 + case "assignment_candidate/meeting_user_id": + return 48 + case "assignment_candidate/weight": + return 49 + case "chat_group/A": + return 50 + case "chat_group/chat_message_ids": + return 51 + case "chat_group/id": + return 52 + case "chat_group/meeting_id": + return 53 + case "chat_group/name": + return 54 + case "chat_group/read_group_ids": + return 55 + case "chat_group/weight": + return 56 + case "chat_group/write_group_ids": + return 57 + case "chat_message/A": + return 58 + case "chat_message/chat_group_id": + return 59 + case "chat_message/content": + return 60 + case "chat_message/created": + return 61 + case "chat_message/id": + return 62 + case "chat_message/meeting_id": + return 63 + case "chat_message/meeting_user_id": + return 64 + case "committee/A": + return 65 + case "committee/B": + return 66 + case "committee/default_meeting_id": + return 67 + case "committee/description": + return 68 + case "committee/external_id": + return 69 + case "committee/forward_to_committee_ids": + return 70 + case "committee/forwarding_user_id": + return 71 + case "committee/id": + return 72 + case "committee/manager_ids": + return 73 + case "committee/meeting_ids": + return 74 + case "committee/name": + return 75 + case "committee/organization_id": + return 76 + case "committee/organization_tag_ids": + return 77 + case "committee/receive_forwardings_from_committee_ids": + return 78 + case "committee/user_ids": + return 79 + case "group/A": + return 80 + case "group/admin_group_for_meeting_id": + return 81 + case "group/default_group_for_meeting_id": + return 82 + case "group/external_id": + return 83 + case "group/id": + return 84 + case "group/mediafile_access_group_ids": + return 85 + case "group/mediafile_inherited_access_group_ids": + return 86 + case "group/meeting_id": + return 87 + case "group/meeting_user_ids": + return 88 + case "group/name": + return 89 + case "group/permissions": + return 90 + case "group/poll_ids": + return 91 + case "group/read_chat_group_ids": + return 92 + case "group/read_comment_section_ids": + return 93 + case "group/used_as_assignment_poll_default_id": + return 94 + case "group/used_as_motion_poll_default_id": + return 95 + case "group/used_as_poll_default_id": + return 96 + case "group/used_as_topic_poll_default_id": + return 97 + case "group/weight": + return 98 + case "group/write_chat_group_ids": + return 99 + case "group/write_comment_section_ids": + return 100 + case "list_of_speakers/A": + return 101 + case "list_of_speakers/closed": + return 102 + case "list_of_speakers/content_object_id": + return 103 + case "list_of_speakers/id": + return 104 + case "list_of_speakers/meeting_id": + return 105 + case "list_of_speakers/projection_ids": + return 106 + case "list_of_speakers/sequential_number": + return 107 + case "list_of_speakers/speaker_ids": + return 108 + case "mediafile/A": + return 109 + case "mediafile/access_group_ids": + return 110 + case "mediafile/attachment_ids": + return 111 + case "mediafile/child_ids": + return 112 + case "mediafile/create_timestamp": + return 113 + case "mediafile/filename": + return 114 + case "mediafile/filesize": + return 115 + case "mediafile/id": + return 116 + case "mediafile/inherited_access_group_ids": + return 117 + case "mediafile/is_directory": + return 118 + case "mediafile/is_public": + return 119 + case "mediafile/list_of_speakers_id": + return 120 + case "mediafile/mimetype": + return 121 + case "mediafile/owner_id": + return 122 + case "mediafile/parent_id": + return 123 + case "mediafile/pdf_information": + return 124 + case "mediafile/projection_ids": + return 125 + case "mediafile/title": + return 126 + case "mediafile/token": + return 127 + case "mediafile/used_as_font_bold_in_meeting_id": + return 128 + case "mediafile/used_as_font_bold_italic_in_meeting_id": + return 129 + case "mediafile/used_as_font_chyron_speaker_name_in_meeting_id": + return 130 + case "mediafile/used_as_font_italic_in_meeting_id": + return 131 + case "mediafile/used_as_font_monospace_in_meeting_id": + return 132 + case "mediafile/used_as_font_projector_h1_in_meeting_id": + return 133 + case "mediafile/used_as_font_projector_h2_in_meeting_id": + return 134 + case "mediafile/used_as_font_regular_in_meeting_id": + return 135 + case "mediafile/used_as_logo_pdf_ballot_paper_in_meeting_id": + return 136 + case "mediafile/used_as_logo_pdf_footer_l_in_meeting_id": + return 137 + case "mediafile/used_as_logo_pdf_footer_r_in_meeting_id": + return 138 + case "mediafile/used_as_logo_pdf_header_l_in_meeting_id": + return 139 + case "mediafile/used_as_logo_pdf_header_r_in_meeting_id": + return 140 + case "mediafile/used_as_logo_projector_header_in_meeting_id": + return 141 + case "mediafile/used_as_logo_projector_main_in_meeting_id": + return 142 + case "mediafile/used_as_logo_web_header_in_meeting_id": + return 143 + case "meeting/A": + return 144 + case "meeting/B": + return 145 + case "meeting/C": + return 146 + case "meeting/admin_group_id": + return 147 + case "meeting/agenda_enable_numbering": + return 148 + case "meeting/agenda_item_creation": + return 149 + case "meeting/agenda_item_ids": + return 150 + case "meeting/agenda_new_items_default_visibility": + return 151 + case "meeting/agenda_number_prefix": + return 152 + case "meeting/agenda_numeral_system": + return 153 + case "meeting/agenda_show_internal_items_on_projector": + return 154 + case "meeting/agenda_show_subtitles": + return 155 + case "meeting/all_projection_ids": + return 156 + case "meeting/applause_enable": + return 157 + case "meeting/applause_max_amount": + return 158 + case "meeting/applause_min_amount": + return 159 + case "meeting/applause_particle_image_url": + return 160 + case "meeting/applause_show_level": + return 161 + case "meeting/applause_timeout": + return 162 + case "meeting/applause_type": + return 163 + case "meeting/assignment_candidate_ids": + return 164 + case "meeting/assignment_ids": + return 165 + case "meeting/assignment_poll_add_candidates_to_list_of_speakers": + return 166 + case "meeting/assignment_poll_ballot_paper_number": + return 167 + case "meeting/assignment_poll_ballot_paper_selection": + return 168 + case "meeting/assignment_poll_default_backend": + return 169 + case "meeting/assignment_poll_default_group_ids": + return 170 + case "meeting/assignment_poll_default_method": + return 171 + case "meeting/assignment_poll_default_onehundred_percent_base": + return 172 + case "meeting/assignment_poll_default_type": + return 173 + case "meeting/assignment_poll_enable_max_votes_per_option": + return 174 + case "meeting/assignment_poll_sort_poll_result_by_votes": + return 175 + case "meeting/assignments_export_preamble": + return 176 + case "meeting/assignments_export_title": + return 177 + case "meeting/chat_group_ids": + return 178 + case "meeting/chat_message_ids": + return 179 + case "meeting/committee_id": + return 180 + case "meeting/conference_auto_connect": + return 181 + case "meeting/conference_auto_connect_next_speakers": + return 182 + case "meeting/conference_enable_helpdesk": + return 183 + case "meeting/conference_los_restriction": + return 184 + case "meeting/conference_open_microphone": + return 185 + case "meeting/conference_open_video": + return 186 + case "meeting/conference_show": + return 187 + case "meeting/conference_stream_poster_url": + return 188 + case "meeting/conference_stream_url": + return 189 + case "meeting/custom_translations": + return 190 + case "meeting/default_group_id": + return 191 + case "meeting/default_meeting_for_committee_id": + return 192 + case "meeting/default_projector_agenda_item_list_ids": + return 193 + case "meeting/default_projector_amendment_ids": + return 194 + case "meeting/default_projector_assignment_ids": + return 195 + case "meeting/default_projector_assignment_poll_ids": + return 196 + case "meeting/default_projector_countdown_ids": + return 197 + case "meeting/default_projector_current_list_of_speakers_ids": + return 198 + case "meeting/default_projector_list_of_speakers_ids": + return 199 + case "meeting/default_projector_mediafile_ids": + return 200 + case "meeting/default_projector_message_ids": + return 201 + case "meeting/default_projector_motion_block_ids": + return 202 + case "meeting/default_projector_motion_ids": + return 203 + case "meeting/default_projector_motion_poll_ids": + return 204 + case "meeting/default_projector_poll_ids": + return 205 + case "meeting/default_projector_topic_ids": + return 206 + case "meeting/description": + return 207 + case "meeting/enable_anonymous": + return 208 + case "meeting/end_time": + return 209 + case "meeting/export_csv_encoding": + return 210 + case "meeting/export_csv_separator": + return 211 + case "meeting/export_pdf_fontsize": + return 212 + case "meeting/export_pdf_line_height": + return 213 + case "meeting/export_pdf_page_margin_bottom": + return 214 + case "meeting/export_pdf_page_margin_left": + return 215 + case "meeting/export_pdf_page_margin_right": + return 216 + case "meeting/export_pdf_page_margin_top": + return 217 + case "meeting/export_pdf_pagenumber_alignment": + return 218 + case "meeting/export_pdf_pagesize": + return 219 + case "meeting/external_id": + return 220 + case "meeting/font_bold_id": + return 221 + case "meeting/font_bold_italic_id": + return 222 + case "meeting/font_chyron_speaker_name_id": + return 223 + case "meeting/font_italic_id": + return 224 + case "meeting/font_monospace_id": + return 225 + case "meeting/font_projector_h1_id": + return 226 + case "meeting/font_projector_h2_id": + return 227 + case "meeting/font_regular_id": + return 228 + case "meeting/forwarded_motion_ids": + return 229 + case "meeting/group_ids": + return 230 + case "meeting/id": + return 231 + case "meeting/imported_at": + return 232 + case "meeting/is_active_in_organization_id": + return 233 + case "meeting/is_archived_in_organization_id": + return 234 + case "meeting/jitsi_domain": + return 235 + case "meeting/jitsi_room_name": + return 236 + case "meeting/jitsi_room_password": + return 237 + case "meeting/language": + return 238 + case "meeting/list_of_speakers_amount_last_on_projector": + return 239 + case "meeting/list_of_speakers_amount_next_on_projector": + return 240 + case "meeting/list_of_speakers_can_set_contribution_self": + return 241 + case "meeting/list_of_speakers_closing_disables_point_of_order": + return 242 + case "meeting/list_of_speakers_countdown_id": + return 243 + case "meeting/list_of_speakers_couple_countdown": + return 244 + case "meeting/list_of_speakers_enable_point_of_order_categories": + return 245 + case "meeting/list_of_speakers_enable_point_of_order_speakers": + return 246 + case "meeting/list_of_speakers_enable_pro_contra_speech": + return 247 + case "meeting/list_of_speakers_ids": + return 248 + case "meeting/list_of_speakers_initially_closed": + return 249 + case "meeting/list_of_speakers_present_users_only": + return 250 + case "meeting/list_of_speakers_show_amount_of_speakers_on_slide": + return 251 + case "meeting/list_of_speakers_show_first_contribution": + return 252 + case "meeting/list_of_speakers_speaker_note_for_everyone": + return 253 + case "meeting/location": + return 254 + case "meeting/logo_pdf_ballot_paper_id": + return 255 + case "meeting/logo_pdf_footer_l_id": + return 256 + case "meeting/logo_pdf_footer_r_id": + return 257 + case "meeting/logo_pdf_header_l_id": + return 258 + case "meeting/logo_pdf_header_r_id": + return 259 + case "meeting/logo_projector_header_id": + return 260 + case "meeting/logo_projector_main_id": + return 261 + case "meeting/logo_web_header_id": + return 262 + case "meeting/mediafile_ids": + return 263 + case "meeting/meeting_user_ids": + return 264 + case "meeting/motion_block_ids": + return 265 + case "meeting/motion_category_ids": + return 266 + case "meeting/motion_change_recommendation_ids": + return 267 + case "meeting/motion_comment_ids": + return 268 + case "meeting/motion_comment_section_ids": + return 269 + case "meeting/motion_ids": + return 270 + case "meeting/motion_poll_ballot_paper_number": + return 271 + case "meeting/motion_poll_ballot_paper_selection": + return 272 + case "meeting/motion_poll_default_backend": + return 273 + case "meeting/motion_poll_default_group_ids": + return 274 + case "meeting/motion_poll_default_onehundred_percent_base": + return 275 + case "meeting/motion_poll_default_type": + return 276 + case "meeting/motion_state_ids": + return 277 + case "meeting/motion_statute_paragraph_ids": + return 278 + case "meeting/motion_submitter_ids": + return 279 + case "meeting/motion_workflow_ids": + return 280 + case "meeting/motions_amendments_enabled": + return 281 + case "meeting/motions_amendments_in_main_list": + return 282 + case "meeting/motions_amendments_multiple_paragraphs": + return 283 + case "meeting/motions_amendments_of_amendments": + return 284 + case "meeting/motions_amendments_prefix": + return 285 + case "meeting/motions_amendments_text_mode": + return 286 + case "meeting/motions_block_slide_columns": + return 287 + case "meeting/motions_default_amendment_workflow_id": + return 288 + case "meeting/motions_default_line_numbering": + return 289 + case "meeting/motions_default_sorting": + return 290 + case "meeting/motions_default_statute_amendment_workflow_id": + return 291 + case "meeting/motions_default_workflow_id": + return 292 + case "meeting/motions_enable_reason_on_projector": + return 293 + case "meeting/motions_enable_recommendation_on_projector": + return 294 + case "meeting/motions_enable_sidebox_on_projector": + return 295 + case "meeting/motions_enable_text_on_projector": + return 296 + case "meeting/motions_export_follow_recommendation": + return 297 + case "meeting/motions_export_preamble": + return 298 + case "meeting/motions_export_submitter_recommendation": + return 299 + case "meeting/motions_export_title": + return 300 + case "meeting/motions_line_length": + return 301 + case "meeting/motions_number_min_digits": + return 302 + case "meeting/motions_number_type": + return 303 + case "meeting/motions_number_with_blank": + return 304 + case "meeting/motions_preamble": + return 305 + case "meeting/motions_reason_required": + return 306 + case "meeting/motions_recommendation_text_mode": + return 307 + case "meeting/motions_recommendations_by": + return 308 + case "meeting/motions_show_referring_motions": + return 309 + case "meeting/motions_show_sequential_number": + return 310 + case "meeting/motions_statute_recommendations_by": + return 311 + case "meeting/motions_statutes_enabled": + return 312 + case "meeting/motions_supporters_min_amount": + return 313 + case "meeting/name": + return 314 + case "meeting/option_ids": + return 315 + case "meeting/organization_tag_ids": + return 316 + case "meeting/personal_note_ids": + return 317 + case "meeting/point_of_order_category_ids": + return 318 + case "meeting/poll_ballot_paper_number": + return 319 + case "meeting/poll_ballot_paper_selection": + return 320 + case "meeting/poll_candidate_ids": + return 321 + case "meeting/poll_candidate_list_ids": + return 322 + case "meeting/poll_countdown_id": + return 323 + case "meeting/poll_couple_countdown": + return 324 + case "meeting/poll_default_backend": + return 325 + case "meeting/poll_default_group_ids": + return 326 + case "meeting/poll_default_method": + return 327 + case "meeting/poll_default_onehundred_percent_base": + return 328 + case "meeting/poll_default_type": + return 329 + case "meeting/poll_ids": + return 330 + case "meeting/poll_sort_poll_result_by_votes": + return 331 + case "meeting/present_user_ids": + return 332 + case "meeting/projection_ids": + return 333 + case "meeting/projector_countdown_default_time": + return 334 + case "meeting/projector_countdown_ids": + return 335 + case "meeting/projector_countdown_warning_time": + return 336 + case "meeting/projector_ids": + return 337 + case "meeting/projector_message_ids": + return 338 + case "meeting/reference_projector_id": + return 339 + case "meeting/speaker_ids": + return 340 + case "meeting/start_time": + return 341 + case "meeting/tag_ids": + return 342 + case "meeting/template_for_organization_id": + return 343 + case "meeting/topic_ids": + return 344 + case "meeting/topic_poll_default_group_ids": + return 345 + case "meeting/user_ids": + return 346 + case "meeting/users_allow_self_set_present": + return 347 + case "meeting/users_email_body": + return 348 + case "meeting/users_email_replyto": + return 349 + case "meeting/users_email_sender": + return 350 + case "meeting/users_email_subject": + return 351 + case "meeting/users_enable_presence_view": + return 352 + case "meeting/users_enable_vote_delegations": + return 353 + case "meeting/users_enable_vote_weight": + return 354 + case "meeting/users_pdf_welcometext": + return 355 + case "meeting/users_pdf_welcometitle": + return 356 + case "meeting/users_pdf_wlan_encryption": + return 357 + case "meeting/users_pdf_wlan_password": + return 358 + case "meeting/users_pdf_wlan_ssid": + return 359 + case "meeting/vote_ids": + return 360 + case "meeting/welcome_text": + return 361 + case "meeting/welcome_title": + return 362 + case "meeting_user/A": + return 363 + case "meeting_user/B": + return 364 + case "meeting_user/D": + return 365 + case "meeting_user/about_me": + return 366 + case "meeting_user/assignment_candidate_ids": + return 367 + case "meeting_user/chat_message_ids": + return 368 + case "meeting_user/comment": + return 369 + case "meeting_user/group_ids": + return 370 + case "meeting_user/id": + return 371 + case "meeting_user/meeting_id": + return 372 + case "meeting_user/motion_submitter_ids": + return 373 + case "meeting_user/number": + return 374 + case "meeting_user/personal_note_ids": + return 375 + case "meeting_user/speaker_ids": + return 376 + case "meeting_user/structure_level": + return 377 + case "meeting_user/supported_motion_ids": + return 378 + case "meeting_user/user_id": + return 379 + case "meeting_user/vote_delegated_to_id": + return 380 + case "meeting_user/vote_delegations_from_ids": + return 381 + case "meeting_user/vote_weight": + return 382 + case "motion/A": + return 383 + case "motion/C": + return 384 + case "motion/D": + return 385 + case "motion/agenda_item_id": + return 386 + case "motion/all_derived_motion_ids": + return 387 + case "motion/all_origin_ids": + return 388 + case "motion/amendment_ids": + return 389 + case "motion/amendment_paragraphs": + return 390 + case "motion/attachment_ids": + return 391 + case "motion/block_id": + return 392 + case "motion/category_id": + return 393 + case "motion/category_weight": + return 394 + case "motion/change_recommendation_ids": + return 395 + case "motion/comment_ids": + return 396 + case "motion/created": + return 397 + case "motion/derived_motion_ids": + return 398 + case "motion/forwarded": + return 399 + case "motion/id": + return 400 + case "motion/last_modified": + return 401 + case "motion/lead_motion_id": + return 402 + case "motion/list_of_speakers_id": + return 403 + case "motion/meeting_id": + return 404 + case "motion/modified_final_version": + return 405 + case "motion/number": + return 406 + case "motion/number_value": + return 407 + case "motion/option_ids": + return 408 + case "motion/origin_id": + return 409 + case "motion/origin_meeting_id": + return 410 + case "motion/personal_note_ids": + return 411 + case "motion/poll_ids": + return 412 + case "motion/projection_ids": + return 413 + case "motion/reason": + return 414 + case "motion/recommendation_extension": + return 415 + case "motion/recommendation_extension_reference_ids": + return 416 + case "motion/recommendation_id": + return 417 + case "motion/referenced_in_motion_recommendation_extension_ids": + return 418 + case "motion/referenced_in_motion_state_extension_ids": + return 419 + case "motion/sequential_number": + return 420 + case "motion/sort_child_ids": + return 421 + case "motion/sort_parent_id": + return 422 + case "motion/sort_weight": + return 423 + case "motion/start_line_number": + return 424 + case "motion/state_extension": + return 425 + case "motion/state_extension_reference_ids": + return 426 + case "motion/state_id": + return 427 + case "motion/statute_paragraph_id": + return 428 + case "motion/submitter_ids": + return 429 + case "motion/supporter_meeting_user_ids": + return 430 + case "motion/tag_ids": + return 431 + case "motion/text": + return 432 + case "motion/title": + return 433 + case "motion/workflow_timestamp": + return 434 + case "motion_block/A": + return 435 + case "motion_block/agenda_item_id": + return 436 + case "motion_block/id": + return 437 + case "motion_block/internal": + return 438 + case "motion_block/list_of_speakers_id": + return 439 + case "motion_block/meeting_id": + return 440 + case "motion_block/motion_ids": + return 441 + case "motion_block/projection_ids": + return 442 + case "motion_block/sequential_number": + return 443 + case "motion_block/title": + return 444 + case "motion_category/A": + return 445 + case "motion_category/child_ids": + return 446 + case "motion_category/id": + return 447 + case "motion_category/level": + return 448 + case "motion_category/meeting_id": + return 449 + case "motion_category/motion_ids": + return 450 + case "motion_category/name": + return 451 + case "motion_category/parent_id": + return 452 + case "motion_category/prefix": + return 453 + case "motion_category/sequential_number": + return 454 + case "motion_category/weight": + return 455 + case "motion_change_recommendation/A": + return 456 + case "motion_change_recommendation/creation_time": + return 457 + case "motion_change_recommendation/id": + return 458 + case "motion_change_recommendation/internal": + return 459 + case "motion_change_recommendation/line_from": + return 460 + case "motion_change_recommendation/line_to": + return 461 + case "motion_change_recommendation/meeting_id": + return 462 + case "motion_change_recommendation/motion_id": + return 463 + case "motion_change_recommendation/other_description": + return 464 + case "motion_change_recommendation/rejected": + return 465 + case "motion_change_recommendation/text": + return 466 + case "motion_change_recommendation/type": + return 467 + case "motion_comment/A": + return 468 + case "motion_comment/comment": + return 469 + case "motion_comment/id": + return 470 + case "motion_comment/meeting_id": + return 471 + case "motion_comment/motion_id": + return 472 + case "motion_comment/section_id": + return 473 + case "motion_comment_section/A": + return 474 + case "motion_comment_section/comment_ids": + return 475 + case "motion_comment_section/id": + return 476 + case "motion_comment_section/meeting_id": + return 477 + case "motion_comment_section/name": + return 478 + case "motion_comment_section/read_group_ids": + return 479 + case "motion_comment_section/sequential_number": + return 480 + case "motion_comment_section/submitter_can_write": + return 481 + case "motion_comment_section/weight": + return 482 + case "motion_comment_section/write_group_ids": + return 483 + case "motion_state/A": + return 484 + case "motion_state/allow_create_poll": + return 485 + case "motion_state/allow_motion_forwarding": + return 486 + case "motion_state/allow_submitter_edit": + return 487 + case "motion_state/allow_support": + return 488 + case "motion_state/css_class": + return 489 + case "motion_state/first_state_of_workflow_id": + return 490 + case "motion_state/id": + return 491 + case "motion_state/meeting_id": + return 492 + case "motion_state/merge_amendment_into_final": + return 493 + case "motion_state/motion_ids": + return 494 + case "motion_state/motion_recommendation_ids": + return 495 + case "motion_state/name": + return 496 + case "motion_state/next_state_ids": + return 497 + case "motion_state/previous_state_ids": + return 498 + case "motion_state/recommendation_label": + return 499 + case "motion_state/restrictions": + return 500 + case "motion_state/set_number": + return 501 + case "motion_state/set_workflow_timestamp": + return 502 + case "motion_state/show_recommendation_extension_field": + return 503 + case "motion_state/show_state_extension_field": + return 504 + case "motion_state/submitter_withdraw_back_ids": + return 505 + case "motion_state/submitter_withdraw_state_id": + return 506 + case "motion_state/weight": + return 507 + case "motion_state/workflow_id": + return 508 + case "motion_statute_paragraph/A": + return 509 + case "motion_statute_paragraph/id": + return 510 + case "motion_statute_paragraph/meeting_id": + return 511 + case "motion_statute_paragraph/motion_ids": + return 512 + case "motion_statute_paragraph/sequential_number": + return 513 + case "motion_statute_paragraph/text": + return 514 + case "motion_statute_paragraph/title": + return 515 + case "motion_statute_paragraph/weight": + return 516 + case "motion_submitter/A": + return 517 + case "motion_submitter/id": + return 518 + case "motion_submitter/meeting_id": + return 519 + case "motion_submitter/meeting_user_id": + return 520 + case "motion_submitter/motion_id": + return 521 + case "motion_submitter/weight": + return 522 + case "motion_workflow/A": + return 523 + case "motion_workflow/default_amendment_workflow_meeting_id": + return 524 + case "motion_workflow/default_statute_amendment_workflow_meeting_id": + return 525 + case "motion_workflow/default_workflow_meeting_id": + return 526 + case "motion_workflow/first_state_id": + return 527 + case "motion_workflow/id": + return 528 + case "motion_workflow/meeting_id": + return 529 + case "motion_workflow/name": + return 530 + case "motion_workflow/sequential_number": + return 531 + case "motion_workflow/state_ids": + return 532 + case "option/A": + return 533 + case "option/B": + return 534 + case "option/abstain": + return 535 + case "option/content_object_id": + return 536 + case "option/id": + return 537 + case "option/meeting_id": + return 538 + case "option/no": + return 539 + case "option/poll_id": + return 540 + case "option/text": + return 541 + case "option/used_as_global_option_in_poll_id": + return 542 + case "option/vote_ids": + return 543 + case "option/weight": + return 544 + case "option/yes": + return 545 + case "organization/A": + return 546 + case "organization/B": + return 547 + case "organization/C": + return 548 + case "organization/active_meeting_ids": + return 549 + case "organization/archived_meeting_ids": + return 550 + case "organization/committee_ids": + return 551 + case "organization/default_language": + return 552 + case "organization/description": + return 553 + case "organization/enable_chat": + return 554 + case "organization/enable_electronic_voting": + return 555 + case "organization/genders": + return 556 + case "organization/id": + return 557 + case "organization/legal_notice": + return 558 + case "organization/limit_of_meetings": + return 559 + case "organization/limit_of_users": + return 560 + case "organization/login_text": + return 561 + case "organization/mediafile_ids": + return 562 + case "organization/name": + return 563 + case "organization/organization_tag_ids": + return 564 + case "organization/privacy_policy": + return 565 + case "organization/reset_password_verbose_errors": + return 566 + case "organization/saml_attr_mapping": + return 567 + case "organization/saml_enabled": + return 568 + case "organization/saml_login_button_text": + return 569 + case "organization/saml_metadata_idp": + return 570 + case "organization/saml_metadata_sp": + return 571 + case "organization/saml_private_key": + return 572 + case "organization/template_meeting_ids": + return 573 + case "organization/theme_id": + return 574 + case "organization/theme_ids": + return 575 + case "organization/url": + return 576 + case "organization/user_ids": + return 577 + case "organization/users_email_body": + return 578 + case "organization/users_email_replyto": + return 579 + case "organization/users_email_sender": + return 580 + case "organization/users_email_subject": + return 581 + case "organization/vote_decrypt_public_main_key": + return 582 + case "organization_tag/A": + return 583 + case "organization_tag/color": + return 584 + case "organization_tag/id": + return 585 + case "organization_tag/name": + return 586 + case "organization_tag/organization_id": + return 587 + case "organization_tag/tagged_ids": + return 588 + case "personal_note/A": + return 589 + case "personal_note/content_object_id": + return 590 + case "personal_note/id": + return 591 + case "personal_note/meeting_id": + return 592 + case "personal_note/meeting_user_id": + return 593 + case "personal_note/note": + return 594 + case "personal_note/star": + return 595 + case "point_of_order_category/A": + return 596 + case "point_of_order_category/id": + return 597 + case "point_of_order_category/meeting_id": + return 598 + case "point_of_order_category/rank": + return 599 + case "point_of_order_category/speaker_ids": + return 600 + case "point_of_order_category/text": + return 601 + case "poll/A": + return 602 + case "poll/B": + return 603 + case "poll/C": + return 604 + case "poll/D": + return 605 + case "poll/backend": + return 606 + case "poll/content_object_id": + return 607 + case "poll/crypt_key": + return 608 + case "poll/crypt_signature": + return 609 + case "poll/description": + return 610 + case "poll/entitled_group_ids": + return 611 + case "poll/entitled_users_at_stop": + return 612 + case "poll/global_abstain": + return 613 + case "poll/global_no": + return 614 + case "poll/global_option_id": + return 615 + case "poll/global_yes": + return 616 + case "poll/id": + return 617 + case "poll/is_pseudoanonymized": + return 618 + case "poll/max_votes_amount": + return 619 + case "poll/max_votes_per_option": + return 620 + case "poll/meeting_id": + return 621 + case "poll/min_votes_amount": + return 622 + case "poll/onehundred_percent_base": + return 623 + case "poll/option_ids": + return 624 + case "poll/pollmethod": + return 625 + case "poll/projection_ids": + return 626 + case "poll/sequential_number": + return 627 + case "poll/state": + return 628 + case "poll/title": + return 629 + case "poll/type": + return 630 + case "poll/vote_count": + return 631 + case "poll/voted_ids": + return 632 + case "poll/votes_raw": + return 633 + case "poll/votes_signature": + return 634 + case "poll/votescast": + return 635 + case "poll/votesinvalid": + return 636 + case "poll/votesvalid": + return 637 + case "poll_candidate/A": + return 638 + case "poll_candidate/id": + return 639 + case "poll_candidate/meeting_id": + return 640 + case "poll_candidate/poll_candidate_list_id": + return 641 + case "poll_candidate/user_id": + return 642 + case "poll_candidate/weight": + return 643 + case "poll_candidate_list/A": + return 644 + case "poll_candidate_list/id": + return 645 + case "poll_candidate_list/meeting_id": + return 646 + case "poll_candidate_list/option_id": + return 647 + case "poll_candidate_list/poll_candidate_ids": + return 648 + case "projection/A": + return 649 + case "projection/content": + return 650 + case "projection/content_object_id": + return 651 + case "projection/current_projector_id": + return 652 + case "projection/history_projector_id": + return 653 + case "projection/id": + return 654 + case "projection/meeting_id": + return 655 + case "projection/options": + return 656 + case "projection/preview_projector_id": + return 657 + case "projection/stable": + return 658 + case "projection/type": + return 659 + case "projection/weight": + return 660 + case "projector/A": + return 661 + case "projector/aspect_ratio_denominator": + return 662 + case "projector/aspect_ratio_numerator": + return 663 + case "projector/background_color": + return 664 + case "projector/chyron_background_color": + return 665 + case "projector/chyron_font_color": + return 666 + case "projector/color": + return 667 + case "projector/current_projection_ids": + return 668 + case "projector/header_background_color": + return 669 + case "projector/header_font_color": + return 670 + case "projector/header_h1_color": + return 671 + case "projector/history_projection_ids": + return 672 + case "projector/id": + return 673 + case "projector/is_internal": + return 674 + case "projector/meeting_id": + return 675 + case "projector/name": + return 676 + case "projector/preview_projection_ids": + return 677 + case "projector/scale": + return 678 + case "projector/scroll": + return 679 + case "projector/sequential_number": + return 680 + case "projector/show_clock": + return 681 + case "projector/show_header_footer": + return 682 + case "projector/show_logo": + return 683 + case "projector/show_title": + return 684 + case "projector/used_as_default_projector_for_agenda_item_list_in_meeting_id": + return 685 + case "projector/used_as_default_projector_for_amendment_in_meeting_id": + return 686 + case "projector/used_as_default_projector_for_assignment_in_meeting_id": + return 687 + case "projector/used_as_default_projector_for_assignment_poll_in_meeting_id": + return 688 + case "projector/used_as_default_projector_for_countdown_in_meeting_id": + return 689 + case "projector/used_as_default_projector_for_current_list_of_speakers_in_meeting_id": + return 690 + case "projector/used_as_default_projector_for_list_of_speakers_in_meeting_id": + return 691 + case "projector/used_as_default_projector_for_mediafile_in_meeting_id": + return 692 + case "projector/used_as_default_projector_for_message_in_meeting_id": + return 693 + case "projector/used_as_default_projector_for_motion_block_in_meeting_id": + return 694 + case "projector/used_as_default_projector_for_motion_in_meeting_id": + return 695 + case "projector/used_as_default_projector_for_motion_poll_in_meeting_id": + return 696 + case "projector/used_as_default_projector_for_poll_in_meeting_id": + return 697 + case "projector/used_as_default_projector_for_topic_in_meeting_id": + return 698 + case "projector/used_as_reference_projector_meeting_id": + return 699 + case "projector/width": + return 700 + case "projector_countdown/A": + return 701 + case "projector_countdown/countdown_time": + return 702 + case "projector_countdown/default_time": + return 703 + case "projector_countdown/description": + return 704 + case "projector_countdown/id": + return 705 + case "projector_countdown/meeting_id": + return 706 + case "projector_countdown/projection_ids": + return 707 + case "projector_countdown/running": + return 708 + case "projector_countdown/title": + return 709 + case "projector_countdown/used_as_list_of_speakers_countdown_meeting_id": + return 710 + case "projector_countdown/used_as_poll_countdown_meeting_id": + return 711 + case "projector_message/A": + return 712 + case "projector_message/id": + return 713 + case "projector_message/meeting_id": + return 714 + case "projector_message/message": + return 715 + case "projector_message/projection_ids": + return 716 + case "speaker/A": + return 717 + case "speaker/begin_time": + return 718 + case "speaker/end_time": + return 719 + case "speaker/id": + return 720 + case "speaker/list_of_speakers_id": + return 721 + case "speaker/meeting_id": + return 722 + case "speaker/meeting_user_id": + return 723 + case "speaker/note": + return 724 + case "speaker/point_of_order": + return 725 + case "speaker/point_of_order_category_id": + return 726 + case "speaker/speech_state": + return 727 + case "speaker/weight": + return 728 + case "tag/A": + return 729 + case "tag/id": + return 730 + case "tag/meeting_id": + return 731 + case "tag/name": + return 732 + case "tag/tagged_ids": + return 733 + case "theme/A": + return 734 + case "theme/abstain": + return 735 + case "theme/accent_100": + return 736 + case "theme/accent_200": + return 737 + case "theme/accent_300": + return 738 + case "theme/accent_400": + return 739 + case "theme/accent_50": + return 740 + case "theme/accent_500": + return 741 + case "theme/accent_600": + return 742 + case "theme/accent_700": + return 743 + case "theme/accent_800": + return 744 + case "theme/accent_900": + return 745 + case "theme/accent_a100": + return 746 + case "theme/accent_a200": + return 747 + case "theme/accent_a400": + return 748 + case "theme/accent_a700": + return 749 + case "theme/headbar": + return 750 + case "theme/id": + return 751 + case "theme/name": + return 752 + case "theme/no": + return 753 + case "theme/organization_id": + return 754 + case "theme/primary_100": + return 755 + case "theme/primary_200": + return 756 + case "theme/primary_300": + return 757 + case "theme/primary_400": + return 758 + case "theme/primary_50": + return 759 + case "theme/primary_500": + return 760 + case "theme/primary_600": + return 761 + case "theme/primary_700": + return 762 + case "theme/primary_800": + return 763 + case "theme/primary_900": + return 764 + case "theme/primary_a100": + return 765 + case "theme/primary_a200": + return 766 + case "theme/primary_a400": + return 767 + case "theme/primary_a700": + return 768 + case "theme/theme_for_organization_id": + return 769 + case "theme/warn_100": + return 770 + case "theme/warn_200": + return 771 + case "theme/warn_300": + return 772 + case "theme/warn_400": + return 773 + case "theme/warn_50": + return 774 + case "theme/warn_500": + return 775 + case "theme/warn_600": + return 776 + case "theme/warn_700": + return 777 + case "theme/warn_800": + return 778 + case "theme/warn_900": + return 779 + case "theme/warn_a100": + return 780 + case "theme/warn_a200": + return 781 + case "theme/warn_a400": + return 782 + case "theme/warn_a700": + return 783 + case "theme/yes": + return 784 + case "topic/A": + return 785 + case "topic/agenda_item_id": + return 786 + case "topic/attachment_ids": + return 787 + case "topic/id": + return 788 + case "topic/list_of_speakers_id": + return 789 + case "topic/meeting_id": + return 790 + case "topic/poll_ids": + return 791 + case "topic/projection_ids": + return 792 + case "topic/sequential_number": + return 793 + case "topic/text": + return 794 + case "topic/title": + return 795 + case "user/A": + return 796 + case "user/D": + return 797 + case "user/E": + return 798 + case "user/F": + return 799 + case "user/G": + return 800 + case "user/H": + return 801 + case "user/can_change_own_password": + return 802 + case "user/committee_ids": + return 803 + case "user/committee_management_ids": + return 804 + case "user/default_number": + return 805 + case "user/default_password": + return 806 + case "user/default_structure_level": + return 807 + case "user/default_vote_weight": + return 808 + case "user/delegated_vote_ids": + return 809 + case "user/email": + return 810 + case "user/first_name": + return 811 + case "user/forwarding_committee_ids": + return 812 + case "user/gender": + return 813 + case "user/id": + return 814 + case "user/is_active": + return 815 + case "user/is_demo_user": + return 816 + case "user/is_physical_person": + return 817 + case "user/is_present_in_meeting_ids": + return 818 + case "user/last_email_sent": + return 819 + case "user/last_login": + return 820 + case "user/last_name": + return 821 + case "user/meeting_ids": + return 822 + case "user/meeting_user_ids": + return 823 + case "user/option_ids": + return 824 + case "user/organization_id": + return 825 + case "user/organization_management_level": + return 826 + case "user/password": + return 827 + case "user/poll_candidate_ids": + return 828 + case "user/poll_voted_ids": + return 829 + case "user/pronoun": + return 830 + case "user/saml_id": + return 831 + case "user/title": + return 832 + case "user/username": + return 833 + case "user/vote_ids": + return 834 + case "vote/A": + return 835 + case "vote/B": + return 836 + case "vote/delegated_user_id": + return 837 + case "vote/id": + return 838 + case "vote/meeting_id": + return 839 + case "vote/option_id": + return 840 + case "vote/user_id": + return 841 + case "vote/user_token": + return 842 + case "vote/value": + return 843 + case "vote/weight": + return 844 + default: + return -1 + } +} diff --git a/pkg/datastore/dskey/gen_collection_fields/main.go b/pkg/datastore/dskey/gen_collection_fields/main.go new file mode 100644 index 00000000..97d89be2 --- /dev/null +++ b/pkg/datastore/dskey/gen_collection_fields/main.go @@ -0,0 +1,144 @@ +package main + +import ( + "bytes" + "fmt" + "go/format" + "io" + "log" + "net/http" + "os" + "sort" + "text/template" + + "github.com/OpenSlides/openslides-autoupdate-service/internal/models" + "github.com/OpenSlides/openslides-autoupdate-service/pkg/set" +) + +func main() { + r, err := loadDefition() + if err != nil { + log.Fatalf("Can not load models defition: %v", err) + } + defer r.Close() + + collectionFields, err := parse(r) + if err != nil { + log.Fatalf("Can not parse model definition: %v", err) + } + + if err := writeFile(os.Stdout, collectionFields); err != nil { + log.Fatalf("Can not write result: %v", err) + } +} + +func loadDefition() (io.ReadCloser, error) { + r, err := http.Get(models.URLModelsYML()) + if err != nil { + return nil, fmt.Errorf("request defition: %w", err) + } + if r.StatusCode != http.StatusOK { + return nil, fmt.Errorf("request returned status %s", r.Status) + } + return r.Body, nil +} + +type collectionField struct { + Collection string + Field string +} + +func parse(r io.Reader) ([]collectionField, error) { + inData, err := models.Unmarshal(r) + if err != nil { + return nil, fmt.Errorf("unmarshalling models.yml: %w", err) + } + + var result []collectionField + + modefields := set.New[collectionField]() + + for collection, collInfo := range inData { + for field, fieldInfo := range collInfo.Fields { + result = append(result, collectionField{ + Collection: collection, + Field: field, + }) + + modefields.Add(collectionField{ + Collection: collection, + Field: fieldInfo.RestrictionMode(), + }) + } + } + + // TODO: Save mode fields in own datastructure + for _, cf := range modefields.List() { + result = append(result, cf) + } + + sort.Slice(result, func(i, j int) bool { + if result[i].Collection == result[j].Collection { + return result[i].Field < result[j].Field + } + return result[i].Collection < result[j].Collection + }) + + return result, nil +} + +const tpl = `// Code generated with models.yml DO NOT EDIT. +package dskey + +var collectionFields = [...]collectionField{ + {"invalid", "key"}, + {{- range $cf := .CollectionFields}} + {"{{$cf.Collection}}", "{{$cf.Field}}"}, + {{- end}} +} + +func collectionFieldToID(cf string) int{ + switch cf{ + {{- range $idx, $cf := .CollectionFields}} + case "{{$cf.Collection}}/{{$cf.Field}}": + return {{add1 $idx}} + {{- end}} + default: + return -1 + } +} +` + +func writeFile(w io.Writer, collectionFields []collectionField) error { + t := template.New("t").Funcs(template.FuncMap{ + "add1": func(num int) int { + return num + 1 + }, + }) + t, err := t.Parse(tpl) + if err != nil { + return fmt.Errorf("parsing template: %w", err) + } + + buf := new(bytes.Buffer) + + templateData := struct { + CollectionFields []collectionField + }{ + CollectionFields: collectionFields, + } + + if err := t.Execute(buf, templateData); err != nil { + return fmt.Errorf("writing template: %w", err) + } + + formated, err := format.Source(buf.Bytes()) + if err != nil { + return fmt.Errorf("formating code: %w", err) + } + + if _, err := w.Write(formated); err != nil { + return fmt.Errorf("writing output: %w", err) + } + return nil +} diff --git a/pkg/datastore/dskey/key.go b/pkg/datastore/dskey/key.go index 471b036c..bb1b4525 100644 --- a/pkg/datastore/dskey/key.go +++ b/pkg/datastore/dskey/key.go @@ -2,17 +2,12 @@ package dskey import ( "fmt" - "regexp" "strconv" "strings" ) // Key represents a FQField. -type Key struct { - Collection string - ID int - Field string -} +type Key uint64 // FromString parses a string to a Key. // @@ -20,20 +15,41 @@ type Key struct { // called many times. It is faster to manually validate the key. func FromString(format string, a ...any) (Key, error) { keyStr := fmt.Sprintf(format, a...) - if !keyValid(keyStr) { - return Key{}, invalidKeyError{keyStr} + idx1 := strings.IndexByte(keyStr, '/') + idx2 := strings.LastIndexByte(keyStr, '/') + if idx1 == -1 || idx1 == idx2 { + return 0, InvalidKeyError{keyStr} } - parts := strings.Split(keyStr, "/") - id, _ := strconv.Atoi(parts[1]) - return Key{parts[0], id, parts[2]}, nil + id, _ := strconv.Atoi(keyStr[idx1+1 : idx2]) + + cfID := collectionFieldToID(keyStr[:idx1] + "/" + keyStr[idx2+1:]) + if cfID == -1 { + return 0, InvalidKeyError{keyStr} + } + return Key(joinInt(cfID, id)), nil +} + +// FromParts create a key from collection, id an field. +func FromParts(collection string, id int, field string) (Key, error) { + // TODO: Use a separate function with different namespace for mode-keys + cfID := collectionFieldToID(collection + "/" + field) + if cfID == -1 { + return 0, InvalidKeyError{fmt.Sprintf("%s/%d/%s", collection, id, field)} + } + + if id <= 0 { + return 0, InvalidKeyError{fmt.Sprintf("%s/%d/%s", collection, id, field)} + } + + return Key(joinInt(cfID, id)), nil } // MustKey is like FromString but panics, if the key is invalid. // // Should only be used in tests. -func MustKey(fmt string, a ...any) Key { - k, err := FromString(fmt, a...) +func MustKey(format string, a ...any) Key { + k, err := FromString(format, a...) if err != nil { panic(err) } @@ -41,23 +57,44 @@ func MustKey(fmt string, a ...any) Key { } func (k Key) String() string { - return fmt.Sprintf("%s/%d/%s", k.Collection, k.ID, k.Field) + return fmt.Sprintf("%s/%d/%s", k.Collection(), k.ID(), k.Field()) +} + +// ID returns the id attribute from the Key. +func (k Key) ID() int { + _, id := splitUInt64(uint64(k)) + return id +} + +// Collection returns the collection attribute from the Key. +func (k Key) Collection() string { + cfIdx, _ := splitUInt64(uint64(k)) + return collectionFields[cfIdx].collection +} + +// Field returns the Field attribute from the key. +func (k Key) Field() string { + cfIdx, _ := splitUInt64(uint64(k)) + return collectionFields[cfIdx].field } // FQID returns the FQID part of the field func (k Key) FQID() string { - return fmt.Sprintf("%s/%d", k.Collection, k.ID) + cfIdx, id := splitUInt64(uint64(k)) + return fmt.Sprintf("%s/%d", collectionFields[cfIdx].collection, id) } // CollectionField returns the first and last part of the key. func (k Key) CollectionField() string { - return k.Collection + "/" + k.Field + cfIdx, _ := splitUInt64(uint64(k)) + return collectionFields[cfIdx].collection + "/" + collectionFields[cfIdx].field } // IDField retuns the the /id field for the key. func (k Key) IDField() Key { - k.Field = "id" - return k + idCfID := collectionFieldToID(k.Collection() + "/id") + + return Key(joinInt(idCfID, k.ID())) } // MarshalJSON converts the key to a json string. @@ -65,24 +102,17 @@ func (k Key) MarshalJSON() ([]byte, error) { return []byte(`"` + k.String() + `"`), nil } -var reValidKeys = regexp.MustCompile(`^([a-z]+|[a-z][a-z_]*[a-z])/[1-9][0-9]*/[a-z][a-z0-9_]*$`) - -// keyValid checks if all of the given keys are valid. Invalid keys are -// returned. -// -// A return value of nil means, that all keys are valid. -func keyValid(key string) bool { - return reValidKeys.MatchString(key) -} - -type invalidKeyError struct { +// InvalidKeyError is returned from dskey.FromKey or dskey.FromParts, if the key +// in not valid. +type InvalidKeyError struct { key string } -func (i invalidKeyError) Error() string { +func (i InvalidKeyError) Error() string { return fmt.Sprintf("the key/fqfield is invalid: %s", i.key) } -func (i invalidKeyError) Type() string { +// Type returns "invalid" +func (i InvalidKeyError) Type() string { return "invalid" } diff --git a/pkg/datastore/dskey/key_test.go b/pkg/datastore/dskey/key_test.go new file mode 100644 index 00000000..4e6bbc4d --- /dev/null +++ b/pkg/datastore/dskey/key_test.go @@ -0,0 +1,191 @@ +package dskey_test + +import ( + "fmt" + "testing" + + "github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dskey" +) + +func TestFromString(t *testing.T) { + for _, tt := range []struct { + key string + valid bool + }{ + {"user/1/username", true}, + {"user/1/us.ername", false}, + {"user/1username", false}, + {"user/einz/ername", false}, + {"user/1/user/ername", false}, + } { + t.Run(tt.key, func(t *testing.T) { + key, err := dskey.FromString(tt.key) + if tt.valid && err != nil { + t.Errorf("Key is not valid, expected valid key") + } else if !tt.valid && err == nil { + t.Errorf("Key is valid, expected invalid key") + } + + if tt.valid && key.String() != tt.key { + t.Errorf("build key != created key: %s != %s", tt.key, key.String()) + } + }) + } +} + +func TestFromParts(t *testing.T) { + for _, tt := range []struct { + collection string + id int + field string + fromString string + }{ + {"user", 1, "username", "user/1/username"}, + {"user", 12, "username", "user/12/username"}, + {"motion", 12, "title", "motion/12/title"}, + } { + t.Run(fmt.Sprintf("%s/%d/%s", tt.collection, tt.id, tt.field), func(t *testing.T) { + keyFromParts, err := dskey.FromParts(tt.collection, tt.id, tt.field) + if err != nil { + t.Fatalf("FromParts: %v", err) + } + + keyFromString, _ := dskey.FromString(tt.fromString) + + if keyFromParts != keyFromString { + t.Errorf("from parts != from string") + } + }) + } +} + +func TestID(t *testing.T) { + for _, tt := range []struct { + key string + expect int + }{ + {"user/1/username", 1}, + {"user/12/username", 12}, + } { + t.Run(tt.key, func(t *testing.T) { + key, err := dskey.FromString(tt.key) + if err != nil { + t.Fatalf("Key is not valid: %v", err) + } + + if key.ID() != tt.expect { + t.Errorf("got %d, expected %d", key.ID(), tt.expect) + } + }) + } +} + +func TestCollection(t *testing.T) { + for _, tt := range []struct { + key string + expect string + }{ + {"user/1/username", "user"}, + {"user/12/username", "user"}, + {"motion/12/title", "motion"}, + } { + t.Run(tt.key, func(t *testing.T) { + key, err := dskey.FromString(tt.key) + if err != nil { + t.Fatalf("Key is not valid: %v", err) + } + + if key.Collection() != tt.expect { + t.Errorf("got %s, expected %s", key.Collection(), tt.expect) + } + }) + } +} + +func TestField(t *testing.T) { + for _, tt := range []struct { + key string + expect string + }{ + {"user/1/username", "username"}, + {"user/12/username", "username"}, + {"motion/12/title", "title"}, + } { + t.Run(tt.key, func(t *testing.T) { + key, err := dskey.FromString(tt.key) + if err != nil { + t.Fatalf("Key is not valid: %v", err) + } + + if key.Field() != tt.expect { + t.Errorf("got %s, expected %s", key.Field(), tt.expect) + } + }) + } +} + +func TestFQID(t *testing.T) { + for _, tt := range []struct { + key string + expect string + }{ + {"user/1/username", "user/1"}, + {"user/12/username", "user/12"}, + {"motion/12/title", "motion/12"}, + } { + t.Run(tt.key, func(t *testing.T) { + key, err := dskey.FromString(tt.key) + if err != nil { + t.Fatalf("Key is not valid: %v", err) + } + + if key.FQID() != tt.expect { + t.Errorf("got %s, expected %s", key.FQID(), tt.expect) + } + }) + } +} + +func TestCollectionField(t *testing.T) { + for _, tt := range []struct { + key string + expect string + }{ + {"user/1/username", "user/username"}, + {"user/12/username", "user/username"}, + {"motion/12/title", "motion/title"}, + } { + t.Run(tt.key, func(t *testing.T) { + key, err := dskey.FromString(tt.key) + if err != nil { + t.Fatalf("Key is not valid: %v", err) + } + + if key.CollectionField() != tt.expect { + t.Errorf("got %s, expected %s", key.CollectionField(), tt.expect) + } + }) + } +} + +func TestIDField(t *testing.T) { + for _, tt := range []struct { + key string + expect string + }{ + {"user/1/username", "user/1/id"}, + {"user/12/username", "user/12/id"}, + {"motion/12/title", "motion/12/id"}, + } { + t.Run(tt.key, func(t *testing.T) { + key, err := dskey.FromString(tt.key) + if err != nil { + t.Fatalf("Key is not valid: %v", err) + } + + if key.IDField().String() != tt.expect { + t.Errorf("got %s, expected %s", key.IDField(), tt.expect) + } + }) + } +} diff --git a/pkg/datastore/dskey/map_benchmark_test.go b/pkg/datastore/dskey/map_benchmark_test.go new file mode 100644 index 00000000..575c41b4 --- /dev/null +++ b/pkg/datastore/dskey/map_benchmark_test.go @@ -0,0 +1,128 @@ +package dskey_test + +import ( + "fmt" + "strings" + "testing" +) + +// go test -bench . github.com/OpenSlides/openslides-autoupdate-service/pkg/datastore/dskey + +func MyBenchmark[Key comparable](b *testing.B, buildKey func(id int) Key) { + count := 100_000 + myMap := make(map[Key]string, count) + keys := make([]Key, count) + for i := 0; i < count; i++ { + key := buildKey(i) + myMap[key] = "hello" + keys[i] = key + } + + b.ResetTimer() + + for n := 0; n < b.N; n++ { + for _, key := range keys { + if myMap[key] != "hello" { + b.Fatalf("value is %s, expected hello", myMap[key]) + } + } + } +} + +func BenchmarkString(b *testing.B) { + type Key string + + buildKey := func(id int) Key { + return Key(fmt.Sprintf("foo/%d/bar", id)) + } + + MyBenchmark(b, buildKey) +} + +func BenchmarkStringInStruct(b *testing.B) { + type Key struct { + value string + } + + buildKey := func(id int) Key { + return Key{fmt.Sprintf("foo/%d/bar", id)} + } + + MyBenchmark(b, buildKey) +} + +func BenchmarkIntInt(b *testing.B) { + type Key struct { + fieldCollectionIdx int + id int + } + + buildKey := func(id int) Key { + return Key{1, id} + } + + MyBenchmark(b, buildKey) +} + +func BenchmarkUInt64(b *testing.B) { + type Key uint64 // Somehow calculate the fieldCollection and id from this value with shift + + buildKey := func(id int) Key { + return Key(id) + } + + MyBenchmark(b, buildKey) +} + +func BenchmarkOldKey(b *testing.B) { + type Key struct { + Collection string + ID int + Field string + } + + buildKey := func(id int) Key { + return Key{Collection: "foo", ID: id, Field: "bar"} + } + + MyBenchmark(b, buildKey) +} + +func BenchmarkKeyWithIndex(b *testing.B) { + type Key struct { + value string + idx1 int + idx2 int + id int + } + + buildKey := func(id int) Key { + value := fmt.Sprintf("foo/%d/bar", id) + return Key{ + value: value, + idx1: 3, + idx2: strings.LastIndexByte(value, '/'), + id: id, + } + } + + MyBenchmark(b, buildKey) +} + +func BenchmarkSeparateID(b *testing.B) { + type Key struct { + value string + idx int + id int + } + + buildKey := func(id int) Key { + return Key{ + value: "foo/bar", + idx: 3, + id: id, + } + } + + MyBenchmark(b, buildKey) +} diff --git a/pkg/datastore/dsmock/yaml_data.go b/pkg/datastore/dsmock/yaml_data.go index a36a07c9..730b187c 100644 --- a/pkg/datastore/dsmock/yaml_data.go +++ b/pkg/datastore/dsmock/yaml_data.go @@ -44,15 +44,23 @@ func YAMLData(input string) map[dskey.Key][]byte { } for fieldName, fieldValue := range field { - key := dskey.MustKey("%s/%d/%s", dbKey, id, fieldName) + key, err := dskey.FromParts(dbKey, id, fieldName) + if err != nil { + panic(err) + } + bs, err := json.Marshal(fieldValue) if err != nil { panic(fmt.Errorf("creating test db. Key %s: %w", key, err)) } + data[key] = bs } - idKey := dskey.MustKey("%s/%d/id", dbKey, id) + idKey, err := dskey.FromParts(dbKey, id, "id") + if err != nil { + panic(err) + } data[idKey] = []byte(strconv.Itoa(id)) } @@ -62,8 +70,18 @@ func YAMLData(input string) map[dskey.Key][]byte { panic(fmt.Errorf("invalid object type: got %T, expected map[string]interface{}", dbValue)) } + id, err := strconv.Atoi(parts[1]) + if err != nil { + panic(err) + } + for fieldName, fieldValue := range field { - fqfield := dskey.MustKey("%s/%s/%s", parts[0], parts[1], fieldName) + + fqfield, err := dskey.FromParts(parts[0], id, fieldName) + if err != nil { + panic(err) + } + bs, err := json.Marshal(fieldValue) if err != nil { panic(fmt.Errorf("creating test db. Key %s: %w", fqfield, err)) @@ -71,7 +89,10 @@ func YAMLData(input string) map[dskey.Key][]byte { data[fqfield] = bs } - idKey := dskey.MustKey("%s/%s/id", parts[0], parts[1]) + idKey, err := dskey.FromParts(parts[0], id, "id") + if err != nil { + panic(err) + } data[idKey] = []byte(parts[1]) case 3: @@ -83,7 +104,15 @@ func YAMLData(input string) map[dskey.Key][]byte { data[key] = bs - idKey := dskey.MustKey("%s/%s/id", parts[0], parts[1]) + id, err := strconv.Atoi(parts[1]) + if err != nil { + panic(err) + } + + idKey, err := dskey.FromParts(parts[0], id, "id") + if err != nil { + panic(err) + } data[idKey] = []byte(parts[1]) default: panic(fmt.Errorf("invalid db key %s", dbKey)) diff --git a/pkg/datastore/flow/combined_test.go b/pkg/datastore/flow/combined_test.go index c018d974..9b5b5529 100644 --- a/pkg/datastore/flow/combined_test.go +++ b/pkg/datastore/flow/combined_test.go @@ -59,6 +59,8 @@ func TestCombine(t *testing.T) { t.Run("update user", func(t *testing.T) { ctx, cancel := context.WithCancel(ctx) defer cancel() + defer userFlow.ClearUpdate() + defer groupFlow.ClearUpdate() errCh := make(chan error, 1) go combined.Update( @@ -72,6 +74,7 @@ func TestCombine(t *testing.T) { expect := map[dskey.Key][]byte{userKey: []byte(`"new name"`)} if !reflect.DeepEqual(got, expect) { errCh <- fmt.Errorf("Got %v, expected %v", got, expect) + return } errCh <- nil @@ -89,6 +92,8 @@ func TestCombine(t *testing.T) { t.Run("update group", func(t *testing.T) { ctx, cancel := context.WithCancel(ctx) defer cancel() + defer userFlow.ClearUpdate() + defer groupFlow.ClearUpdate() errCh := make(chan error, 1) go combined.Update( @@ -102,6 +107,7 @@ func TestCombine(t *testing.T) { expect := map[dskey.Key][]byte{groupKey: []byte(`"new name"`)} if !reflect.DeepEqual(got, expect) { errCh <- fmt.Errorf("Got %v, expected %v", got, expect) + return } errCh <- nil diff --git a/pkg/datastore/flow/middleware_test.go b/pkg/datastore/flow/middleware_test.go index 32cfe4e6..cb7a1943 100644 --- a/pkg/datastore/flow/middleware_test.go +++ b/pkg/datastore/flow/middleware_test.go @@ -52,9 +52,9 @@ func (m *add100Middleware) Update(ctx context.Context, updateFn func(map[dskey.K func TestMiddleware(t *testing.T) { ctx := context.Background() subFlow := newMockFlow(dsmock.YAMLData(`--- - user/1/likes: 5 + motion/1/start_line_number: 5 `)) - likesKey := dskey.MustKey("user/1/likes") + likesKey := dskey.MustKey("motion/1/start_line_number") middleware := add100Middleware{subFlow} diff --git a/pkg/datastore/flow/mock_test.go b/pkg/datastore/flow/mock_test.go index d1737e72..87b55b47 100644 --- a/pkg/datastore/flow/mock_test.go +++ b/pkg/datastore/flow/mock_test.go @@ -48,11 +48,6 @@ func (m *mockFlow) Update(ctx context.Context, updateFn func(map[dskey.Key][]byt <-ctx.Done() - m.mu.Lock() - m.updateFn = nil - m.registerCh = make(chan struct{}) - m.mu.Unlock() - return } @@ -62,6 +57,15 @@ func (m *mockFlow) Registered() <-chan struct{} { return m.registerCh } +// ClearUpdate waits until the update function is clean again. +func (m *mockFlow) ClearUpdate() { + m.mu.Lock() + defer m.mu.Unlock() + + m.updateFn = nil + m.registerCh = make(chan struct{}) +} + func (m *mockFlow) SendUpdate(data map[dskey.Key][]byte, err error) { m.mu.Lock() defer m.mu.Unlock() diff --git a/pkg/datastore/flow_postgres.go b/pkg/datastore/flow_postgres.go index 7d427ad7..15d24e68 100644 --- a/pkg/datastore/flow_postgres.go +++ b/pkg/datastore/flow_postgres.go @@ -126,7 +126,7 @@ func (p *FlowPostgres) Get(ctx context.Context, keys ...dskey.Key) (map[dskey.Ke var value []byte element, ok := table[k.FQID()] if ok { - idx, ok := fieldIndex[k.Field] + idx, ok := fieldIndex[k.Field()] if ok { value = element[idx] } @@ -146,7 +146,7 @@ func prepareQuery(keys []dskey.Key) (uniqueFieldsStr string, fieldIndex map[stri uniqueFQIDSet := make(map[string]struct{}) uniqueFieldsSet := make(map[string]struct{}) for _, k := range keys { - uniqueFieldsSet[k.Field] = struct{}{} + uniqueFieldsSet[k.Field()] = struct{}{} uniqueFQIDSet[k.FQID()] = struct{}{} } @@ -169,7 +169,7 @@ func prepareQuery(keys []dskey.Key) (uniqueFieldsStr string, fieldIndex map[stri // maximum of different fields. func splitFieldKeys(keys []dskey.Key) [][]dskey.Key { sort.Slice(keys, func(i, j int) bool { - return keys[i].Field < keys[j].Field + return keys[i].Field() < keys[j].Field() }) var out [][]dskey.Key @@ -179,7 +179,7 @@ func splitFieldKeys(keys []dskey.Key) [][]dskey.Key { for _, k := range keys { nextList = append(nextList, k) - if k.Field != lastField { + if k.Field() != lastField { keyCount++ if keyCount >= maxFieldsOnQuery { out = append(out, nextList) @@ -187,7 +187,7 @@ func splitFieldKeys(keys []dskey.Key) [][]dskey.Key { keyCount = 0 } } - lastField = k.Field + lastField = k.Field() } out = append(out, nextList) diff --git a/pkg/datastore/flow_postgres_test.go b/pkg/datastore/flow_postgres_test.go index 36f1c570..43564eea 100644 --- a/pkg/datastore/flow_postgres_test.go +++ b/pkg/datastore/flow_postgres_test.go @@ -57,13 +57,13 @@ func TestSourcePostgresGetSomeData(t *testing.T) { first_name: Hugo motion/42: - name: antrag + title: antrag text: beschluss `, map[string][]byte{ "user/1/username": []byte(`"hugo"`), "user/1/first_name": []byte(`"Hugo"`), - "motion/42/name": []byte(`"antrag"`), + "motion/42/title": []byte(`"antrag"`), "motion/42/text": []byte(`"beschluss"`), }, }, @@ -75,7 +75,7 @@ func TestSourcePostgresGetSomeData(t *testing.T) { `, map[string][]byte{ "user/1/username": []byte(`"hugo"`), - "motion/2/name": nil, + "motion/2/title": nil, }, }, } { @@ -138,7 +138,7 @@ func TestBigQuery(t *testing.T) { keys := make([]dskey.Key, count) for i := 0; i < count; i++ { - keys[i] = dskey.Key{Collection: "user", ID: 1, Field: fmt.Sprintf("f%d", i)} + keys[i], _ = dskey.FromParts("user", 1, fmt.Sprintf("f%d", i)) } testData := make(map[dskey.Key][]byte) @@ -276,7 +276,7 @@ func (tp *testPostgres) addTestData(ctx context.Context, data map[dskey.Key][]by if _, ok := objects[fqid]; !ok { objects[fqid] = make(map[string]json.RawMessage) } - objects[fqid][k.Field] = v + objects[fqid][k.Field()] = v } conn, err := tp.conn(ctx) diff --git a/pkg/datastore/flow_vote_count.go b/pkg/datastore/flow_vote_count.go index 08e5c48e..a1300488 100644 --- a/pkg/datastore/flow_vote_count.go +++ b/pkg/datastore/flow_vote_count.go @@ -142,11 +142,11 @@ func (s *FlowVoteCount) Get(ctx context.Context, keys ...dskey.Key) (map[dskey.K for _, key := range keys { out[key] = nil - if key.Collection != "poll" || key.Field != "vote_count" { + if key.Collection() != "poll" || key.Field() != "vote_count" { continue } - if count, ok := s.voteCount[key.ID]; ok { + if count, ok := s.voteCount[key.ID()]; ok { out[key] = []byte(strconv.Itoa(count)) } } @@ -170,7 +170,12 @@ func (s *FlowVoteCount) Update(ctx context.Context, updateFn func(map[dskey.Key] if count == 0 { bs = nil } - out[dskey.Key{Collection: "poll", ID: pollID, Field: "vote_count"}] = bs + key, err := dskey.FromParts("poll", pollID, "vote_count") + if err != nil { + updateFn(out, err) + return + } + out[key] = bs } updateFn(out, nil) diff --git a/pkg/fastjson/benchmark_test.go b/pkg/fastjson/benchmark_test.go new file mode 100644 index 00000000..020a53e0 --- /dev/null +++ b/pkg/fastjson/benchmark_test.go @@ -0,0 +1,100 @@ +package fastjson_test + +import ( + "encoding/json" + "testing" + + "github.com/OpenSlides/openslides-autoupdate-service/pkg/fastjson" +) + +func BenchmarkFastjsonDecodeInt(b *testing.B) { + values := [][]byte{ + []byte("5"), + []byte("7"), + []byte("42345234"), + []byte("-34234"), + []byte("0"), + []byte("invalid"), + } + + b.ResetTimer() + for n := 0; n < b.N; n++ { + sum := 0 + for _, v := range values { + i, err := fastjson.DecodeInt(v) + if err != nil { + continue + } + sum += i + } + } +} + +func BenchmarkJSONDecodeInt(b *testing.B) { + values := [][]byte{ + []byte("5"), + []byte("7"), + []byte("42345234"), + []byte("-34234"), + []byte("0"), + []byte("invalid"), + } + + b.ResetTimer() + for n := 0; n < b.N; n++ { + sum := 0 + for _, v := range values { + var i int + + if err := json.Unmarshal(v, &i); err != nil { + continue + } + sum += i + } + } +} + +func BenchmarkFastjsonDecodeIntList(b *testing.B) { + values := [][]byte{ + []byte("[5]"), + []byte("[]"), + []byte("[2,3,4]"), + []byte("[1,2,3,4,5,6,7,8,9]"), + []byte("invalid"), + } + + b.ResetTimer() + for n := 0; n < b.N; n++ { + var sum []int + for _, v := range values { + list, err := fastjson.DecodeIntList(v) + if err != nil { + continue + } + sum = append(sum, list...) + } + } +} + +func BenchmarkJSONDecodeIntList(b *testing.B) { + values := [][]byte{ + []byte("[5]"), + []byte("[]"), + []byte("[2,3,4]"), + []byte("[1,2,3,4,5,6,7,8,9]"), + []byte("invalid"), + } + + b.ResetTimer() + for n := 0; n < b.N; n++ { + var sum []int + for _, v := range values { + var list []int + + if err := json.Unmarshal(v, &list); err != nil { + continue + } + sum = append(sum, list...) + } + } +} diff --git a/pkg/fastjson/fastjson.go b/pkg/fastjson/fastjson.go new file mode 100644 index 00000000..34dba6e2 --- /dev/null +++ b/pkg/fastjson/fastjson.go @@ -0,0 +1,42 @@ +// Package fastjson provides some function for hast json decoding for special +// types. +package fastjson + +import ( + "bytes" + "fmt" + "strconv" +) + +// DecodeInt decodes a json int value to an int type. +func DecodeInt(bs []byte) (int, error) { + return strconv.Atoi(string(bs)) +} + +// DecodeIntList decodes a json List[int] value to an []int type. +func DecodeIntList(bs []byte) ([]int, error) { + // Remove [ and ] + if len(bs) < 2 { + return nil, fmt.Errorf("invalid int list: %s", bs) + } + bs = bs[1 : len(bs)-1] + + numbers := bytes.Split(bs, []byte(",")) + + out := make([]int, 0, len(numbers)) + for i, n := range numbers { + n = bytes.TrimSpace(n) + if len(n) == 0 { + continue + } + + v, err := DecodeInt(n) + if err != nil { + return nil, fmt.Errorf("%dth value, `%s`, is not a number: %w", i, n, err) + } + + out = append(out, v) + } + + return out, nil +} diff --git a/pkg/fastjson/fuzzy_test.go b/pkg/fastjson/fuzzy_test.go new file mode 100644 index 00000000..64362810 --- /dev/null +++ b/pkg/fastjson/fuzzy_test.go @@ -0,0 +1,77 @@ +package fastjson_test + +import ( + "bytes" + "encoding/json" + "reflect" + "testing" + + "github.com/OpenSlides/openslides-autoupdate-service/pkg/fastjson" +) + +func FuzzDecodeInt(f *testing.F) { + f.Add([]byte("0")) + f.Add([]byte("24234")) + f.Add([]byte("-34")) + f.Add([]byte("234234234234234234234234982348234789243324243243141243")) + f.Add([]byte("hello world")) + f.Add([]byte(`"hello world"`)) + + f.Fuzz(func(t *testing.T, value []byte) { + if len(bytes.TrimSpace(value)) != len(value) { + t.Skip() + } + + myResult, myErr := fastjson.DecodeInt(value) + + var jsonResult int + jsonErr := json.Unmarshal(value, &jsonResult) + + switch { + case myErr != nil && jsonErr != nil: + // Both versions returned an error + return + case myErr != nil: + t.Errorf("DecodeInt(%s): %v", value, myErr) + case jsonErr != nil: + // It is ok for my version to give better results. + return + // t.Errorf("DecodeInt(%s) did not return an error", value) + case myResult != jsonResult: + t.Errorf("DecodeInt(%s) == %d, json == %d", value, myResult, jsonResult) + } + }) +} + +func FuzzDecodeIntList(f *testing.F) { + f.Add([]byte("[0]")) + f.Add([]byte("[2,4,2,34]")) + f.Add([]byte("[-34,34]")) + f.Add([]byte("[]")) + f.Add([]byte("hello world")) + + f.Fuzz(func(t *testing.T, value []byte) { + if len(bytes.TrimSpace(value)) != len(value) { + t.Skip() + } + + myResult, myErr := fastjson.DecodeIntList(value) + + var jsonResult []int + jsonErr := json.Unmarshal(value, &jsonResult) + + switch { + case myErr != nil && jsonErr != nil: + // Both versions returned an error + return + case myErr != nil: + t.Errorf("DecodeIntList(`%s`): %v, json: %v", value, myErr, jsonResult) + case jsonErr != nil: + // It is ok for my version to give better results. + return + // t.Errorf("DecodeInt(%s) did not return an error", value) + case !reflect.DeepEqual(myResult, jsonResult): + t.Errorf("DecodeIntList(`%s`) == %v, json == %v", value, myResult, jsonResult) + } + }) +} diff --git a/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/285acbaf8430bedf b/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/285acbaf8430bedf new file mode 100644 index 00000000..7bc49820 --- /dev/null +++ b/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/285acbaf8430bedf @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("01") diff --git a/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/af9bedcb9e0a31e8 b/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/af9bedcb9e0a31e8 new file mode 100644 index 00000000..778cc615 --- /dev/null +++ b/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/af9bedcb9e0a31e8 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("0 ") diff --git a/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/c2501043394e49f2 b/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/c2501043394e49f2 new file mode 100644 index 00000000..ef9f9d4f --- /dev/null +++ b/pkg/fastjson/testdata/fuzz/FuzzDecodeInt/c2501043394e49f2 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("000") diff --git a/pkg/fastjson/testdata/fuzz/FuzzDecodeIntList/3f6f7617c226e0ad b/pkg/fastjson/testdata/fuzz/FuzzDecodeIntList/3f6f7617c226e0ad new file mode 100644 index 00000000..293c083b --- /dev/null +++ b/pkg/fastjson/testdata/fuzz/FuzzDecodeIntList/3f6f7617c226e0ad @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("[ ]") diff --git a/pkg/fastjson/testdata/fuzz/FuzzDecodeIntList/caf81e9797b19c76 b/pkg/fastjson/testdata/fuzz/FuzzDecodeIntList/caf81e9797b19c76 new file mode 100644 index 00000000..67322c70 --- /dev/null +++ b/pkg/fastjson/testdata/fuzz/FuzzDecodeIntList/caf81e9797b19c76 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("") diff --git a/pkg/redis/redis_test.go b/pkg/redis/redis_test.go index a7a97001..a3f102e7 100644 --- a/pkg/redis/redis_test.go +++ b/pkg/redis/redis_test.go @@ -39,7 +39,7 @@ func TestUpdate(t *testing.T) { t.Fatalf("Creating test connection: %v", err) } - if _, err := conn.Do("XADD", "ModifiedFields", "*", "user/1/name", "Hubert", "user/2/name", "Isolde"); err != nil { + if _, err := conn.Do("XADD", "ModifiedFields", "*", "user/1/username", "Hubert", "user/2/username", "Isolde"); err != nil { t.Fatalf("Insert test data: %v", err) } @@ -48,8 +48,8 @@ func TestUpdate(t *testing.T) { } expect := map[dskey.Key][]byte{ - dskey.MustKey("user/1/name"): []byte("Hubert"), - dskey.MustKey("user/2/name"): []byte("Isolde"), + dskey.MustKey("user/1/username"): []byte("Hubert"), + dskey.MustKey("user/2/username"): []byte("Isolde"), } if !reflect.DeepEqual(got, expect) { t.Errorf("Update() returned %v, expected %v", got, expect) diff --git a/pkg/redis/stream_test.go b/pkg/redis/stream_test.go index ccf535fc..e79be87f 100644 --- a/pkg/redis/stream_test.go +++ b/pkg/redis/stream_test.go @@ -17,11 +17,11 @@ func TestStream(t *testing.T) { [ [ "12345-0", - ["user/1/name", "Helga", "user/2/name", "Isolde"] + ["user/1/username", "Helga", "user/2/username", "Isolde"] ], [ "12346-0", - ["user/1/name", "Hubert", "user/3/name", "Igor"] + ["user/1/username", "Hubert", "user/3/username", "Igor"] ] ] ] @@ -36,9 +36,9 @@ func TestStream(t *testing.T) { } expect := map[dskey.Key][]byte{ - dskey.MustKey("user/1/name"): []byte("Hubert"), - dskey.MustKey("user/2/name"): []byte("Isolde"), - dskey.MustKey("user/3/name"): []byte("Igor"), + dskey.MustKey("user/1/username"): []byte("Hubert"), + dskey.MustKey("user/2/username"): []byte("Isolde"), + dskey.MustKey("user/3/username"): []byte("Igor"), } if !reflect.DeepEqual(got, expect) { t.Errorf("Got %v, expected %v", got, expect)