Maybe something like this, that uses Map.split/2 to split the map in two?
def new(%AppConfig{} = app_config) do
{config, options} = Map.split(app_config, [:name, :password, :database])
%DatabaseConfig{ name: config.database, users: [%User{name: config.name, password: config.password], options: options]
end


















