R/update.R

Defines functions `$<-.enum_enum` `[[<-.enum_enum` `[<-.enum_enum` enum_set enum_update

#' @export
`$<-.enum_enum` <- function(x, key, value) {
  enum_set(x, key, value)
}

#' @export
`[[<-.enum_enum` <- function(x, key, value) {
  enum_set(x, key, value)
}

#' @export
`[<-.enum_enum` <- function(x, ..., value) {
  enum_set(x, vctrs::vec_c(...), value)
}

enum_set <- function(x, keys, vals) {
  vctrs::vec_assert(keys, ptype = character())
  if (is.null(vals)) vals <- list(NULL)
  c(keys, vals) %<-% vctrs::vec_recycle_common(keys = keys, vals = vals)
  enum_update(x, !!!rlang::set_names(vals, keys))
}

#' @export
enum_update <- function(x, ...) {
  proxy <- enum_proxy(x)
  c(vals, keys) %<-% enum_prepare(...,
    .ptype = enum_ptype(proxy = proxy),
    .mask = enum_mask(proxy = proxy)
  )
  assert_keys_match(keys, enum_keys(x))
  proxy[keys] <- vals
  new_enum(unname(proxy), rlang::names2(proxy))
}
shunsambongi/enum documentation built on Nov. 11, 2019, 6:46 a.m.