Yes, you can create structs in runtime. Consider this code
def create_struct(name, fields) do
defmodule name do
defstrcut fields
end
end
This is a dark magic, but there is no need to limit yourself, be expressive, break laws, make people be afraid of yourself and make them treat your code with fear and respect.
To match on such structs in runtime, consider something like
name = Case
create_struct(name, [x: 1, y: 2])
...
case something do
%^name{} ->
...
end