registerAction method

void registerAction(
  1. String? cmd,
  2. Schema? schema,
  3. Future action(
    1. Map<String, dynamic>
    )
)

Registers an action in this Azure function.

  • cmd a action/command name.
  • schema a validation schema to validate received parameters.
  • action an action function that is called when action is invoked.

Implementation

void registerAction(String? cmd, Schema? schema,
    Future Function(Map<String, dynamic>) action) {
  if (cmd == null || cmd.isEmpty) {
    throw UnknownException(null, 'NO_COMMAND', 'Missing command');
  }

  // ignore: unnecessary_null_comparison
  if (action == null) {
    throw UnknownException(null, 'NO_ACTION', 'Missing action');
  }

  if (actions[cmd] != null) {
    throw UnknownException(
        null, 'DUPLICATED_ACTION', '$cmd action already exists');
  }

  // Hack!!! Wrapping action to preserve prototyping context
  Future actionCurl(Map<String, dynamic> params) async {
    // Perform validation
    if (schema != null) {
      var traceId = getTraceId(params);
      var err = schema.validateAndReturnException(traceId, params, false);
      if (err != null) {
        return err;
      }
    }

    // Todo: perform verification?
    return action(params);
  }

  actions[cmd] = actionCurl;
}