Background
Let’s say I have a TypedStruct that has some common fields:
typedstruct do
@typedoc "A product."
field(:item_id, String.t())
field(:name, String.t())
field(:brand, String.t())
end
This is a product and because products can go on sale, I have another TypedStruct:
typedstruct do
@typedoc "A sale."
field(:item_id, String.t())
field(:name, String.t())
field(:brand, String.t())
field(:price, number)
field(:discount, boolean)
end
Issue
Now, you are probably seeing there is some duplication here. Since a sale is a product with extra info, some of the fields are replicated.
A first attempt at a solution could be something like this:
typedstruct do
@typedoc "A sale."
field(:product, Product.t())
field(:price, number)
field(:discount, boolean)
end
However, my use case does not allow for this. I must have a struct with exactly the same fields as Product.t()
and a few extra. I cannot simply smash a product
field into my sales struct.
Question
- Is there a way to compose types using TypedStruct (or normal structs?)
- If not, what do you think would be the solution with the least amount of copy/pasting for this issue?