Empacotando funções do dplyr dentro de funções

Estou tentando criar uma função simples que utiliza verbos do pacote dplyr pra funcionar, bem baseado na live do @clente sobre rlang, mas o resultado tá saindo diferente do esperado:

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
dados = data.frame(x=c(1,1,1,1,2,2,2,2))

# Padrão esperado
dados |> count(x) |> mutate(freq=n/sum(n))
#>   x n freq
#> 1 1 4  0.5
#> 2 2 4  0.5

coleta_porcentagens = function(.data, varname){
  .data |>
    count({{varname}}) %>%
    mutate(freq = n/sum(n))
}

# Resposta errada
coleta_porcentagens(dados, "x")
#>   "x" n freq
#> 1   x 8    1

Em vez de agrupar os resultados de acordo com o factor que eu passei, ele tá ignorando o argumento, e não entendo porque isso tá acontecendo. Houve alguma mudança recente no dplyr ou rlang que possa explicar isso?

Resolvido:

coleta_porcentagens = function(.data, varname){
  varname <- sym(varname)
  
  .data |>
    count({{varname}}) %>%
    mutate(freq = n/sum(n))
}

Já foi resolvido porém vou deixar outra solução utilizando o ensym e o !!

library(dplyr)

dados = data.frame(x=c(1,1,1,1,2,2,2,2))

coleta_porcentagens = function(.data, varname){
  varname <- ensym(varname)
  .data |>
    count(!!varname) %>%
    mutate(freq = n/sum(n))
}

coleta_porcentagens(dados, "x")