R/input.R

Defines functions remove_inputs_impl update_inputs_impl make_inputs_impl

make_inputs_impl <- function(...) {
  inputs <- exprs(..., .ignore_empty = "trailing")
  return_list_if_empty(inputs)

  nms <- names2(inputs)

  missing_name <- nms == ""
  value_is_missing <- purrr::map_lgl(inputs, is_missing)
  value_is_symbol <- purrr::map_lgl(inputs, is_symbol)

  no_name_no_value <- any(missing_name & value_is_missing)   # (x, , z)
  has_name_no_value <- any(!missing_name & value_is_missing) # (x = , y)
  no_name_bad_value <- any(missing_name & !value_is_symbol)  # ("a")

  if (no_name_no_value | has_name_no_value | no_name_bad_value) {
    abort("Unexpected inputs")
  }

  no_defaults <- missing_name & value_is_symbol # (x)
  nms <- purrr::pmap(list(inputs, nms, no_defaults), function(input, name, no_default) {
    if (no_default) as_string(input) else name
  })
  inputs <- purrr::map2(inputs, no_defaults, function(input, no_default) {
    if (no_default) missing_arg() else input
  })
  out <- set_names(inputs, nms)
  out
}

update_inputs_impl <- function(old, new, .envir = caller_env()) {
  new <- purrr::map_if(new, is_null, as_box)
  out <- list_modify(old, !!!new)
  out <- purrr::map_if(out, is_box, unbox)
  return_list_if_empty(out)
  out
}

remove_inputs_impl <- function(old, ...) {
  message <- "All inputs to remove must be specified by symbols"
  remove_something_impl(old, ..., .abort_message = message)
}
shunsambongi/planner documentation built on Aug. 19, 2022, 9:57 a.m.