Skip to content
This repository was archived by the owner on Apr 10, 2023. It is now read-only.
This repository was archived by the owner on Apr 10, 2023. It is now read-only.

First-class support for containers #126

@HollayHorvath

Description

@HollayHorvath

Storing collections of objects in various containers is an everyday job. However, currently there is no obvious way to have a field that is just a top-level container by itself.

Let's say we have the following structure:

{
    "Hello": {
        "name": "World",
        "id": 123,
    },
    "Foo": {
        "name": "Bar",
        "id": 42,
    }
}

In this case one could write the User type as the following:

class User(Model):
    name: fields.Str()
    id: fields.Int()

but representing the outer dictionary is hard and cumbersome.

Of course it is possible to wrap it in a new type that has a dict field, but that will create a new layer in the output and the user has to dispatch the functions being used (or use the field directly, also not very nice).
The other solution I found is to serialize the User type into a dict and serialize the whole data structure using the json module, but that also feels cumbersome.

I could imagine something like this (but probably now the brightest solution):

MyUsersDict = serde.collections.Dict(serde.fields.Str(), User)

users = MyUsersDict()
users["Hello"] = User(...)

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions