R/prepare.R

Defines functions enum_prepare

enum_prepare <- function(..., .ptype = NULL, .mask = rlang::as_data_mask(list())) {
  quos <- rlang::quos(...)
  len <- length(quos)
  vals <- vector(mode = "list", length = len)
  keys <- rlang::names2(quos)

  for (i in seq_len(len)) {
    quo <- quos[[i]]
    key <- keys[[i]]

    if (key == "" && rlang::quo_is_symbol(quo)) {
      val <- key <- as.character(rlang::get_expr(quo))
    } else if (rlang::quo_is_missing(quo)) {
      val <- key
    } else {
      val <- rlang::eval_tidy(quo, .mask)
    }

    if (!is.null(val)) {
      vals[[i]] <- val
    }
    keys[[i]] <- key
    if (key != "") {
      .mask[[key]] <- val
    }
  }

  assert_vals_not_null(vals, keys)
  assert_vals_scalars(vals, keys)
  assert_keys_not_empty(keys)

  named <- rlang::set_names(vals, keys)
  vals <- unname(vctrs::vec_c(!!!named, .ptype = .ptype))
  list(vals = vals, keys = keys)
}
shunsambongi/enum documentation built on Nov. 11, 2019, 6:46 a.m.