cattrs icon indicating copy to clipboard operation
cattrs copied to clipboard

Feature request: "flatten" operation for cattrs.gen

Open gmacon opened this issue 2 years ago • 0 comments

For a thing at work, I implemented some [un]structure hook factories that wrap make_dict_structure_fn and make_dict_unstructure_fn to support flattening an attribute, like this:

@define
class A:
    a: int
    b: int

@define
class C:
    a: A
    c: int

converter = ...  # set up a converter with my wrappers

assert converter.unstructure(C(A(1, 2), 3)) == {'a': 1, 'b': 2, 'c': 3}

I'd like to upstream this support. The basic idea is to implement functionality similar to Serde's Struct flattening by extending the override function to take a flatten: bool argument that defaults to False and then adjusting make_dict_structure_fn and make_dict_unstructure_fn to use it.

I'm willing to work on this, but wanted to get feedback from folks here before I start.

gmacon avatar Apr 12 '23 18:04 gmacon