harn-modules 0.7.30

Cross-file module graph and import resolution utilities for Harn
Documentation
// std/json — JSON utility patterns
//
// Import with: import "std/json"

/**
 * Pretty-print a value as indented JSON (2-space indent).
 * pretty.
 */
pub fn pretty(value) {
  return json_stringify(value)
}

/**
 * Safely parse JSON, returning nil on failure instead of throwing.
 * safe_parse.
 */
pub fn safe_parse(text) {
  let result = try { json_parse(text) }
  if is_ok(result) {
    return unwrap(result)
  }
  return nil
}

/**
 * Merge two dicts (shallow). Keys in b override keys in a.
 * merge.
 */
pub fn merge(a, b) {
  var result = a
  for entry in b {
    result = result + {[entry.key]: entry.value}
  }
  return result
}

/**
 * Pick specific keys from a dict.
 * pick.
 */
pub fn pick(data, keys) {
  var result = {}
  for k in keys {
    if data[k] != nil {
      result = result + {[k]: data[k]}
    }
  }
  return result
}

/**
 * Omit specific keys from a dict.
 * omit.
 */
pub fn omit(data, keys) {
  let exclude = set(keys)
  var result = {}
  for entry in data {
    if !set_contains(exclude, entry.key) {
      result = result + {[entry.key]: entry.value}
    }
  }
  return result
}